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}のように書ける。