LaTeX自动生成索引与符号列表
毕业论文或者书籍中常常需要用到自动生成索引与符号列表, 下面我们通过定义命令可以非常方便的实现上述功能.
自动生成索引
定义新命令:
1 |
\newcommand{\iemph}[2][]{\emph{#2}\index{#1#2}} |
上述命令我们重定义了强调命令\emph
, 它带有两个参数[2]
, 且默认的一个参数为空[]
, 新定义的强调命令\iemph
在强调的同时将其加入索引. 此外, 若提供第一个参数, 则将索引加到改参数下. 作为例子
1 2 |
\iemph{vector bundle} \iemph[bundle!]{vector bundle} |
第一个命令表示在正文中强调 vector bundle这个词, 同时将其加入到索引; 第二个命令表示在正文中强调 vector bundle这个词, 同时将vector bundle加入到bunlde索引下;
自动生成符号列表
定义新命令
1 2 3 4 5 6 7 8 9 10 |
\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
的变形.
1 |
\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
为名称的命令, 他们的区别就是前者会将正文中的符号加入到符号列表, 而后者不会.
一个完整的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
% -* utf8 *- \documentclass{ctexbook} \usepackage{makeidx} \makeindex %%生成索引 \newcommand{\iemph}[2][]{\emph{#2}\index{#1#2}} \usepackage{glossaries} \makeglossaries %%生成符号列表 \usepackage{hyperref} %%定义一个生成符号列表的命令 \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空间} \begin{document} \chapter{测试} \section{测试索引} 我们称$E$是一个\iemph[丛!]{向量丛}, 若\ldots \newpage \section{测试符号列表} 这里, 我们记$\smbAd$为李群的\iemph{伴随表示}\ldots \newpage 其中, $\Ad$是群的伴随作用\ldots \newpage 这里, 我们希望再次将$\smbAd$加入符号列表\ldots \newpage 注意, 我们对$\smbBC$的命名方法, 是符号B再加后缀C, 这里C表示\verb|\mathcal|. \begin{appendix} \cleardoublepage \phantomsection \addcontentsline{toc}{chapter}{符号列表} \printglossary[title={符号列表}] \cleardoublepage \phantomsection \addcontentsline{toc}{chapter}{索引} \printindex \end{appendix} \end{document} |
请用XeTeXfy
编译两次以上.
发表回复