つうさにメモブログ

つうさにがメモをブログとして書いていくところ

LaTeXのナントカrefパッケージたち

意外といっぱいある。

github.com

Emacsのコミットログを眺めていたら、reftexパッケージで変更があった。LaTeX 2019-10-01 kernelで\RefLaTeX本体に取り込まれたことによる変更のようだ。

ところで、reftexのreftex-ref-style-alist変数には\ref\pageref以外の様々な\ナントカrefマクロが書かれている。どうやらそれはLaTeXのパッケージ由来で多くがナントカrefのような名前のパッケージとなっているようだ。

ナントカrefパッケージ

hyperrefパッケージは知っていたが、それ以外のナントカrefパッケージは全く知らなかった。以下のページに詳しくまとめられていた。

tex.stackexchange.com

相互参照は以下のように分類できるとのこと(多分)。

  • 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言語分からん...)

8ttyan.hatenablog.com

(hyperref以外の)ナントカrefパッケージしない

どれも便利なパッケージなことは確かだろうが、マニュアルを読んで使いこなすのが難しそう(\autorefも使わない)だったら、自分で以下のようなマクロを定義するのが楽かもしれない...

\newcommand*{\figref}[1]{\figurename\ref{#1}}
\newcommand*{\tblref}[1]{\tablename\ref{#1}}

上をプリアンブルに書いておいて、今まで図~\ref{fig:foo}としていたところを\figref{fig:foo}のように書く。