《芝加哥格式手册》指出,索引定位器通常是页面,但也可以是段落或章节编号。使用包的范围功能(如果可用)似乎是一个好主意,例如“例如,如果您有一个描述教授交配习惯的段落,则\index{professors!mating habits|(}
在段落的开头和\index{professors!mating habits|)}
结尾处有”(Emma Pease)。
似乎 indxcite 包中有类似的东西\indexcite[(]{latexcomp}.
“如果引用在多个段落中被引用,您可能希望索引整个文本范围。在这种情况下,您需要使用三个命令:一个用于生成引用,\cite{latexcomp};
一个用于标记要索引的文本的开头,一个用于标记要索引的文本的结尾。”
还有哪些索引包具有此功能?所有索引包都有 - 它是否与 makeindex/xindy 更相关???
答案1
总结只要包接口提供了设置封装的方法,那么如果索引是由识别(
并)
作为开始和结束范围标记的索引应用程序执行的,或者包可以正确解释并将范围标记转换为适当的语法,那么就应该可以形成明确的范围。
大多数索引包使用\index
,它实际上是一个内核命令:
\documentclass{report}
\makeindex
\begin{document}
\chapter{Sample}
Foo\index{foo|(}.
\chapter{Another}
Foo\index{foo|)}.
\end{document}
(内核不提供\printindex
。)所有操作都是将参数写入具有相应页码\index
的文件.idx
(用打开):\makeindex
\indexentry{foo|(}{1}
\indexentry{foo|)}{2}
这是makeindex
语法,也可以用 处理texindy
。索引包通常仅\index
在支持多个索引时才进行修改。例如,imakeidx
重新定义\index
为有一个可选参数,表示关联文件,但强制参数仍然在makeindex
语法中。
page-ranges
使用的默认模块texindy
要求最小范围分隔为 3。以下模块不构成范围,因为范围仅跨越 2 页:
\documentclass{report}
\usepackage[xindy]{imakeidx}
\makeindex
\begin{document}
\chapter{Sample}
Foo\index{foo|(}.
\chapter{Another}
Foo\index{foo|)}.
\printindex
\end{document}
切换到该book
类别会使范围跨越三页:
\documentclass{book}
\usepackage[xindy]{imakeidx}
\makeindex
\begin{document}
\chapter{Sample}
Foo\index{foo|(}.
\chapter{Another}
Foo\index{foo|)}.
\printindex
\end{document}
该\glossary
命令有类似的功能:
\documentclass{report}
\makeglossary
\begin{document}
\chapter{Sample}
Foo\glossary{foo|(}.
\chapter{Another}
Foo\glossary{foo|)}.
\end{document}
该.glo
文件包含:
\glossaryentry{foo|(}{1}
\glossaryentry{foo|)}{2}
所以它仍然使用makeindex
语法。
这nomencl
软件包提供了\nomenclature
,它也会写入索引信息,但在这种情况下,它受到更多限制,因为它强制执行特定的语法。例如:
\documentclass{report}
\usepackage{nomencl}
\makenomenclature
\begin{document}
Foo\nomenclature{$\pi$}{pi}.
\end{document}
该.nlo
文件包含:
\nomenclatureentry{a$\pi$@[{$\pi$}]\begingroup pi\nomeqref {0}|nompageref}{1}
没有办法覆盖nompageref
封装,这意味着没有办法添加范围标记。
这glossaries
软件包也不使用或重新定义内核命令。(前身glossary
软件包使用过修改\glossary
版本,我认为早期版本也glossaries
使用过修改版本,但现在不再使用。)在这种情况下,封装是用密钥指定的format
,因此可以形成范围:
\documentclass{report}
\usepackage{glossaries}
\makeglossaries
\newglossaryentry{foo}{name={foo},description={sample}}
\begin{document}
\chapter{Sample}
\Gls[format=(]{foo}.
\chapter{Another}
\Gls[format=)]{foo}.
\end{document}
该.glo
文件现在如下所示:
\glossaryentry{foo?\glossentry{foo}|(setentrycounter[]{page}\glsnumberformat}{1}
\glossaryentry{foo?\glossentry{foo}|)setentrycounter[]{page}\glsnumberformat}{2}
使用xindy
包选项,它会切换到xindy
的本机语法:
\documentclass{report}
\usepackage[xindy]{glossaries}
\makeglossaries
\newglossaryentry{foo}{name={foo},description={sample}}
\begin{document}
\chapter{Sample}
\Gls[format=(]{foo}.
\chapter{Another}
\Gls[format=)]{foo}.
\end{document}
该.glo
文件现在如下所示:
(indexentry :tkey (("foo" "\\glossentry{foo}") ) :locref "{}{1}" :attr "pageglsnumberformat" :open-range)
(indexentry :tkey (("foo" "\\glossentry{foo}") ) :locref "{}{2}" :attr "pageglsnumberformat" :close-range)
“noidx”版本不支持范围格式。它使用 TeX 进行排序和整理,而不是使用专用的索引应用程序。如果使用范围,结果会有点奇怪。
\documentclass{report}
\usepackage{glossaries}
\makenoidxglossaries
\newglossaryentry{foo}{name={foo},description={sample}}
\begin{document}
\chapter{Sample}
\Gls[format=(]{foo}.
\chapter{Another}
\Gls[format=)]{foo}.
\printnoidxglossaries
\end{document}
这glossaries-extra
扩展包提供了另一种索引方法:
\documentclass{report}
\usepackage[record]{glossaries-extra}
\GlsXtrLoadResources[
src={example-glossaries-brief}% use test data in example-glossaries-brief.bib
]
\begin{document}
\chapter{Sample}
\Gls[format=(]{lorem}.
\chapter{Another}
\Gls[format=)]{lorem}.
\printunsrtglossaries
\end{document}
这不会创建任何其他文件。索引信息位于.aux
文件中:
\glsxtr@record{lorem}{}{page}{(}{1}
...
\glsxtr@record{lorem}{}{page}{)}{2}
索引由以下方式执行:bib2gls
它将(
和识别)
为开放和关闭范围的标记。
应该可以将(
或)
与格式化命令结合使用。例如,返回\index
和makeindex
:
\documentclass{report}
\usepackage{imakeidx}
\makeindex
\begin{document}
\chapter{Sample}
Foo\index{foo|(textbf}.
\chapter{Another}
Foo\index{foo|)textbf}.
\printindex
\end{document}
这会将整个范围 (起始页、短划线和结束范围) 变为粗体。
makeindex
容忍范围末尾缺少格式:
\documentclass{report}
\usepackage{imakeidx}
\makeindex
\begin{document}
\chapter{Sample}
Foo\index{foo|(textbf}.
\chapter{Another}
Foo\index{foo|)}.
\printindex
\end{document}
这产生与以前相同的结果。
makeindex
不喜欢冲突的格式:
\documentclass{report}
\usepackage{imakeidx}
\makeindex
\begin{document}
\chapter{Sample}
Foo\index{foo|(textbf}.
\chapter{Another}
Foo\index{foo|)emph}.
\printindex
\end{document}
这会触发警告
## Warning (input = test.idx, line = 2; output = test.ind, line = 3):
-- Range closing operator has an inconsistent encapsulator emph.
并丢弃冲突,就像结束范围一样)textbf
,因此产生与上述相同的结果。
使用 时xindy
,范围分隔符不包含在格式化命令中,因此只有开始和结束页面以粗体显示,而不是短划线:
\documentclass{book}
\usepackage[xindy]{imakeidx}
\makeindex
\begin{document}
\chapter{Sample}
Foo\index{foo|(textbf}.
\chapter{Another}
Foo\index{foo|)textbf}.
\printindex
\end{document}
xindy
也不喜欢不匹配的格式:
\documentclass{book}
\usepackage[xindy]{imakeidx}
\makeindex
\begin{document}
\chapter{Sample}
Foo\index{foo|(textbf}.
\chapter{Another}
Foo\index{foo|)}.
\printindex
\end{document}
这给出了警告:
WARNING: Found no :close-range matching an already opened one!
Location-reference is 1 in keyword (foo).
Maybe I lost some of the regular location-references.
WARNING: Found a :close-range in the index that wasn't opened
before!
Location-reference is 3 in keyword (foo)
I'll continue and ignore this.
在这种情况下,范围丢失:
bib2gls
还将开始和结束页以粗体显示(但不显示分隔符):
\documentclass{report}
\usepackage[record]{glossaries-extra}
\GlsXtrLoadResources[
src={example-glossaries-brief}% use test data in example-glossaries-brief.bib
]
\begin{document}
\chapter{Sample}
\Gls[format={(textbf}]{lorem}.
\chapter{Another}
\Gls[format={)textbf}]{lorem}.
\printunsrtglossaries
\end{document}
bib2gls
允许范围内的格式不匹配:
\documentclass{report}
\usepackage[record]{glossaries-extra}
\GlsXtrLoadResources[
src={example-glossaries-brief}% use test data in example-glossaries-brief.bib
]
\begin{document}
\chapter{Sample}
\Gls[format={(textbf}]{lorem}.
\chapter{Another}
\Gls[format={)}]{lorem}.
\printunsrtglossaries
\end{document}
在这种情况下没有警告。起始页为粗体,结束页为正常的环绕字体。同样,在以下情况下,起始页为粗体,结束页被强调:
\documentclass{report}
\usepackage[record]{glossaries-extra}
\GlsXtrLoadResources[
src={example-glossaries-brief}% use test data in example-glossaries-brief.bib
]
\begin{document}
\chapter{Sample}
\Gls[format={(textbf}]{lorem}.
\chapter{Another}
\Gls[format={)emph}]{lorem}.
\printunsrtglossaries
\end{document}