毕业论文或者书籍中常常需要用到自动生成索引与符号列表, 下面我们通过定义命令可以非常方便的实现上述功能.
自动生成索引
定义新命令:
\newcommand{\iemph}[2][]{#2}
上述命令我们重定义了强调命令\emph
, 它带有两个参数[2]
, 且默认的一个参数为空[]
, 新定义的强调命令\iemph
在强调的同时将其加入索引. 此外, 若提供第一个参数, 则将索引加到改参数下. 作为例子
vector bundle
\iemph[bundle!]{vector bundle}
第一个命令表示在正文中强调 vector bundle这个词, 同时将其加入到索引; 第二个命令表示在正文中强调 vector bundle这个词, 同时将vector bundle加入到bunlde索引下;
自动生成符号列表
定义新命令
\newcommand{\mysymbol}[3]{% \newglossaryentry{#1}{% name={\ensuremath{#2}},% text={\ensuremath{#2}},% description={#3},% sort={#1}% }% \expandafter\newcommand\expandafter{\csname smb#1\endcsname}{\gls{#1}}% \expandafter\newcommand\expandafter{\csname #1\endcsname}{\ensuremath{#2}}% }
然后, 我们就可以用\mysymbol
来定义符号了. 可以认为它是\newcommand
的变形.
\mysymbol{Ad}{\operatorname{Ad}}{伴随表示, 伴随作用}
- 在正文中定义
Ad
这个伴随算子的地方, 我们可以用\smbAd
来产生Ad
, 同时该命令会将其在符号列表中列出; - 在其他不需要加入符号列表的地方, 可以使用
\Ad
表示伴随算子.
这里, 对命令稍作解释, 我们用了glossaries
宏包的命令, \newglossaryentry{<label>}{name=<name>, text={<text>}, description={<description>}}
来定义符号, 同时使用\gls{label}
来在正文中引用符号; 其中name
表示添加到符号列表时的名字, text
表示出现在正文中时的命令, description
当然是指对该符号的解释了, 会列在符号列表中, 最后我们还用了sort
, 表示符号按照label
排序 (值得注意的是, 为了使得符号能够正常排序, 我们需要将符号命名为符号本身字母+区分后缀
的样式, 请参考后面的完整例子). 最后, 我们重新定义了两个命令一个是一该符号label
加前缀smb
为名称的命令\smb<label>
, 一个是label
为名称的命令, 他们的区别就是前者会将正文中的符号加入到符号列表, 而后者不会.
一个完整的例子
% -* utf8 *-
\makeindex %%生成索引
\newcommand{\iemph}[2][]{#2}
\makeglossaries %%生成符号列表
\newcommand{\mysymbol}[3]{%
\newglossaryentry{#1}{%
name={\ensuremath{#2}},%
text={\ensuremath{#2}},%
description={#3},%
sort={#1}%
}%
\expandafter\newcommand\expandafter{\csname smb#1\endcsname}{\gls{#1}}%
\expandafter\newcommand\expandafter{\csname #1\endcsname}{\ensuremath{#2}}%
}
\mysymbol{Ad}{\operatorname{Ad}}{伴随表示, 伴随作用}
\mysymbol{BC}{\mathcal{B}}{Banach空间}
\chapter{测试}
1. 测试索引
我们称$E$是一个\iemph[丛!]{向量丛}, 若\ldots
\newpage
2. 测试符号列表
这里, 我们记$\smbAd$为李群的伴随表示\ldots
\newpage
其中, $\Ad$是群的伴随作用\ldots
\newpage
这里, 我们希望再次将$\smbAd$加入符号列表\ldots
\newpage
注意, 我们对$\smbBC$的命名方法, 是符号B再加后缀C, 这里C表示\mathcal
.
\begin{appendix}
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{符号列表}
\printglossary[title={符号列表}]
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{索引}
\printindex
\end{appendix}
请用XeTeXfy
编译两次以上.