Open14

また TeX/LaTeX で頭を抱えようとしている私へ

KusaReMKNKusaReMKN

\LaTeX でビジネス文書を書く

みんなレポートや論文を書くだけでビジネス文書なんて書いてやくれないと思っていたが、そんなことはなかった。 jbusinessdoc を利用することでビジネス文書を便利に書くことができる[1]。 しかし、本家は \rm p\LaTeX\rm up\LaTeX にしか対応していない。

脚注
  1. https://github.com/h1g0/latex_jbusinessdoc ↩︎

KusaReMKNKusaReMKN

latexmk を使ってコンパイルする

latexmk は \LaTeX 文書をよしなにコンパイルしてくれるコマンドである[1]

私は \mathrm{Lua}\LaTeX をよく使う。 latexmk を用いて \mathrm{Lua}\LaTeX の文書をコンパイルしてもらうには、tex のソースファイルがあるディレクトリで以下のように実行する。

$ latexmk -lualatex

しぶしぶ \mathrm{p}\LaTeX\mathrm{up}\LaTeX を用いるときは、次のように実行する。

$ latexmk -latex='platex'		# pLaTeX の場合
$ latexmk -latex='ptex2pdf -u -l'	# upLaTeX で PDF 生成までやってもらう場合

latexmk は tex ソースファイルを監視して、更新があったときに自動で再コンパイルすることもできる。 以下のように実行すると、latexmk は Ctrl+C を押下されるまでの間 tex ファイルを監視し続ける。 ただし、オプションの -interaction= は、コンパイルに失敗した場合に対話的なモードに入らないことを指示している。

$ latexmk -pvc -interaction=nonstopmode -latex='ptex2pdf -u -l'

(追記 2023-12-15)上の方法だと、latexmk は dvi を生成した気になっているかもしれない。 dvi 経由で pdf に変換していることを明示するためには、オプション -pdfdvi を指定して、dvipdf の代わりに dvipdfmx を用いることを指示したほうが良さそう。

$ latexmk -pvc -pdfdvi -latex=uplatex -e '$dvipdf="dvipdfmx %O %S";' -interaction=nonstopmode

(追記ここまで)

なお、MS-Windows の cmd.exe 上で実行する場合は、一重引用符を二重引用符に置き換えたほうが良いかもしれない。

脚注
  1. https://texwiki.texjp.org/?Latexmk ↩︎

KusaReMKNKusaReMKN

「図」とか「表」とか書かない

figure 環境とか table 環境とかで \caption{} を使うと、図 X: ほげほげ とか 表 Y: ふがふが とか表示される。 それに \label{} を用いてラベルをつけ、参照するときに 図~\ref{hoge} とか 表~\ref{fuga} とか書かないこと。 誰がそれを「図」と呼び、「表」と呼ぶと決め付けたのかよく考えなさい。 \figurename~\ref{hoge} とか \tablename~\ref{fuga} とか書くと、勝手に「図」とか「表」とかにしてくれる。

また、\ref{}\cite{} の前には改行しないスペース ~ を置くと、その位置での改行を禁止しながら見栄えよく仕上がる。

2024-02-07 追記

ちょっと違う話ではあるが、Twitter 上で@underachiever_R 氏から指摘をいただいた。

https://twitter.com/underachiever_R/status/1754720062899204494

~ の幅は \xkanjiskip とは異なるかもしれないから、見栄えに影響しそうである。 代わりに \figurename\nobreak\ref{hoge} のように記述すればよいのだが、毎回これを記述することは煩雑で仕方がないので、楽に記述できるように以下のようなマクロを用意すると良さそう。

\newcommand{\図}[1]{\figurename\nobreak\ref{#1}}
\newcommand{\表}[1]{\tablename\nobreak\ref{#1}}
\newcommand{\式}[1]{\nobreak\eqref{#1}}
KusaReMKNKusaReMKN

テーブルのカラムの長さを指定しつつ中揃えにする

プレアンブルに以下を追加して、p{width} のように C{width} とかする[1]

プレアンブル追加分
\usepackage{array}
\newcommand{\PreserveBackslash}[1]{\let\temp=\\#1\let\\=\temp}
\newcolumntype{C}[1]{>{\PreserveBackslash\centering}p{#1}}
\newcolumntype{R}[1]{>{\PreserveBackslash\raggedleft}p{#1}}
\newcolumntype{L}[1]{>{\PreserveBackslash\raggedright}p{#1}}
サンプル
\documentclass[uplatex,dvipdfmx]{jsarticle}
\usepackage{array}
\newcommand{\PreserveBackslash}[1]{\let\temp=\\#1\let\\=\temp}
\newcolumntype{C}[1]{>{\PreserveBackslash\centering}p{#1}}
\newcolumntype{R}[1]{>{\PreserveBackslash\raggedleft}p{#1}}
\newcolumntype{L}[1]{>{\PreserveBackslash\raggedright}p{#1}}
\begin{document}
\begin{table}
  \centering
  \caption{ほげほげ}
  \begin{tabular}{C{5zw}C{10zw}}
    \hline
    あれ & それ \\
    \hline
    hoge & fuga \\
    piyo & hogera \\
    foo & bar \\
    \hline
  \end{tabular}
\end{table}
\end{document}
脚注
  1. https://tex.stackexchange.com/questions/286950/how-to-create-a-table-with-fixed-column-widths ↩︎

KusaReMKNKusaReMKN

危険な曲がり角を表示する

危険な曲がり角 ☡ を表示するには manfnt を読み込んで \dbend とします。

\documentclass[lualatex]{jlreq}
\usepackage{manfnt}
\begin{document}
\LaTeX では危険な曲がり角は\dbend のように見えます。

亜種もあります。

\lhdbend
\reversedvideodbend
\textdbend
\textlhdbend
\textreversedvideodbend
\end{document}

KusaReMKNKusaReMKN

\label の引数を表示する

showlabels パッケージがちょうどその仕事をしてくれます[1]

\documentclass[lualatex,paper=b7,landscape]{jlreq}
\usepackage{amsmath}
\usepackage[inline]{showlabels}
\usepackage{tikz}
\begin{document}\nobreak\eqref{すごい式}は有名なやつです。
\begin{equation}
  1729
  = 12^3 + 1^3
  = 10^3 + 9^3
  \label{すごい式}
\end{equation}

あと、\figurename\nobreak\ref{すごい図}もまた有名なやつです。
\begin{figure}
  \centering
  \tikz\draw(0,0)--(1,2)--(2,0)--(3,2)--(4,0);
  \caption{簡単な図}
  \label{すごい図}
\end{figure}
\end{document}

サンプル出力

脚注
  1. https://konoyonohana.blog.fc2.com/blog-entry-299.html ↩︎

KusaReMKNKusaReMKN

罫線(HTML の <HR> のようなもの)

水平線は \hrulefill で出せます。点線が良いなら \dotfill で出せます。段落の字下げが邪魔なら \noindent を前に付けてやります。

KusaReMKNKusaReMKN

jlreq と newtx(newpx)とで壊れる脚注を直す

jlreq の脚注番号のスタイルは「1)」を上付きにしたような見た目になっています。 これに、newtx や newpx のフォントを使うように指示するとカッコの部分だけ上付きにならずに表示されます。

問題になる入力
\documentclass[lualatex,paper=a7paper,landscape]{jlreq}
\usepackage{newtx}
\pagestyle{empty}
\begin{document}
これが脚注\footnote{わお。}です。
脚注番号の括弧の部分が不自然に大きくなります。
\end{document}


脚注番号の括弧の部分が不自然に大きくなる

これを解決するには newtx の読み込み時に defaultsups のオプションを添えてやります[1]。 newtx のドキュメントに記載があるようです。

問題にならない入力
\documentclass[lualatex,paper=a7paper,landscape]{jlreq}
\usepackage[defaultsups]{newtx}
\pagestyle{empty}
\begin{document}
これが脚注\footnote{わお。}です。
脚注番号の括弧の部分が修正されました。
\end{document}


脚注番号の括弧の部分が修正される

脚注
  1. https://okumuralab.org/tex/mod/forum/discuss.php?d=3524&parent=21730 ↩︎

KusaReMKNKusaReMKN

ソースファイルを分割しながらそれぞれのファイルでも組版できるようにする

長い文章を書いていると、ソースファイルを複数に分割したくなってきます。 ソースファイルの断片をそれぞれのファイルに記述し、\input\include などの素朴な命令を利用することで一つの出力を得るようにすることも考えられますが、これではそれぞれの断片のファイルを単体で組版して出力することができません。

subfiles パッケージはこれを実現してくれます[1]。 以下のように使います。

main.tex
\documentclass[lualatex]{jlreq}
\usepackage{subfiles}
\begin{document}
\section{ほげ}
これが文書全体になる\TeX ファイルです。
文書の断片であるファイルを取り込みます。
\subfile{./sub.tex}
\end{document}
sub.tex
\documentclass[./main]{subfiles}
\begin{document}
\section{ふが}
これは文書の断片である\TeX ファイルです。
これ単体でも組版できます。
親ファイル(\texttt{main.tex})のプレアンブル部分を共有するかのように振舞います。
\end{document}
$ latexmk -lualatex main
$ latexmk -lualatex sub

main.pdf
main.pdf

sub.pdf
sub.pdf

脚注
  1. https://qiita.com/sankichi92/items/1e113fcf6cc045eb64f7 ↩︎

KusaReMKNKusaReMKN

tabularray で multicolumn とか multirow とかする

tabularray パッケージを使うことで、本文中の tabular 環境と数式中の array 環境とを使い分けることなく、いづれも tblr 環境で記述できるようになります。 また、booktabs パッケージで導入された \toprule\midrule、及び \bottomrule コマンドを用いた綺麗な表組みを実現できます。

ところで、人間はときに表のセルを結合したくなるものです。 Microsoft Excel の上でのセル結合は百害あって一利すらありませんが、組版の文脈では当たり前に行われることですから、心配ありません。 従来の tabular 環境では \multicolumn コマンドや multirow パッケージで提供される \multirow コマンドを利用することでこれを実現していましたが、tblr 環境ではこれらのコマンドは時代遅れとされており、利用できません。 代わりに \SetCell コマンドを利用するように言われます。 以下に典型的な例を示して説明に代えます。 ただし、実際の表ではみだりに縦棒を利用すべきではありません。

\documentclass[lualatex]{jlreq}

\usepackage{xcolor}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}

\begin{document}
\begin{table}
  \centering
  \caption{セル結合の例}
  \begin{tblr}{|l|r|l|r|}
    \toprule
    1x1     & \SetCell[c=3]{c} 3x1
                      &         &         \\
    \midrule
    \SetCell[c=2,r=3]{c} 2x3
            &         & \SetCell[r=2]{h} 1x2h
                                & 1x1     \\
    \midrule
            &         &         & 1x1     \\
    \midrule
            &         & \SetCell[r=2]{f} 1x2f
                                & 1x1     \\
    \midrule
    \SetCell[c=2]{r} 2x1r
            &         &         & 1x1     \\
    \midrule
    1x1     & 1x1     & \SetCell[c=2]{l} 2x1l
                                &         \\
    \bottomrule
  \end{tblr}
\end{table}
\end{document}

セル結合の例
セル結合の例