
インデックスをアクロと一緒に使用したい: 頭字語を使用するたびに、それを自動的にインデックスに追加したい。ただし、略語ではなく長い名前です。
私がしたこと: 新しいコマンドを作成しました:
\newcommand{\acidx}[1]{\ac{#1}\index{\acl*{#1}}}
これは動作します。ただし、LaTeXはACLマクロを展開しません。前にind ファイルの書き込み! index
idx ファイルの内容は、acidx と mixx で次のようになります。
\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 の場合は、「Hypertext Preprocessor」ではなく 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
acro
LaTeX3 に基づく パッケージ も同様です。 は、頭字語 ID のデータ リストから\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}