包裹acronym

包裹acronym

我想将 index 与 acro 一起使用:每当我使用首字母缩略词时,我都希望它自动出现在索引中。但是,不是缩写而是长名称!

我做了什么:我创建了一个新命令:

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

这有效。但是,latex 不会扩展 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 而不是“超文本预处理器”排序。此外,这样做时,每个条目都用\indexspacewhich 分隔,这也是不正确的。

有没有办法在写入 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

acro与基于 LaTeX3 的 包相同。从数据列表中\prop_get:NnNF获取首字母缩略词 id 的属性并将结果存储在中,请参阅 的定义)。然后可以在 中使用结果标记列表变量:\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}

相关内容