命名パッケージの問題: ページ番号の乱用

命名パッケージの問題: ページ番号の乱用

nomenclを使用する際に、パッケージに次のバグがあることを発見しました\pagenumbering{gobble}。次の MWE の例は正常に動作しますが、 が\pagenumbering{gobble}コメント解除されると、命名法項目が拒否されます。

ムウェ document.tex

\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{nomencl}
\usepackage{lipsum}
\makenomenclature
\begin{document}
    %\pagenumbering{gobble}
    \nomenclature{$c$}{Speed of light in a vacuum inertial frame}
    \nomenclature{$h$}{Planck constant}
    \lipsum[1]
    \printnomenclature
\end{document}

コマンドを実行します:

pdflatex document.tex
makeindex -s nomencl.ist -o document.nls document.nlo
pdflatex document.tex

なぜ私が \pagenumbering{gobble}?

人気のためこの質問と回答

回避策

\thispagestyle{empty}の代わりに を使用する次の回避策を見つけました\pagenumbering{gobble}が、これがそもそも問題が発生した理由を説明するものではありません。

\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{nomencl}
\usepackage{lipsum}
\makenomenclature
\begin{document}
    \lipsum[1]
    \thispagestyle{empty}
    \clearpage
    \setcounter{section}{0}
    \pagenumbering{arabic}
    \nomenclature{$c$}{Speed of light in a vacuum inertial frame}
    \nomenclature{$h$}{Planck constant}
    \lipsum[1]
    \printnomenclature
\end{document}

答え1

要約makeindex: これはバグではありませんが、インデックスを作成するために設計されているため、有効なページ番号が必要であることが原因です。


nomencl(およびなど)などのパッケージは、glossaries命名法/記号/用語のリストに表示する必要がある情報を並べ替えて照合する必要があります。TeX は実際にはそのようなデータ処理用に設計されていません。(パッケージにはglossariesこれを行うオプションがありますが、ビルド時間が長く、並べ替えが不安定であるなど、厳しい制限があります。) つまり、外部ツールが必要です。パッケージ作成者には 2 つのオプションがあります。

  1. 既存のツールを使用します。
  2. 新しいツールを作成します。

最初のオプションは最も単純で、 で採用されていますnomencl。TeX ディストリビューションには、この種のアクション用に設計された 2 つの主要なツールがあります:makeindexと ですxindy。ただし、これらのツールは、ページ番号 (場所) を必要とする索引用に特別に設計されています。2 つのうち、xindyはより柔軟ですが、各エントリに対して有効な場所または相互参照のいずれかが必要です。一方、 はmakeindex常に場所を必要とし、特定のスタイルの場所のみを認識します。(相互参照は、場所を破棄することによって処理されます。)

説明が付随する命名法/用語/記号のリストの場合、ページ番号は表示されない(または索引にのみリストされる)ことがよくありますが、索引作成ツールが使用されるため、索引作成アプリケーションによって作成された場所リストが LaTeX によって無視される可能性がある場合でも、ツールがデータを受け入れるには有効なページ番号が必要です。

これは、インデックスに似ているがまったく同じではないものにインデックス作成ツールを使用することの基本的な欠点です。既存のインデックス作成ツール (特にmakeindex、長い間使用されている ) を使用する利点は、ほとんどの TeX ディストリビューションにアプリケーションがインストールされ、使用できる状態になっていることです。 の場合もmakeindex、コードが検査されるほど長い間使用されており、現在では TeX の信頼できるアプリケーションのリストに追加されるほど安全であると見なされています。つまり、制限されたシェル エスケープで実行できるということです。

の場合\pagenumbering{@gobble}、場所 ( を展開して取得\thepage) は空の文字列になり、有効な場所ではないため、 によって拒否されますmakeindex

2 番目のオプション (新しいツールを作成する) は、特に LaTeX コードは書けるがプログラミング言語には詳しくないパッケージ作成者にとっては、より複雑です。新しいアプリケーションを TeX ディストリビューションに組み込むには時間がかかります。

  • コンパイル言語 (C など) で記述されている場合、コンパイルされたオペレーティング システムでのみ実行されます。(たとえば、C でプログラムを作成した場合、そのプログラムは Linux でのみ実行され、Windows などでは実行されません。) 別のオペレーティング システムで実行する場合は、コードを移植し、プラットフォーム用にコンパイルする必要があります。
  • インタプリタ言語 (Perl など) またはランタイム環境を必要とするコードにコンパイルされる言語 (Java など) で記述されている場合は、インタプリタまたはランタイム環境がインストールされている任意のオペレーティング システムで実行できます。

いずれの場合も、新しいアプリケーションの配布は、コンパイルされたアプリケーションを実行できるシステム、またはアプリケーションの実行に必要なインタープリタ/ランタイム環境を実行できるシステムに限定されます。通常、古いオペレーティング システムは除外されます。

glossaries-extraパッケージは両方のアプローチを組み合わせています。ベースパッケージと同様に、またはとglossaries一緒に使用できますが、ベースパッケージとは異なり、と一緒に使用することもできます。makeindexxindybib2glsはパッケージ専用に設計されておりglossaries-extra、空の場所を許可します (実際には任意の場所を許可しますが、数値を決定できる場合にのみ範囲を形成します)。

MWE:

\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@symbol{speedoflight,
  name={\ensuremath{c}},
  description={Speed of light in a vacuum inertial frame}
}

@symbol{planck,
  name={\ensuremath{h}},
  description={Planck constant}
}
\end{filecontents*}

\usepackage{lipsum}
\usepackage[record]{glossaries-extra}% 'record' option required for bib2gls

\GlsXtrLoadResources[
  src={\jobname},% entries in \jobname.bib
  selection={all},% select all defined entries
  sort={none},% don't bother sorting
  save-locations=false% location lists not required
]

\begin{document}
\pagenumbering{gobble}
\lipsum[1]

\printunsrtglossary
\end{document}

ドキュメントビルド(ファイルが呼び出される場所test.tex):

pdflatex test
bib2gls test
pdflatex test

結果:

文書の画像

関連情報