定義索引的同義詞

定義索引的同義詞

是否可以進行設定以使索引同義詞不會產生多個條目?例如,如果文字包含\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}

相關內容