
Ich möchte Index zusammen mit Akronym verwenden: Immer wenn ich ein Akronym verwende, möchte ich es automatisch im Index haben. Allerdings nicht die Abkürzung, sondern den Langnamen!
Was ich getan habe: Ich habe einen neuen Befehl erstellt:
\newcommand{\acidx}[1]{\ac{#1}\index{\acl*{#1}}}
Das funktioniert. Latex erweitert das ACL-Makro jedoch nichtVorSchreiben der ind-Datei! Mischen index
und acidx` Der Inhalt der idx-Datei ist:
\begin{theindex}
\item \texttt {\acl *{ABC}}, \hyperpage{2}
\item \texttt {\acl *{DEF}}, \hyperpage{1, 2}
\indexspace
\item consetetur, \hyperpage{1}
\end{theindex}
Man kann sehen, dass die Elemente von acidx
gruppiert sind. Ich nehme an, weil \acl
nicht erweitert wurde. Wenn es das wäre, wäre es richtig sortiert.
Um das Problem zu lindern, habe ich versucht
\newcommand{\acidx}[1]{\ac{#1}\index{#1@\acl*{#1}}}
Das ist allerdings nicht ganz sauber, da (soweit ich weiß) der Index nun nach der Abkürzung und nicht nach dem vollständigen Namen sortiert wird, also bei PHP z.B. nach PHP und nicht nach "Hypertext Preprocessor". Außerdem werden dabei alle Einträge durch getrennt, \indexspace
was auch nicht korrekt ist.
Gibt es eine Möglichkeit, den Index zu zwingen, das Makro zu erweitern, bevor die IND-Datei geschrieben wird?
Gibt es eine andere Möglichkeit, das Problem zu beheben?
Ich möchte die Verwendung eines anderen Indexprozessors wie xindy wirklich vermeiden!
Antwort1
Paketacronym
Die interne erweiterbare Version von \acl
ist \AC@acl
. Anschließend schreibt \index
das Makro \acidx
die erweiterte Langversion des Akronyms:
\documentclass{article}
\usepackage{acronym}
\usepackage{makeidx}
\makeindex
\makeatletter
\newcommand*{\acidx}[1]{%
\ac{#1}\index{\AC@acl{#1}}%
}
\makeatother
\acrodef{ABC}{alphabet}
\acrodef{DEF}{definition}
\begin{document}
The \acidx{ABC} contains all\index{all} letters. The \acidx{DEF}
is written with the help of the \acidx{ABC}.
\printindex
\end{document}
Und der Index:
Die .idx
Datei:
\indexentry{alphabet}{1}
\indexentry{all}{1}
\indexentry{definition}{1}
\indexentry{alphabet}{1}
Paketacro
Dasselbe gilt für das Paket acro
, das auf LaTeX3 basiert.
\prop_get:NnNF
Ruft die Eigenschaft \l__acro_long_prop
aus der Datenliste für die Akronym-ID ab #1
und speichert das Ergebnis in \l__acro_long_tl
, siehe die Definition von \acro_get:n
). Die Ergebnis-Token-Listenvariable \l__acro_long_tl
kann dann in verwendet werden \index
:
\documentclass{article}
\usepackage{acro}
\usepackage{makeidx}
\makeindex
\ExplSyntaxOn
\newcommand*{\acidx}[1]{%
\ac{#1}%
\prop_get:NnNF \l__acro_long_prop {#1} \l__acro_long_tl {}
\index{\l__acro_long_tl}%
}
\ExplSyntaxOff
\DeclareAcronym{ABC}{short=ABC, long=alphabet}
\DeclareAcronym{DEF}{short=DEF, long=definition}
\begin{document}
The \acidx{ABC} contains all\index{all} letters. The \acidx{DEF}
is written with the help of the \acidx{ABC}.
\printindex
\end{document}