是否可以進行設定以使索引同義詞不會產生多個條目?例如,如果文字包含\index{cur}
、\index{hound}
、 和\index{mutt}
,這些可以合併在「dog」條目下嗎? (假設這些密鑰是自動產生的;否則我\index{dog}
每次都會鍵入。)
背景:LaTeX3/expl3 提供了一起定義某些函數變體的可能性。就(實驗)類而言l3doc
,範例可能如下所示:
% \begin{macro}[pTF]{\bool_if:N}
% Blah blah blah.
% \begin{macrocode}
\prg_new_conditional:Npnn \bool_if:N #1 { p , T , F , TF }
{ … }
% \end{macrocode}
% \end{macro}
在記錄的程式碼清單中,這會在頁邊空白處顯示\bool_if:N(TF)
和;\bool_if_p:N
在產生的程式碼中,定義了四個函數\bool_if_p:N
、\bool_if:NT
、\bool_if:NF
和\bool_if:NTF
。
[註:該符號\bool_if:N(TF)
是我在該網站上能找到的最接近顯示實際符號的符號;但對於本次討論來說已經夠接近了。
麻煩的是,csnames 的自動索引來自doc.sty
將此行索引為不存在函數的實例\bool_if:N
!
[注意:l3doc
調整目錄代碼,以便正確識別冒號和底線。
所以…。有沒有辦法告訴索引生成函數變體是同義詞?IE,程式碼中使用變體的各個位置是否可以合併到一個索引條目下? (該條目可能看起來像這樣\bool_if:N(TF), \bool_if_p:N
。)
替代選項:是否可以進行設置,以便單個密鑰\bool_if:N
不被識別為本身,而是被識別為實際存在的四個變體的實例?
答案1
如果您在參數中不需要任何花哨的東西\index
(例如@
or !
),那麼這應該可行:
\documentclass{article}
\usepackage{makeidx}
\makeindex
\usepackage{xparse}
\ExplSyntaxOn
\cs_set_eq:NN \solomon_index:n \index
\NewDocumentCommand{\definesynonyms}{ m m }
{
\solomon_define_synonyms:nn { #1 } { #2 }
}
\cs_new_protected:Npn \solomon_define_synonyms:nn #1 #2
{
\clist_map_inline:nn { #2 }
{
\tl_gset:cn { g_solomon_syn_##1_tl } { #1 }
}
}
\RenewDocumentCommand{\index}{ m }
{
\tl_if_exist:cTF { g_solomon_syn_#1_tl }
{
\solomon_index:v { g_solomon_syn_#1_tl }
}
{
\solomon_index:n { #1 }
}
}
\cs_generate_variant:Nn \solomon_index:n { v }
\ExplSyntaxOff
\definesynonyms{dog}{cur,hound,mutt}
\begin{document}
\show\index
A\index{dog}
\newpage
B\index{cur}
\newpage
C\index{hound}
\newpage
D\index{mutt}
\newpage
\printindex
\end{document}
這是生成的文件的內容.idx
:
\indexentry{dog}{1}
\indexentry{dog}{2}
\indexentry{dog}{3}
\indexentry{dog}{4}