Упаковкаacronym

Упаковкаacronym

Я хочу использовать индекс вместе с acro: Всякий раз, когда я использую аббревиатуру, я хочу, чтобы она автоматически была в индексе. Однако не аббревиатура, а длинное имя!

Что я сделал: Я создал новую команду:

\newcommand{\acidx}[1]{\ac{#1}\index{\acl*{#1}}}

Это работает. Однако латекс не расширяет макрос aclдозапись ind файла! Смешивание indexи acidx` содержимое idx файла:

\begin{theindex}
  \item \texttt  {\acl *{ABC}}, \hyperpage{2}
  \item \texttt  {\acl *{DEF}}, \hyperpage{1, 2}
  \indexspace
  \item consetetur, \hyperpage{1}
\end{theindex}

Видно, что элементы из acidxсгруппированы вместе. Предполагаю, потому что \aclне был развернут. Если бы он был развернут, он был бы правильно отсортирован.

Чтобы облегчить проблему, я попробовал

\newcommand{\acidx}[1]{\ac{#1}\index{#1@\acl*{#1}}}

Однако это не совсем чисто, поскольку (насколько я понимаю) индекс теперь сортируется по аббревиатуре, а не по полному имени, например, для PHP он будет сортироваться по PHP, а не по "Hypertext Preprocessor". Кроме того, при этом каждая запись разделяется, \indexspaceчто также некорректно.

Есть ли способ заставить index раскрыть макрос перед записью ind-файла?

Есть ли другой способ решить проблему?

Мне бы очень хотелось избежать использования другого процессора индексов, такого как xindy!

решение1

Упаковкаacronym

Внутренняя расширяемая версия \acl\AC@acl. Тогда \indexвнутри макроса \acidxбудет записана развернутая длинная версия аббревиатуры:

\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}

Страница 1

И индекс:

Страница 2

Файл .idx:

\indexentry{alphabet}{1}
\indexentry{all}{1}
\indexentry{definition}{1}
\indexentry{alphabet}{1}

Упаковкаacro

То же самое с package acro, который основан на LaTeX3. \prop_get:NnNFполучает свойство \l__acro_long_propиз списка данных для идентификатора акронима #1и сохраняет результат в \l__acro_long_tl, см. определение \acro_get:n). Переменная списка токенов результата \l__acro_long_tlзатем может быть использована в \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}

Связанный контент