索引包中的范围特征?

索引包中的范围特征?

《芝加哥格式手册》指出,索引定位器通常是页面,但也可以是段落或章节编号。使用包的范围功能(如果可用)似乎是一个好主意,例如“例如,如果您有一个描述教授交配习惯的段落,则\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}

索引 F foo, 1, 2

切换到该book类别会使范围跨越三页:

\documentclass{book}

\usepackage[xindy]{imakeidx}
\makeindex

\begin{document}
\chapter{Sample}
Foo\index{foo|(}.

\chapter{Another}
Foo\index{foo|)}.

\printindex
\end{document}

索引 F foo,1–3

\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}

词汇表 foo 示例。1,2

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它将(和识别)为开放和关闭范围的标记。

应该可以将()与格式化命令结合使用。例如,返回\indexmakeindex

\documentclass{report}

\usepackage{imakeidx}
\makeindex

\begin{document}
\chapter{Sample}
Foo\index{foo|(textbf}.

\chapter{Another}
Foo\index{foo|)textbf}.

\printindex
\end{document}

这会将整个范围 (起始页、短划线和结束范围) 变为粗体。

索引 foo,1–2

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}

索引 F foo,1–3

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.

在这种情况下,范围丢失:

索引 F foo,

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}

词汇表 lorem ipsum 1–2

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}

词汇表 lorem ipsum 1–2

相关内容