
Quero usar o índice junto com o acro: Sempre que uso uma sigla, quero que ela apareça automaticamente no índice. Porém, não a abreviatura, mas o nome longo!
O que fiz: criei um novo comando:
\newcommand{\acidx}[1]{\ac{#1}\index{\acl*{#1}}}
Isso funciona. No entanto, o látex não expande a macro aclantesescrevendo o arquivo ind! Misturando index
e acidx` o conteúdo do arquivo idx é:
\begin{theindex}
\item \texttt {\acl *{ABC}}, \hyperpage{2}
\item \texttt {\acl *{DEF}}, \hyperpage{1, 2}
\indexspace
\item consetetur, \hyperpage{1}
\end{theindex}
Pode-se observar que os elementos de acidx
estão agrupados. Presumo porque \acl
não foi expandido. Se tivesse, estaria devidamente classificado.
Para aliviar o problema, tentei
\newcommand{\acidx}[1]{\ac{#1}\index{#1@\acl*{#1}}}
No entanto, isso não é muito claro porque (no meu entender), o índice agora é classificado de acordo com a abreviatura em vez do nome completo, por exemplo, para PHP ele seria classificado de acordo com PHP em vez de "Pré-processador de hipertexto". Além disso, ao fazer isso, cada entrada é separada por \indexspace
qual também não está correto.
Existe uma maneira de forçar o índice a expandir a macro antes de gravar o arquivo ind?
Existe outra maneira de resolver o problema?
Eu realmente gostaria de evitar o uso de um processador de índice diferente como o xindy!
Responder1
Pacoteacronym
A versão expansível interna do \acl
é \AC@acl
. Então \index
dentro da macro \acidx
escreverá a versão longa expandida da sigla:
\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}
E o índice:
O .idx
arquivo:
\indexentry{alphabet}{1}
\indexentry{all}{1}
\indexentry{definition}{1}
\indexentry{alphabet}{1}
Pacoteacro
O mesmo acontece com package acro
, que é baseado em LaTeX3.
\prop_get:NnNF
obtém a propriedade \l__acro_long_prop
da lista de dados para o acrônimo id #1
e armazena o resultado em \l__acro_long_tl
, veja a definição de \acro_get:n
). A variável da lista de tokens de resultado \l__acro_long_tl
pode então ser usada em \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}