색인 동의어가 여러 항목을 생성하지 않도록 설정하는 것이 가능합니까? 예를 들어, 텍스트에 \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}