
我想將索引與 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}
和索引:
文件.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}