Pacoteacronym

Pacoteacronym

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 indexe 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 acidxestão agrupados. Presumo porque \aclnã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 \indexspacequal 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 \indexdentro da macro \acidxescreverá 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}

Página 1

E o índice:

Página 2

O .idxarquivo:

\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:NnNFobtém a propriedade \l__acro_long_propda lista de dados para o acrônimo id #1e 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_tlpode 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}

informação relacionada