LaTeXのナントカrefパッケージたち
意外といっぱいある。
Emacsのコミットログを眺めていたら、reftexパッケージで変更があった。LaTeX 2019-10-01 kernelで\Ref
がLaTeX本体に取り込まれたことによる変更のようだ。
ところで、reftexのreftex-ref-style-alist
変数には\ref
や\pageref
以外の様々な\ナントカref
マクロが書かれている。どうやらそれはLaTeXのパッケージ由来で多くがナントカrefのような名前のパッケージとなっているようだ。
ナントカrefパッケージ
hyperrefパッケージは知っていたが、それ以外のナントカrefパッケージは全く知らなかった。以下のページに詳しくまとめられていた。
相互参照は以下のように分類できるとのこと(多分)。
- Static or hard-coded: LaTeXソースの中に
Section~4
のように書く。 - Semi-dynamic: LaTeXソースの中に
Section~\ref{sec:foo}
のように書く。 - Fully dynamic: LaTeXソースの中でナントカrefパッケージが提供するマクロを使う。
ナントカrefパッケージは\ナントカref
なマクロを使うことで、Section~
とかを文中にハードコードしなくてよくなっていい感じっぽい。それぞれのパッケージで色々違いがある模様。
確かに自分はfigure環境にlabelをつけてそれを参照するとき、図~\ref{fig:foo}
のようにしてたので図~
を自分で書かずに済むのはいいのかもしれない。
\autoref
Fully dynamicな相互参照の例として、hyperrefパッケージの\autoref
がある。\autoref
を使えば参照先の数字だけでなく、説明の文字列(sectionやFigureなど)もつけてくれるが、これは日本語には対応していない。
日本語に対応させるには\figureautorefname
などを定義(上書き)する必要があるが、それは以下の記事が参考になる。(TeX言語分からん...)
\autorefもナントカrefパッケージもしない方法
どれも使いこなせれば便利なパッケージであることは確かだが、マニュアルを読んで使いこなすのが難しそうだ(\autoref
すら使ったことがなかったため)。そんな場合、自分で以下のようなマクロを定義するのが楽かもしれない。
\newcommand*{\figref}[1]{\figurename\ref{#1}} \newcommand*{\tblref}[1]{\tablename\ref{#1}}
上をプリアンブルに書いておけば、今まで図~\ref{fig:foo}
としていたところを\figref{fig:foo}
のように書ける。