
Quiero usar index junto con acro: cada vez que uso un acrónimo, lo quiero automáticamente en el índice. ¡Sin embargo, no la abreviatura sino el nombre largo!
Lo que hice: creé un nuevo comando:
\newcommand{\acidx}[1]{\ac{#1}\index{\acl*{#1}}}
Esto funciona. Sin embargo, el látex no expande la macro acl.antesescribiendo el archivo ind! Mezclando index
y acidx` el contenido del archivo idx es:
\begin{theindex}
\item \texttt {\acl *{ABC}}, \hyperpage{2}
\item \texttt {\acl *{DEF}}, \hyperpage{1, 2}
\indexspace
\item consetetur, \hyperpage{1}
\end{theindex}
Se puede observar que los elementos de acidx
están agrupados. Supongo que porque \acl
no se amplió. Si así fuera, estaría debidamente clasificado.
Para aliviar el problema, intenté
\newcommand{\acidx}[1]{\ac{#1}\index{#1@\acl*{#1}}}
Sin embargo, esto no es del todo claro porque (a mi entender), el índice ahora está ordenado según la abreviatura en lugar del nombre completo; por ejemplo, para PHP se ordenaría según PHP en lugar de "Preprocesador de hipertexto". Además, al hacer esto, cada entrada está separada por \indexspace
un código que tampoco es correcto.
¿Hay alguna manera de forzar que el índice expanda la macro antes de escribir el archivo ind?
¿Existe otra forma de solucionar el problema?
¡Realmente me gustaría evitar el uso de un procesador de índice diferente como xindy!
Respuesta1
Paqueteacronym
La versión interna expandible de \acl
es \AC@acl
. Luego, \index
dentro de la macro \acidx
se escribirá la versión larga ampliada del acrónimo:
\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}
Y el índice:
El .idx
archivo:
\indexentry{alphabet}{1}
\indexentry{all}{1}
\indexentry{definition}{1}
\indexentry{alphabet}{1}
Paqueteacro
Lo mismo ocurre con el paquete acro
, que está basado en LaTeX3.
\prop_get:NnNF
obtiene la propiedad \l__acro_long_prop
de la lista de datos para el acrónimo id #1
y almacena el resultado en \l__acro_long_tl
(consulte la definición de \acro_get:n
). La variable de lista de tokens de resultados \l__acro_long_tl
se puede utilizar en \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}