如何为这种类型的索引定义新命令?

如何为这种类型的索引定义新命令?
\documentclass{article}

\usepackage{makeidx}
\makeindex

\newcommand{\key}[1]{ #1 \index{#1} }

\begin{document}

\cleardoublepage
This shows \key{1.1},\key{1.2},\key{1.3},\key{1.4},\key{2}.
% \key{1.1,1.2,1.3,1.4,2}

\cleardoublepage
This shows \key{1.1},\key{1.2},\key{2.3},\key{1.4},\key{2}.
% \key{1.1,1.2,2.3,1.4,2}

\cleardoublepage
This shows \key{1.1},\key{3.2},\key{5.3},\key{A},\key{C}.
\cleardoublepage
This shows \key{1.1},\key{E},\key{A},\key{D},\key{3.2}.

\printindex

\end{document}

有没有办法不使用单独的,而是\key{}使用 ONE \key{},但仍然可以使用它进行索引?

例如:

谢谢!

答案1

这是一种快速而简单的方法,既显示索引键,又将其添加到索引中,使用\forcsvlist命令作为第一个参数\key,即 CSV - 列表

必须输入带有空格的较长键{...}以及带有,内部的键。

\dispkey是 CVS 列表处理(辅助)宏。

\documentclass{article}


\usepackage{etoolbox}
\usepackage{makeidx}
\makeindex

\newcommand{\dispkey}[1]{%
#1 \index{#1}%
}

\newcommand{\key}[1]{%
  \forcsvlist{dispkey}{#1}%
}

\usepackage{blindtext}

\begin{document}
\blindtext[5]

\key{This,that,{and this one}}
\blindtext[2]
\key{1.1,1.2,1.3}
\printindex
\end{document}

答案2

一个非常简短的实现expl3

\documentclass{article}

\usepackage{xparse}
\usepackage{makeidx}
\makeindex

\ExplSyntaxOn
\NewDocumentCommand{\key}{m}
 {
  \clist_map_inline:nn { #1 }
   {
    ##1\index{##1}~
   }
   \unskip
 }
\ExplSyntaxOff

\begin{document}

\key{This,that,{and this one}}

\key{1.1,1.2,1.3}

\printindex

\end{document}

在此处输入图片描述

如果要保留文本中键之间的逗号,则需要采用稍微复杂一些的方法。我们将键存储在一个序列中,然后提取要特殊处理的第一个项(前面没有逗号),然后映射其余项,并在其前面加上逗号空格。如果只有一个项,则映射将不会产生任何结果。

\documentclass{article}

\usepackage{xparse}
\usepackage{makeidx}
\makeindex

\ExplSyntaxOn
\NewDocumentCommand{\key}{m}
 {
  \chen_key:n { #1 }
 }

\seq_new:N \l_chen_keys_seq
\tl_new:N \l_chen_first_tl

\cs_new_protected:Npn \chen_key:n #1
 {
  \seq_set_split:Nnn \l_chen_keys_seq { , } { #1 }
  \seq_pop_left:NN \l_chen_keys_seq \l_chen_first_tl
  \chen_print_and_index:Vn \l_chen_first_tl {}
  \seq_map_inline:Nn \l_chen_keys_seq
   {
    \chen_print_and_index:nn { ##1 } { ,~ }
   }
 }
\cs_new_protected:Npn \chen_print_and_index:nn #1 #2
 {
  #2 #1 \index{#1}
 }
\cs_generate_variant:Nn \chen_print_and_index:nn { V }
\ExplSyntaxOff

\begin{document}

\key{This,that,{and this one}}

\key{1.1,1.2,1.3}

\printindex

\end{document}

这是第一页:

在此处输入图片描述

答案3

这是一个简单的解决方案,没有额外的包,也没有 expl3 语法。(我​​并不是说这些是优点。但它们是我的答案的特点,无论好坏。)

此解决方案很简短,在连续的键之间插入逗号和空格,并且不会在列表中的第一个键之前或最后一个键之后插入此类内容。如果列表由单个键组成,则仅打印该键。

\documentclass{article}
\usepackage{makeidx}
\makeindex
\makeatletter
\newcommand\key[1]{%
  \def\my@keys{#1}%
  \let\my@join\relax
  \@for \xx:=\my@keys \do {%
    \index{\xx}\my@join\xx\gdef\my@join{, }%
  }%
}
\makeatother
\begin{document}
Some keys: \key{1.1,1.2,1.3,1.4,2} are shown here.

\key{1.1,1.2,2.3,1.4,2} are some more keys.

\key{1.1}, which is a nice key, comes before the extremely horrid key \key{3.2}.

Keys \key{5.3,A} and \key{C} are other keys.

Keys \key{1.1,E,A,D,3.2} show that something.

\printindex

\end{document}

简单的密钥管理

索引键

相关内容