また TeX/LaTeX で頭を抱えようとしている私へ
目次
- 画像の幅を行の幅に揃える
でビジネス文書を書く\LaTeX - latexmk を使ってコンパイルする
- 「図」とか「表」とか書かない
- テーブルのカラムの長さを指定しつつ中揃えにする
- 危険な曲がり角を表示する
- jlreq で「?」とか「!」とかの後にアキを入れる
- LuaLaTeX で漢字と + をくっつけない
- \label の引数を表示する
- 罫線(HTML の
<HR>
のようなもの) - jlreq と newtx(newpx)とで壊れる脚注を直す
- ソースファイルを分割しながらそれぞれのファイルでも組版できるようにする
- tabularray で multicolumn とか multirow とかする
画像の幅を行の幅に揃える
\includegraphics
のオプションで width=\linewidth
を指定すればよい[1]。
\begin{figure}
\centering
\includegraphics[width=\linewidth]{mikan.pdf}
\caption{みかんちゃん(PDFの姿)}
\end{figure}
\LaTeX でビジネス文書を書く
みんなレポートや論文を書くだけでビジネス文書なんて書いてやくれないと思っていたが、そんなことはなかった。 jbusinessdoc を利用することでビジネス文書を便利に書くことができる[1]。 しかし、本家は
latexmk を使ってコンパイルする
latexmk は
私は
$ latexmk -lualatex
しぶしぶ
$ 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 上で実行する場合は、一重引用符を二重引用符に置き換えたほうが良いかもしれない。
「図」とか「表」とか書かない
figure 環境とか table 環境とかで \caption{}
を使うと、図 X: ほげほげ とか 表 Y: ふがふが とか表示される。 それに \label{}
を用いてラベルをつけ、参照するときに 図~\ref{hoge}
とか 表~\ref{fuga}
とか書かないこと。 誰がそれを「図」と呼び、「表」と呼ぶと決め付けたのかよく考えなさい。 \figurename~\ref{hoge}
とか \tablename~\ref{fuga}
とか書くと、勝手に「図」とか「表」とかにしてくれる。
また、\ref{}
や \cite{}
の前には改行しないスペース ~
を置くと、その位置での改行を禁止しながら見栄えよく仕上がる。
2024-02-07 追記
ちょっと違う話ではあるが、Twitter 上で@underachiever_R 氏から指摘をいただいた。
~
の幅は \xkanjiskip
とは異なるかもしれないから、見栄えに影響しそうである。 代わりに \figurename\nobreak\ref{hoge}
のように記述すればよいのだが、毎回これを記述することは煩雑で仕方がないので、楽に記述できるように以下のようなマクロを用意すると良さそう。
\newcommand{\図}[1]{\figurename\nobreak\ref{#1}}
\newcommand{\表}[1]{\tablename\nobreak\ref{#1}}
\newcommand{\式}[1]{式\nobreak\eqref{#1}}
テーブルのカラムの長さを指定しつつ中揃えにする
プレアンブルに以下を追加して、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}
危険な曲がり角を表示する
危険な曲がり角 ☡ を表示するには manfnt を読み込んで \dbend とします。
\documentclass[lualatex]{jlreq}
\usepackage{manfnt}
\begin{document}
\LaTeX では危険な曲がり角は\dbend のように見えます。
亜種もあります。
\lhdbend
\reversedvideodbend
\textdbend
\textlhdbend
\textreversedvideodbend
\end{document}
jlreq で「?」とか「!」とかの後にアキを入れる
「?」の後にアキを自動的に入れるためには、プリアンブルに以下を追加します[1]。
\makeatletter
\let\@tempa=\?
\catcode`?=\active
\let?=\@tempa
\makeatother
LuaLaTeX で漢字と + をくっつけない
pTeX では \xspcode で設定される項目です。 LuaTexJa では \ltjsetparameter で設定できます[1]。
\ltjsetparameter{alxspmode={43,2}}
ここで 43 とは + の ASCII コードの十進数表現です。
\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}
<HR>
のようなもの)
罫線(HTML の 水平線は \hrulefill
で出せます。点線が良いなら \dotfill
で出せます。段落の字下げが邪魔なら \noindent
を前に付けてやります。
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}
脚注番号の括弧の部分が修正される
ソースファイルを分割しながらそれぞれのファイルでも組版できるようにする
長い文章を書いていると、ソースファイルを複数に分割したくなってきます。 ソースファイルの断片をそれぞれのファイルに記述し、\input
や \include
などの素朴な命令を利用することで一つの出力を得るようにすることも考えられますが、これではそれぞれの断片のファイルを単体で組版して出力することができません。
subfiles パッケージはこれを実現してくれます[1]。 以下のように使います。
\documentclass[lualatex]{jlreq}
\usepackage{subfiles}
\begin{document}
\section{ほげ}
これが文書全体になる\TeX ファイルです。
文書の断片であるファイルを取り込みます。
\subfile{./sub.tex}
\end{document}
\documentclass[./main]{subfiles}
\begin{document}
\section{ふが}
これは文書の断片である\TeX ファイルです。
これ単体でも組版できます。
親ファイル(\texttt{main.tex})のプレアンブル部分を共有するかのように振舞います。
\end{document}
$ latexmk -lualatex main
$ latexmk -lualatex sub
main.pdf
sub.pdf
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}
セル結合の例