Wie sortiere ich zwei Glossare (Liste der Akronyme und Liste der Symbole) unterschiedlich?

Wie sortiere ich zwei Glossare (Liste der Akronyme und Liste der Symbole) unterschiedlich?

Ich verwende das glossariesPaket, 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 hyperrefPaket.

Antwort1

Aktualisieren:

Ab glossariesVersion 4.04 (die ich gerade auf CTAN hochgeladen habe) gibt es nun drei Möglichkeiten zum Generieren von Glossaren:

  1. Verwenden von TeX zum Sortieren der Glossare (neu).
  2. makeindexWird zum Sortieren der Glossare verwendet .
  3. xindyWird 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}

xindyDies erfordert nur zwei LaTeX-Durchläufe ( oder müssen nicht verwendet werden makeindex). Die Liste der Akronyme wird nach Buchstaben sortiert (mithilfe datatooldes \dtlletterindexcompareHandlers) und das Hauptglossar wird nach Verwendung sortiert. Andere Sortieroptionen sind: word(Wortreihenfolge mit datatooldem \dtlwordindexcompareHandler), def(Reihenfolge der Definition), case(Groß-/Kleinschreibung beachten mit datatooldem \dtlcompareHandler) und nocase(Groß-/Kleinschreibung nicht beachten mit datatooldem \dtlicompareHandler).

Seite 1:

Bild von Seite 1

Seite 2:

Bild von Seite 2

Hauptnachteile:

  • Das Sortieren ist langsamer als bei Verwendung von makeindex/ xindy(mit Ausnahme der useMethode, 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 documentUmgebung 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:

Bild des Ergebnisses

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:

Bildbeschreibung hier eingeben

\manifoldDNADies ist nicht so schön wie der andere Ansatz, da die - und -Befehle so definiert werden müssen, \vfieldDNAdass die gleiche Seitenzahl nicht zweimal im Glossar gedruckt wird (einmal normal und einmal fett).

verwandte Informationen