我经常想在较长的 LaTeX 文档中创建多个索引。例如,我可能想要一个一般概念索引、一个有名人物的索引和一个象征意义的索引。如何在 LaTeX 中创建两个或更多不同的索引?
答案1
这multind
包提供了简单直接的多重索引。
您为每个\makeindex
、\index
和\printindex
命令添加一个文件名标签,索引命令将写入(或从中读取)名称,并附加相应的扩展名(.idx 或 .ind)。要创建“一般”和“作者”索引,可以这样写:
\usepackage{multind}
\makeindex{general}
\makeindex{authors}
...
\index{authors}{Another Idiot}
...
\index{general}{FAQs}
...
\printindex{general}{General index}
\printindex{authors}{Author index}
为了完成这项工作,请在文件上运行 LaTeX 足够多次,直到标签等稳定,然后执行命令
makeindex general
makeindex authors
另请参阅此常见问题解答:多个索引
更新
multind
是 LaTeX 2.09 的一个软件包
请考虑以下替代方案:
答案2
还有imakeidx
旨在提供多个索引(已经在评论中提到,但未显示用法)
只需\makeindex[name=symbolicname,title={Foo}]
提供一个特殊索引(适当地选择符号名称)并\index[symbolicname]{foo}
为该特殊索引创建一个索引条目。
特殊索引上印有\printindex[symbolicname]
。
使用\makeindex
,\index
并且\printindex
不带可选参数将给出与 一样的通常索引makeidx
。
的优点imakeidx
是自动调用makeindex
或texindy
(如果\write18
启用)。
\documentclass{article}
\usepackage{imakeidx}
\usepackage{blindtext}
\makeindex[name=person,title={Index of persons}]
\makeindex
\begin{document}
Einstein\index[person]{Einstein}
\blindtext
Heisenberg\index[person]{Heisenberg} % Person index
\blindtext[4]
\index{foo}
\index{bar}
\blindtext
\printindex[person] % Person index
\printindex % usual index
\end{document}
答案3
一个问题multind
是索引标题不会根据您的其他章节(或部分)标题进行格式化,而只是简单地格式化\Large\bf
。
如果您想要多个索引遵循文档类的一般格式(并且也可以与标准类以外的其他类一起使用),请使用splitidx
包裹。
答案4
这是一个完全不同的方法,它不使用\index
,而是使用glossaries-extra
和bib2gls
。首先,在一个或多个文件中定义文档中使用的术语.bib
。例如,vegetables.bib
以。。开始:
% Encoding: UTF-8
@entry{cabbage,
name={cabbage},
description={vegetable with thick green or purple leaves},
identifier={vegetable}
}
@entry{brussels-sprout,
name={Brussels sprout},
description={small leafy green vegetable buds},
identifier={vegetable}
}
@entry{artichoke,
name={artichoke},
description={a variety of thistle cultivated as food},
identifier={vegetable}
}
这sample-multi2.tex
示例文件为每种类型定义了一个列表:
\newglossary*{bacteria}{Bacteria}
\newglossary*{markuplanguage}{Markup Languages}
\newglossary*{vegetable}{Vegetables}
\newglossary*{mineral}{Minerals}
\newglossary*{animal}{Animals}
\newglossary*{chemical}{Chemical Formula}
\newglossary*{baseunit}{SI Units}
\newglossary*{measurement}{Measurements}
\newglossary*{film}{Films}
\newglossary*{book}{Books}
\newglossary*{person}{People}
\newglossary*{mediacontrol}{Media Control Symbols}
\newglossary*{information}{Information Symbols}
\newglossary*{weather}{Weather Symbols}
所需.bib
文件在文档中以 标识\GlsXtrLoadResources
。上面的示例文件相当复杂(结果是sample-multi2.pdf
),因此这里有一个简化版本,仅使用vegetables.bib
:
\documentclass{book}
\usepackage[
record,% using bib2gls
nostyles,stylemods={bookindex},
nomain,% don't create default 'main' glossary
index% create index list
]{glossaries-extra}
% define custom list:
\newglossary*{vegetable}{Vegetables}
\GlsXtrLoadResources[
src={vegetables},% data in vegetables.bib
sort={en-GB},% sort by language identified by this locale
entry-type-aliases={
entry=dualindexentry% make @entry behave like @dualindexentry
},
field-aliases={
identifier=category % convert identifier field to category field
},
type={index},
dual-type={same as category}
]
\begin{document}
\chapter{Sample}
\Glspl{cabbage} are bigger than \glspl{brussels-sprout}.
An \gls{artichoke} is another type of vegetable.
\printunsrtglossary[type=vegetable,style=tree]
\printunsrtglossary[type=index,style=bookindex]
\end{document}
如果调用该文档myDoc.tex
则构建过程如下:
pdflatex myDoc
bib2gls -g myDoc
pdflatex myDoc
第一页:
蔬菜列表没有显示使用该术语的位置(页码):
该索引确实显示了位置: