Probleme mit dem Nomenklaturpaket: Seitenzahlen verschwenden

Probleme mit dem Nomenklaturpaket: Seitenzahlen verschwenden

Ich habe nomenclbei der Verwendung des Pakets den folgenden Fehler festgestellt \pagenumbering{gobble}. Das folgende MWE-Beispiel funktioniert einwandfrei, aber wenn das \pagenumbering{gobble}nicht kommentiert ist, werden meine Nomenklaturelemente abgelehnt.

MWE 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}

Ausführen der Befehle:

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

Warum habe ich \pagenumbering{gobble}?

Wegen der Popularität vondiese Frage und Antwort.

Problemumgehung

Ich habe die folgende Problemumgehung gefunden, bei der \thispagestyle{empty}anstelle von verwendet wird \pagenumbering{gobble}. Dies erklärt jedoch nicht, warum das Problem überhaupt aufgetreten ist.

\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}

Antwort1

Kurz zusammengefasst: Dies ist kein Fehler, sondern die Folge der makeindexAnforderung einer gültigen Seitenzahl, da es für die Erstellung von Indizes konzipiert ist.


Pakete wie nomencl(und glossariesetc.) müssen die Informationen sortieren und zusammenstellen, die in der Liste der Nomenklaturen/Symbole/Begriffe erscheinen müssen. TeX ist eigentlich nicht für diese Art der Datenverarbeitung konzipiert. (Das glossariesPaket verfügt über eine Option, die dies tut, leidet jedoch unter schwerwiegenden Einschränkungen, wie z. B. einer langen Erstellungszeit und einer fehlerhaften Sortierung.) Dies bedeutet, dass ein externes Tool erforderlich ist. Der Paketautor hat zwei Möglichkeiten:

  1. Verwenden Sie ein vorhandenes Werkzeug.
  2. Erstellen Sie ein neues Werkzeug.

Die erste Option ist die einfachste und wird von übernommen nomencl. In TeX-Distributionen sind zwei Haupttools verfügbar, die für diese Art von Aktionen entwickelt wurden: makeindexund xindy. Diese Tools sind jedoch speziell für Indizes konzipiert, die Seitenzahlen (Standorte) erfordern. Von den beiden xindyist flexibler, erfordert aber dennoch entweder einen gültigen Standort oder einen Querverweis für jeden Eintrag, während makeindeximmer ein Standort erforderlich ist und nur einen bestimmten Standortstil erkennt. (Querverweise werden behandelt, indem der Standort verworfen wird.)

Bei Listen mit Nomenklaturen/Begriffen/Symbolen, die über eine zugehörige Beschreibung verfügen, wird die Seitenzahl häufig nicht angezeigt (oder nur im Index aufgeführt). Da jedoch ein Indizierungstool verwendet wird, ist eine gültige Seitenzahl erforderlich, damit das Tool die Daten akzeptiert, auch wenn die von der Indizierungsanwendung erstellte Standortliste von LaTeX möglicherweise ignoriert wird.

Dies ist ein grundlegender Nachteil bei der Verwendung eines Indexierungstools für etwas, das einem Index ähnelt, aber nicht genau dasselbe ist. Der Vorteil der Verwendung eines vorhandenen Indexierungstools (insbesondere makeindex, das es schon lange gibt) besteht darin, dass die meisten TeX-Distributionen die Anwendung installiert und einsatzbereit haben sollten. Im Fall von gibt es makeindexes auch schon lange genug, damit der Code überprüft werden konnte und nun als sicher genug gilt, um es in die Liste der vertrauenswürdigen Anwendungen von TeX aufzunehmen, was bedeutet, dass es im eingeschränkten Shell-Escape ausgeführt werden kann.

Im Fall von wird \pagenumbering{@gobble}der Standort (der durch die Erweiterung von erhalten wird \thepage) zu einer leeren Zeichenfolge, die kein gültiger Standort ist und daher von abgelehnt wird makeindex.

Die zweite Option (ein neues Tool erstellen) ist komplizierter, insbesondere für Paketautoren, die LaTeX-Code schreiben können, sich aber mit Programmiersprachen nicht auskennen. Es dauert eine Weile, bis neue Anwendungen in TeX-Distributionen aufgenommen werden:

  • Wenn sie in einer kompilierten Sprache (wie C) geschrieben sind, laufen sie nur auf dem Betriebssystem, auf dem sie kompiliert wurden. (Wenn ich beispielsweise ein Programm in C schreibe, läuft es nur unter Linux, nicht unter Windows usw.) Wenn Sie es auf einem anderen Betriebssystem ausführen möchten, müssen Sie den Code portieren und für Ihre Plattform kompilieren.
  • Wenn sie in einer interpretierten Sprache (wie Perl) oder einer Sprache geschrieben sind, die in Code kompiliert wird, der eine Laufzeitumgebung erfordert (wie Java), dann laufen sie auf jedem Betriebssystem, auf dem der Interpreter oder die Laufzeitumgebung installiert ist.

In beiden Fällen ist die Verteilung der neuen Anwendung auf Systeme beschränkt, die die kompilierte Anwendung ausführen können oder die Interpreter-/Laufzeitumgebung ausführen können, die zum Ausführen der Anwendung erforderlich ist. Alte Betriebssysteme sind hiervon normalerweise ausgeschlossen.

Derglossaries-extraDas Paket kombiniert beide Ansätze: Es kann wie das Basispaket mit oder glossariesverwendet werden , im Gegensatz zum Basispaket kann es jedoch auch mit verwendet werden.makeindexxindybib2gls, das speziell für das Paket entwickelt wurde glossaries-extraund daher leere Positionen zulässt (tatsächlich sind alle Positionen zulässig, es werden jedoch nur dann Bereiche gebildet, wenn numerische Werte ermittelt werden können).

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}

Dokumentaufbau (wo die Datei heißt test.tex):

pdflatex test
bib2gls test
pdflatex test

Ergebnis:

Bild des Dokuments

verwandte Informationen