Ich verwende das glossaries
Paket, um eine Liste mit Akronymen sowie eine Liste mit Symbolen zu erstellen.
\usepackage[acronym,style=long]{glossaries}
Für die Symbolliste wird das Standard-Glossar verwendet.
Nun möchte ich die Liste der Akronyme alphabetisch ( sort=standard
), die Liste der Symbole jedoch in der Reihenfolge ihres Auftretens ( sort=def
) sortieren. Wie mache ich das?
Ich verwende MikTeX 2.9 mit TeXnicCenter 2 (Beta) unter Windows 7. Mein Projekt enthält das hyperref
Paket.
Antwort1
Aktualisieren:
Ab glossaries
Version 4.04 (die ich gerade auf CTAN hochgeladen habe) gibt es nun drei Möglichkeiten zum Generieren von Glossaren:
- Verwenden von TeX zum Sortieren der Glossare (neu).
makeindex
Wird zum Sortieren der Glossare verwendet .xindy
Wird zum Sortieren der Glossare verwendet .
Die Optionen 2 und 3 können noch immer keine unabhängigen Sortiermethoden für verschiedene Glossare verwenden, aber die neue Option kann:
\documentclass{article}
\usepackage[acronyms]{glossaries}
\makenoidxglossaries
\newacronym{cd}{CD}{covariant derivative}
\newacronym{gr}{GR}{general relativity}
\newacronym{pnd}{PND}{principle null direction}
\newglossaryentry{vfield}{
name={\ensuremath{A^a}},
description={Some vector field}
}
\newglossaryentry{manifold}{
name={\ensuremath{\mathcal{M}}},
description={Some manifold}
}
\begin{document}
Einstein developed the theory of \gls{gr}. Take the \gls{cd} and
apply it on the \glspl{pnd}. We define \gls[format=textbf]{manifold} to be some
manifold.
\clearpage
\gls[format=textbf]{vfield} is some vector field on \gls{manifold}
that has nothing to do with the \glspl{pnd}.
\printnoidxglossary[type=acronym,sort=letter]
\printnoidxglossary[sort=use]
\end{document}
xindy
Dies erfordert nur zwei LaTeX-Durchläufe ( oder müssen nicht verwendet werden makeindex
). Die Liste der Akronyme wird nach Buchstaben sortiert (mithilfe datatool
des \dtlletterindexcompare
Handlers) und das Hauptglossar wird nach Verwendung sortiert. Andere Sortieroptionen sind: word
(Wortreihenfolge mit datatool
dem \dtlwordindexcompare
Handler), def
(Reihenfolge der Definition), case
(Groß-/Kleinschreibung beachten mit datatool
dem \dtlcompare
Handler) und nocase
(Groß-/Kleinschreibung nicht beachten mit datatool
dem \dtlicompare
Handler).
Seite 1:
Seite 2:
Hauptnachteile:
- Das Sortieren ist langsamer als bei Verwendung von
makeindex
/xindy
(mit Ausnahme deruse
Methode, die kein Sortieren erfordert). - Aufeinanderfolgende Standorte werden nicht in einen Bereich umgewandelt (es ist jedoch möglich, das Makro, das die Standortliste anzeigt, neu zu definieren).
- Einträge müssen vor dem Start der
document
Umgebung definiert werden.
Lösung mit datagidx
:
Hier ist meine ursprüngliche Lösung mit datagidx
(einem Teil derDatatool-Paket):
\documentclass{article}
\usepackage{datagidx}
\usepackage[colorlinks]{hyperref}
\newgidx{acronym}{Acronyms}
\newgidx{symbol}{Symbols}
\DTLgidxSetDefaultDB{acronym}
\newacro{html}{hypertext markup language}
\newacro{css}{cascading style sheet}
\newacro{xml}{extensible markup language}
\DTLgidxSetDefaultDB{symbol}
\newterm[description={sample 1}]{B}
\newterm[description={sample 2}]{X}
\newterm[description={sample 3}]{A}
\newterm[description={sample 4}]{C}
\begin{document}
\gls{B}, \gls{X}, \gls{C}, \gls{A}.
\acr{xml}, \acr{html}, \acr{css}.
% default sort is alphabetical
\printterms[database=acronym,columns=1,style=align]
% sort by definition (i.e. don't sort)
\printterms[database=symbol,sort={},columns=1,style=align]
\end{document}
Ergebnis:
Antwort2
Danke! Ich habe gerade tatsächlich eine Möglichkeit gefunden, das mit dem Glossarpaket zu machen. Es ist möglich, da ich sowieso einen Befehl für alle meine Symbole definiere ...
\documentclass[a4paper,twoside,11pt]{article}
\usepackage[acronym,style=long,sanitize={sort=false}]{glossaries} % acronyms and list of symbols
\makeglossaries
% sort symbol index in order of appearance
% warning: this is only valid for less than 1000 pages!
\makeatletter
\def\three@digits#1{\ifnum#1<100 0\ifnum#1<10 0\fi\fi\number#1}
% \nomNoPrint declares a new glossary entry
\newcommand{\nomNoPrint}[3]{\newglossaryentry{#1}{
name={#2},
symbol={#2},
description={#3},
sort={A\three@digits{\value{page}}}
}\glsadd[format=hyperbf]{#1}}
\makeatother
% \nom declares the entry and prints the symbol
\newcommand{\nom}[3]{\nomNoPrint{#1}{#2}{#3}#2}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% define some acronyms
\newacronym{cd}{CD}{covariant derivative}
\newacronym{pnd}{PND}{principle null direction}
\newacronym{gr}{GR}{general relativity}
% define some symbols
\newcommand{\manifoldDNA}{\ensuremath{\mathcal{M}}} % the do-not-add definition
\newcommand{\manifold}{\glsadd{manifold}\manifoldDNA}
\newcommand{\vfieldDNA}{\ensuremath{A^a}}
\newcommand{\vfield}{\glsadd{vfield}\vfieldDNA}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
Einstein developed the theory of \gls{gr}. Take the \gls{cd} and apply it on the \glspl{pnd}. We define
\nom{manifold}{\manifoldDNA}{Some manifold}\
to be some manifold.
\clearpage
\nom{vfield}{\vfieldDNA}{Some vector field} is some vector field on \manifold\ that has nothing to do with the \glspl{pnd}.
\printglossary[type=\acronymtype]
\printglossary
\end{document}
Es sieht dann so aus:
\manifoldDNA
Dies ist nicht so schön wie der andere Ansatz, da die - und -Befehle so definiert werden müssen, \vfieldDNA
dass die gleiche Seitenzahl nicht zweimal im Glossar gedruckt wird (einmal normal und einmal fett).