인덱싱에 대한 동의어 정의

인덱싱에 대한 동의어 정의

색인 동의어가 여러 항목을 생성하지 않도록 설정하는 것이 가능합니까? 예를 들어, 텍스트에 \index{cur}, \index{hound}, 및 가 포함된 경우 \index{mutt}이러한 항목을 '개' 항목 아래에 통합할 수 있나요? (이러한 키가 자동으로 생성된다고 가정합니다. 그렇지 않으면 \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및 4개의 함수를 정의합니다 \bool_if:NTF.

[참고: 이 표기법은 \bool_if:N(TF)이 사이트에서 실제 표기법을 보여주는 것과 가장 가까운 표기법입니다. 하지만 이 토론을 하기에는 충분히 가깝습니다.]

문제는 csname의 자동 인덱싱이doc.sty이 줄을 존재하지 않는 함수의 인스턴스로 색인화합니다 \bool_if:N!

[참고: l3doc콜론과 밑줄이 올바르게 인식되도록 catcode를 조정합니다.]

그래서…. 함수 변형이 동의어임을 인덱스 생성에 알릴 수 있는 방법이 있습니까?, 변형이 사용되는 코드 내의 다양한 위치를 하나의 색인 항목 아래에 통합할 수 있습니까? (항목은 아마도 다음과 같을 것입니다 \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}

관련 정보