让字符串以大写字母开头

让字符串以大写字母开头

我正在写一本小书,并尝试建立一个索引参考。为了方便一点,我写了一个小脚本,让我可以输入一个单词并将其添加到索引中:

\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。:)

相关内容