巻末に「略語・用語の一覧」や「記号表」を付けたい——しかも、本文に現れた語だけを、自動で五十音順・アルファベット順に並べて。手で表を作ると、用語を一つ足すたびに並べ替えと番号合わせに追われます。LaTeX には専用の道具が二系統あります。語や略語の 用語集 を作る **glossaries(と現代版の glossaries-extra)、そして数式記号の 記号表 に特化した nomencl です。どちらも索引や相互参照と同じく、本文で印を付け、外部プログラムで整列させ、追加のコンパイルで流し込む** という流れで動きます。
用語集 — glossaries の基本
glossaries は、語・記法・略語を プリアンブルで一度定義 し、本文では短い命令で呼び出す仕組みです。まずパッケージを読み込み、**\makeglossaries を書きます。これが用語集ファイルを開く宣言で、これを書き忘れると 用語集は一切出力されません**。注意点として、hyperref を使う場合は **glossaries を hyperref より後に読み込みます**(「最後に読むのは hyperref」という通例の例外です)。
語の定義は **\newglossaryentry{key}{name=..., description=...}** です。第 1 引数 key は参照用の名札(自由な文字列)、第 2 引数は キー=値 のリストで、name(表示名)と description(説明)が中心です。本文で使うときは **\gls{key}**。これは初出かどうかにかかわらず name を差し込み、同時にその語を「用語集に載せる」と記録します。
\usepackage{glossaries}
\makeglossaries
\newglossaryentry{set}{%
name={set},
description={a collection of distinct objects}%
}
\newglossaryentry{matrix}{%
name={matrix},
plural={matrices},% 不規則な複数形を明示 / irregular plural
description={a rectangular array of numbers}%
}
\begin{document}
本文で \gls{set} と \glspl{matrix} に言及する。
\printglossary
\end{document}\gls には大文字化・複数形の変種があり、語頭を変えるだけで使い分けられます。name から自動で作られる複数形は末尾に s を付けただけなので、matrices のような不規則形は **plural キーで明示します。表示名と参照時の表記を変えたいときは text、関連する記号は symbol** キーに入れます。
| 命令 | 出力 | 用途 |
|---|---|---|
\gls{set} | set | 通常(小文字)の参照 |
\Gls{set} | Set | 文頭で語頭を大文字化 |
\glspl{matrix} | matrices | 複数形 |
\Glspl{matrix} | Matrices | 複数形+語頭大文字 |
\glsdesc{set} | a collection of distinct objects | 説明(description)を差し込む |
略語 — 初出で展開する
略語には専用の **\newacronym{key}{short}{long}** があります。short が略記(例 SVM)、long が正式名称(例 support vector machine)。これを \gls{key} で呼ぶと、初出だけ「正式名称(略記)」、2 回目以降は略記のみ に自動で切り替わります——略語の最初の登場で必ずフルスペルを示す、というお作法を機械が守ってくれるわけです。別リストにまとめるには、パッケージを \usepackage[acronym]{glossaries} と読み込みます。
\usepackage[acronym]{glossaries}
\makeglossaries
\newacronym{svm}{SVM}{support vector machine}
\begin{document}
\gls{svm} は強力だ。% 初出: support vector machine (SVM)
その後も \gls{svm} を使う。% 2回目以降: SVM
\end{document}初出フラグは文書を通じて 1 つずつ管理されます。「ここから先はもう一度フルスペルで」とリセットしたいときは \glsreset{key}、全部まとめてリセットするなら \glsresetall を使います。なお説明が段落をまたぐほど長い場合は、\newglossaryentry の代わりに **\longnewglossaryentry** を使います。
ビルド — makeglossaries が要る
索引と同じく、用語集も 1 回のコンパイルでは現れません。LaTeX は \gls などが記録した語を補助ファイルに書き出すだけで、整列も整形もしません。そこで外部プログラム **makeglossaries を走らせます。これは Perl 製のスクリプトで、文書の設定を見て内部で makeindex または xindy** を適切に呼び分け、整列済みの用語集を作ります。手順は次の 3 段です。
pdflatex mydoc # 用語をファイルへ書き出す / write the recorded terms
makeglossaries mydoc # 整列・整形(拡張子なし)/ sort & format (no extension)
pdflatex mydoc # 用語集を本文へ流し込む / pull the glossary into the documentPerl が入っていない環境(Windows など)では、Lua で書かれた **makeglossaries-lite** が同じ役目を果たします。makeglossaries を呼び忘れて 2 回目の pdflatex だけ回しても、用語集は空白のまま——索引の makeindex 忘れとまったく同じ落とし穴です。Overleaf では裏で必要な処理が自動実行されるため、この手順を意識する必要はほとんどありません。
現代版 — glossaries-extra と bib2gls
同じ作者(Nicola Talbot)による **glossaries-extra** は glossaries を拡張した上位パッケージで、現在の推奨構成です。これと組み合わせる最新のビルド方式が **bib2gls**。考え方は文献管理の biber に似ていて、用語を **.bib ファイル** にまとめて書いておき、bib2gls が本文で実際に使われた語だけを選び、整列して取り込みます。makeindex/xindy の役目(選別と整列)を 1 つのプログラムが担うわけです。
使うには、パッケージを **\usepackage[record]{glossaries-extra} と record** オプション付きで読み込みます(これが bib2gls 連携の要で、makeindex/xindy の索引付けを無効にし、代わりに .aux へ記録を書き出します)。.bib ファイルの各項目は **@entry(語)、@abbreviation(略語)、@symbol**(記号)などの型で書きます。
@entry{set,
name = {set},
description = {a collection of distinct objects}
}
@abbreviation{svm,
short = {SVM},
long = {support vector machine}
}本文側では \input の代わりに **\GlsXtrLoadResources[src={terms}]** で .bib を読み込みます(src は拡張子なしのファイル名)。用語の使い方は \gls{set} のままですが、印刷は整列済みのため **\printunsrtglossary**(unsrt = unsorted、すでに bib2gls が並べたのでそのまま出す、の意)を使います。
\usepackage[record]{glossaries-extra}
\GlsXtrLoadResources[src={terms}]% terms.bib を読む / load terms.bib
\begin{document}
\gls{set} と \gls{svm} を本文で使う。
\printunsrtglossary
\end{document}ビルドは makeglossaries の代わりに bib2gls を呼びます。--group は語を頭文字グループごとに見出し分けするためのオプション、pdflatex は xelatex/lualatex に置き換えても構いません。
pdflatex mydoc
bib2gls --group mydoc # .aux を読み .glstex を書き出す / read .aux, write .glstex
pdflatex mydoc記号表 — nomencl パッケージ
論文の冒頭で「本稿で使う記号の一覧」を示したいときは、glossaries でも書けますが、記号専用なら軽量な **nomencl が手軽です。プリアンブルに \usepackage{nomencl} と \makenomenclature を置き、記号が初めて登場する箇所で \nomenclature{記号}{説明} と印を付け、一覧を出したい場所に \printnomenclature** を書きます。記号は数式なので $...$ で囲みます。
\documentclass{article}
\usepackage{nomencl}
\makenomenclature
\begin{document}
重力加速度を $g$ とする。%
\nomenclature{$g$}{gravitational acceleration}%
質量 $m$ の物体には $F = mg$ が働く。%
\nomenclature{$m$}{mass of the object}%
\nomenclature{$F$}{force}%
\printnomenclature
\end{document}\nomenclature の直前の行末には、不要な空白や改行が紛れ込まないよう **% を付けるのが定石です(記号の前後に空白が入ると整列がずれます)。並び順を細かく制御したいときは、任意引数で並べ替えキーを与えられます——\nomenclature[<prefix>]{記号}{説明}** の <prefix> が整列に使われます。たとえばギリシャ文字 \sigma は先頭のバックスラッシュのせいで先に並んでしまうため、\nomenclature[g-sigma]{$\sigma$}{...} のように prefix で位置を調整します。
nomencl のビルドと調整
nomencl は内部で makeindex を使います。\makenomenclature を書くと、LaTeX は記号情報を **.nlo** ファイルに書き出します。これを nomencl 付属のスタイル **nomencl.ist で整列させ、出力 .nls** を作るのが次の命令です。最後にもう一度コンパイルすれば .nls が読み込まれ、記号表が現れます。
pdflatex mydoc
makeindex mydoc.nlo -s nomencl.ist -o mydoc.nls
pdflatex mydoc見出しの語は既定で英語の "Nomenclature"。和文では **\renewcommand{\nomname}{記号一覧}** のように変更できます。目次に載せたいときはパッケージを \usepackage[intoc]{nomencl} と読み込みます。各項目に「○ページ参照」を自動付与する **refpage、「式 (n) 参照」を付ける refeq などのオプションもあります。記号を物理量・変数などのグループに分けたいときは、prefix と \nomgroup** の再定義で見出し付きの小グループを作れます。
- **語・略語の用語集なら
glossaries/glossaries-extra。** 初出展開や複数形・大文字化まで自動。 - **新規に始めるなら
glossaries-extra+bib2gls。**.bibに書き、使った語だけを\printunsrtglossaryで整列出力。 - **数式記号の一覧だけなら
nomencl。** 軽量で、\nomenclatureの印付けとmakeindexのひと手間で完結。 - いずれも追加のコンパイルが要る。 外部プログラム(
makeglossaries/bib2gls/makeindex)を挟み、もう一度 LaTeX を回す。