包裹acronym

包裹acronym

我想將索引與 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 而不是“超文本預處理器”排序。此外,執行此操作時,每個條目都以 分隔,\indexspace這也是不正確的。

有沒有辦法在寫入 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取得縮寫詞 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}

相關內容