我正在写一本小书,并尝试建立一个索引参考。为了方便一点,我写了一个小脚本,让我可以输入一个单词并将其添加到索引中:
\newcommand{\toindex}[1]{\index{#1}\indexlayout{#1}}
但是这会导致添加到索引中的单词不以大写字母开头。这会使索引看起来有点脏。有没有办法生成一个参数外的字符串,将#1
第一个字符切换为大写字母,而字符串的其余部分保持不变?
答案1
我将定义两个命令(实际上是一个带有 * 形式的命令):
\newcommand\toindex{\@ifstar{\@dblarg{\@toindexs}}{\@toindex}}
\def\@toindexs[#1]#2{\indexlayout{#2}\index{#1@#2}}
\newcommand\@toindex[2][]{%
\if\relax\detokenize{#1}\relax
\indexlayout{#2}%
\begingroup
\@splitword#2\@nil%
\uppercase\expandafter{%
\expandafter\def\expandafter\@initial\expandafter{\@first}}%
\toks0=\expandafter{\@initial}%
\toks2=\expandafter{\@rest}%
\edef\x{\endgroup\noexpand\index{\the\toks0 \the\toks2 }}\x
\else
\indexlayout{#2}\index{#1}
\fi
}
\def\@splitword#1#2\@nil{\def\@first{#1}\def\@rest{#2}}
\makeatletter
对于诸如$n$-entry
您将使用的条目\toindex*[nentry]{$n$-entry}
,对于word
您可以使用的条目\toindex{word}
,在任一情况下都可以使用可选参数。
对于\toindex*
可选参数,它是用于排序的;实际上,它不仅仅是可选的:makeindex
将\index{$n$-entry}
在符号之间进行排序。
对于\toindex
可选参数,可用于要索引的单词特殊的情况,例如
\toindex[equipe@\'Equipe]{\'equipe}
但是,我认为索引中的单词没有必要大写。例如,请看 TeXbook。:)