(这不是一个真正的问题,而是想法和观点的列表。)
我并不是一个严肃的 TeXist,但索引创建这个主题让我非常感兴趣。由于我喜欢用 Lua 编程,我开始想我是否可以尝试一两个实验来涵盖索引世界中的一些主题。让我想一想。在这篇文章/问题中,我试图收集我们遗漏的、可以改进的或只是将它们包含在开箱即用的功能中会很好的想法。
这个列表可能有助于程序员实际编写一些新程序,或者帮助我在实际进行编程之前走上正确的轨道。
哪些东西可以使用了?(TeX Live 2014,明年可能也会用)
我们经常使用一些工具和包来进行排序和/或创建索引:
- 这制作索引索引处理器。LaTeX Companion,第二版关于修改样式。
- 这辛迪索引处理器。
- 这伊玛克包和一些其他包,例如分裂指数,多态性。
- 这词汇表包裹。
- 这欧佩克扩展的 plainTeX 宏(参见
\makeindex
)。 - 这比伯工具(仅排序)。
- 这语境引擎。
我们可能希望拥有什么?(待更新)
支持更多语言
为了辛迪,我尝试准备定义文件梵文(音译方案)和巴利语。但正确设置它相当耗时。最好只定义一些字母,比如在 Lua 表中。如果有一个设置语言方言的选项也会很有帮助。
支持 CJKV 语言
xindy 对 CJKV 和其他外来语言的支持较弱。它们使用部首、笔画数,甚至日语中的汉字频率(JLPT 级别)。这意味着我们必须处理额外的数据集,例如Unicode 字符数据库;UCD或者联合汉数据库。我还没有详细了解新引擎和工具(泽佩斯安由于支持日语、中文、韩语等,我无法说索引创建是否已为 TeX 用户准备好。
设置一组新的排序规则和字母组
其中一个例子来自化学领域及其元素周期表。我相信我们可以在天体物理学中找到一些例子。按颜色(名称、波)对项目进行排序会很有趣,但这不是一项常见的任务。
双向超链接
如果有双向超链接来往于索引,那就太好了。我曾经尝试过一次问题。有时我们会在其他地方启用双向超链接,例如在脚注中。
混合写作
可能可以在输入/输出端切换音译方案(例如在 XeLaTeX 中通过映射文件),或者我们甚至可以混合它们,例如 sayōnara + さようなら 是相同的索引条目(罗马化版本,平假名)。
包含不同信息的索引
我在这里展示了其中一种方法问题,但它远非用户友好。除了页码,我们可能还有其他块,例如章节、源代码中的行号、问题/解决方案的编号、一些示例的编号、诗句编号或自己的计数器。有一个有趣的问题处理在索引中添加诗句的开头。
发生列表
此外,索引条目的出现列表(以及组字母中的索引条目数量)也应该很容易获得(参见这个问题)。
支持在一个索引中索引多种语言
有一个未决问题查找器列表,它可能不仅适用于波纳佩语 + 英语。我们应该能够更改此类查找器列表中语言的顺序。还有一个有趣的未解决的问题:古埃及,其中甚至可能存在三种不同的语言/排序系统(发音、音译、Unicode 符号和翻译)。
修改规则
我试图纠正冰岛的和越南语在 Xindy 中,但这花费了很多时间。例如,在捷克语中,有些人喜欢将字母组合为A, B, C, Č, D, ..., S, Š, ... U, V, W, X, Y, Z
,但有些人(由于缺少索引条目)喜欢将字母组合为A, B, CČ, D, ..., SŠ, ..., U, V, W, XYZ
。
测试文件
除了前一项之外,如果每种语言都有一些测试文件就更好了。或者一些示例/链接到已创建的文档(带索引)。可以找到一些书,但需要对该语言的非母语人士进行大量研究。我还需要数据分析中的测试用例来衡量新算法的效率。
排序引擎开启,索引引擎关闭
如果能够在索引和排序引擎之间切换就好了。我尝试修改xindy 风格一次。索引处理器可能根据请求表现得像一个排序引擎。
排序引擎关闭,索引引擎打开
我用了一个技巧添加数字在索引词之前。它可以工作,但我不建议将其用于一般用途。获取某个组中的索引而不对字母/页面组中的索引条目进行排序可能会很有趣(它等于文本中的出现,或按页码排序而不需要额外的排序键)。
处理号码
Xindy 可以很好地处理阿拉伯数字和罗马数字(我不是 100% 确定),例如这个问题。应该对十六进制数进行加法运算。可以使用 Lua 中的正则表达式来解决。我们可能想切换数字的输出(西方或东方阿拉伯数字、罗马数字、乌尔都语变体、孟加拉数字、印度数字等)。
轻松设置输出端的标签
我们可以轻松设置索引中使用的所有标签。我们可以限制元素的数量,例如,只查看第一个元素(索引条目/定义/缩写的第一次出现)。TeX.SX 已经对此进行了讨论。
自动重复群组字母
一旦我们有了包含更多列/页的索引,最好让每列/页开头的组字母自动重复。
在索引之前和之后添加文本
我们可以在 TeX 级别进行很多格式化,请参见这个问题,但应该有一种更简单的方法将信息添加到索引中。此外,我们应该能够超链接整个索引条目(参见这个问题)。
创建更多索引
我们可以在伊玛克包,参见这个例子。我们可能希望有小索引(按章节、部分、页码),类似于米尼托克用于迷你目录处理的包。
不使用 TeXing 创建索引
在某些情况下,我们可能根本不需要 TeX。Lua 可以解析输入的 TeX 文件。Michal.h21 展示了其中一种情况,根据关键字文件进行索引,但这是项罕见的任务。
TeX 世界现在处于什么位置?
辛迪
可以通过以下方式设置新语言xindy-制定规则为了辛迪。数据的结构如下所示。我们使用或保留空的所谓插槽(数组中的数组)。
$language = "Czech";
$prefix = "cs";
$script = "latin";
$alphabet = [
['A', ['a','A'], ['á','Á'],['ä','Ä']],
[], # a with breve (romanian)
[], # a with circumflex (romanian)
[], # a with ogonek (polish)
['B', ['b','B']],
[], # b with hook (hausa)
[... omitted...]
['Z', ['z','Z']],
[], # zh (albanian)
[], # zs (hungarian)
['Ž', ['ž','Ž']],
[], # z with acute (lower sorbian, polish)
[], # z with dot above (polish)
];
$ligatures = [
[['ß'], 'after', [['s','s']]],
];
@special = ('?', '!', '.', 'letters', '-', '\'');
$sortcase = "Aa";
#$sortcase = "aA";
do 'make-rules.pl';
TEC套件
TEC套件为音译方案提供了快速灵活的方法,但只能在 XeTeX 中即时使用。
LuaTeX 和 ConTeXt
Hans Hagen 和 comp. 正在快速开发工具(ConTeXt、LuaTeX)。例如,在文件中/texmf-dist/tex/context/base/sort-lan.lua
,我们可以找到捷克语的排序规则:
[... omitted ...]
definitions["cz"] = {
replacements = {
{ "ch", ch }, { "Ch", ch }, { "CH", ch }
},
entries = {
["a"] = "a", ["á"] = "a", ["b"] = "b", ["c"] = "c", ["č"] = "č",
["d"] = "d", ["ď"] = "d", ["e"] = "e", ["é"] = "e", ["ě"] = "e",
["f"] = "f", ["g"] = "g", ["h"] = "h", [ch] = "ch", ["i"] = "i",
["í"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m",
["n"] = "n", ["ň"] = "n", ["o"] = "o", ["ó"] = "o", ["p"] = "p",
["q"] = "q", ["r"] = "r", ["ř"] = "ř", ["s"] = "s", ["š"] = "š",
["t"] = "t", ["ť"] = "t", ["u"] = "u", ["ú"] = "u", ["ů"] = "u",
["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["ý"] = "y",
["z"] = "z", ["ž"] = "ž",
},
orders = {
"a", "á", "b", "c", "č", "d", "ď", "e", "é", "ě",
"f", "g", "h", ch, "i", "í", "j", "k", "l", "m",
"n", "ň", "o", "ó", "p", "q", "r", "ř", "s", "š",
"t", "ť", "u", "ú", "ů", "v", "w", "x", "y", "ý",
"z", "ž",
},
upper = {
ch = CH,
},
lower = {
CH = ch,
}
}
definitions["cs"] = { parent = "cz" }
[... omitted ...]
这是处理 Lua 表的一种好方法,但我觉得它可以简化普通用户设置自己的排序/索引规则。
CLDR:还有什么办法吗?
首先看一下 CLDR 数据
我喜欢 Unicode 联盟的方法(它与比伯用于对书目条目进行排序的工具),他们提供了所谓的慢性肾衰竭数据(Unicode 通用区域数据存储库;我最近才发现这个项目),其中包含用于索引创建的数据。让我给你看一个捷克语的例子(下载并解压后core.zip
,http://unicode.org/Public/cldr/27/)。规则都写在文件/code/common/main/
的文件夹中cs.xml
。
[... omitted ...]
<characters>
<exemplarCharacters>[a á b c č d ď e é ě f g h {ch} i í j k l m n ň o ó p q r ř s š t ť u ú ů v w x y ý z ž]</exemplarCharacters>
<exemplarCharacters type="auxiliary">[à ă â å ä ã ā æ ç è ĕ ê ë ē ì ĭ î ï ī ľ ł ñ ò ŏ ô ö ø ō œ ŕ ù ŭ û ü ū ÿ]</exemplarCharacters>
<exemplarCharacters type="index" draft="contributed">[A B C Č D E F G H {CH} I J K L M N O P Q R Ř S Š T U V W X Y Z Ž]</exemplarCharacters>
<exemplarCharacters type="punctuation">[\- ‐ – , ; \: ! ? . … ‘ ‚ “ „ ( ) \[ \] § @ * / \&]</exemplarCharacters>
[... omitted ...]
如果我们可以解析这些数据(请参阅此网页低密度脂蛋白; Unicode 区域设置数据标记语言),可以设置新语言(本例中为捷克语)的规则。它涵盖了许多语言和方言,但例如波纳佩语尚未涵盖。因此我认为,即使有这些数据可用,仍然应该有一种简单的方法来定义一种新语言。
可能有很多工具可以解析和预处理这些文件,让我提一下cldr来自 JavaScript 世界。
很难说比伯可用于在索引创建中进行排序,即使可以,它也无法处理索引创建的典型问题。
关于僧伽罗语和泰米尔语的注释
几年前,布拉格的 Zdeněk Wagner 向我展示了他在天城文中的实验,但它尚未被收录在官方 Xindy 文件中。Zdeněk 告诉我他的文件尚未完全准备好发布。因此对婆罗米文的支持可能仍然很弱。
有一天,我想看到排序的列表/索引,例如巴利语,最好在僧伽罗语和泰米尔语更不用说日语、中文、韩语等等了。
看起来这是有可能的,因为 CLDR 包含文件si.xml
(ISO 639-1;僧伽罗语)和ta.xml
(ISO 639-1;泰米尔语)。艾尔凯斯来自 Unicode 的编码可能会在某些语言/情况下提供一些帮助。
看来编程中最难的部分是处理这些东方语言中的复杂连字符(其次是处理部首和笔画数;这是另一个大问题)。这是我的一位同事,来自布拉格的 Jan Kučera 发给我的泰米尔语表格方案的一部分。在我们输入一个字符后跟一个 MarkPlaceholder 后,我们得到了一个连字符。这是一个大概的想法,他可能在某个地方实现了它。
"", "^");
"அ", "a");
"ஆ", "ā", "A", "aa");
"இ", "i");
"ஈ", "ī", "I", "ee");
"உ", "u");
"ஊ", "ū", "U", "oo");
"எ", "e");
"ஏ", "ē", "E");
"ஐ", "ai");
"ஒ", "o");
"ஓ", "ō", "O");
"ஔ", "au", "ou", "ow");
"ஃ", "ḵ", "H", "q");
"க" + MarkPlaceholder, "k", "K", "kh", "G", "gh");
"ங" + MarkPlaceholder, "ṅ", "ng", "~g", "g"); // g is க in Baraha
"ச" + MarkPlaceholder, "c", "s", "ch", "C", "Ch");
"ஞ" + MarkPlaceholder, "ñ", "n^", "ny", "NY", "jn", "~j", "nJ"); // ந can be n^ in Madurai
"ட" + MarkPlaceholder, "ṭ", "T", "Th", "d", "D", "Dh"); // d is த in Baraha
"ண" + MarkPlaceholder, "ṇ", "N");
"த" + MarkPlaceholder, "t", "th", "dh");
"ந" + MarkPlaceholder, "n", "~n", "nN"); // n is ன in Baraha
"ப" + MarkPlaceholder, "p", "P", "ph", "b", "B", "bh");
"ம" + MarkPlaceholder, "m", "M");
"ய" + MarkPlaceholder, "y", "Y");
"ர" + MarkPlaceholder, "r");
"ல" + MarkPlaceholder, "l");
"வ" + MarkPlaceholder, "v", "w");
"ழ" + MarkPlaceholder, "z", "zh", "Lx");
"ள" + MarkPlaceholder, "ḷ", "L");
"ற" + MarkPlaceholder, "ṟ", "R", "rx");
"ன" + MarkPlaceholder, "ṉ", "_n", "n2");
"ஜ" + MarkPlaceholder, "j", "jh", "J");
"ஶ" + MarkPlaceholder, "ś");
"ஷ" + MarkPlaceholder, "ṣ", "sh"); // sh is ஶ in Baraha
"ஸ" + MarkPlaceholder, "S");
"ஹ" + MarkPlaceholder, "h", "~h");
"", "a", "^");
"ா", "ā", "A", "aa");
"ி", "i");
"ீ", "ī", "I", "ee");
"ு", "u");
"ூ", "ū", "U", "oo");
"ெ", "e");
"ே", "ē", "E");
"ை", "ai");
"ொ", "o");
"ோ", "ō", "O");
"ௌ", "au", "ou", "ow");
关于假名的结束语
有一次,我尝试为 Xindy 准备一种假名(平假名和片假名)的样式,它成功了,但要处理的核心是汉字。我想用这个 Xindy 的预览来结束我的笔记实验从 2010 年开始。我认为这不是设置和维护索引生成定义文件的最简单方法。这些文件尚未准备好投入生产,因此不太可能只有假名索引。如果我们有几个假名术语,我们可能会\index{sayounara@さようなら}
在文档中使用。
因此,我在这篇文章中思考,我(我们)是否可以做些什么来改善索引世界的现状。
答案1
测试文件
这testidx
包是为测试索引而设计的。它涵盖了基本拉丁字符集和一些欧洲语言中常见的扩展字符,但它被设计为可扩展的。一个简单的测试文档:
\documentclass{book}
\usepackage{imakeidx}
\usepackage{testidx}
\makeindex
\begin{document}
\testidx
\printindex
\end{document}
这将创建一个具有七页索引的测试文档,其中包含一个符号组、一个数字组和 26 个基本拉丁字母组 A、...、Z。
如果使用 T1 字体编码(提供\dh
等),则可以得到一些额外的术语:
\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage{imakeidx}
\usepackage{testidx}
\makeindex
\begin{document}
\testidx
\printindex
\end{document}
有两种可用的 UTF-8 模式inputenc
:
- 净化:排序值在传递之前会先净化,
\index
以防止活动字符在写入索引文件时被扩展。此模式旨在测试索引应用程序对 UTF-8 字符进行排序的能力。 - 未清理:排序值在传递给 之前未清理
\index
。UTF-8 字符如何写入索引文件取决于 的定义\index
。标准定义会导致扩展。
示例(默认sanitize
模式):
\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{imakeidx}
\usepackage{testidx}
\makeindex
\begin{document}
\testidx
\printindex
\end{document}
例如,该.idx
文件包含:
\indexentry{élite}{4}
这将导致 出现问题makeindex
,因为它不支持 UTF-8,但它可以用来测试xindy
。
示例(nosanitize
模式):
\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{imakeidx}
\usepackage[nosanitize]{testidx}
\makeindex
\begin{document}
\testidx
\printindex
\end{document}
该.idx
文件现在包含:
\indexentry{\IeC {\'e}lite}{4}
使用 XeLaTeX 和 LuaLaTeX 时,两种模式下的结果相同,因为 UTF-8 字符不活跃,所以不会扩展。
默认情况下,术语以不使用封装或使用三种测试封装之一的方式进行索引。虚拟文本是故意设计用来触发封装冲突的。如果您不需要对此进行测试,可以使用 将其关闭notestencaps
。
\documentclass{book}
\usepackage{fontspec}
\usepackage{imakeidx}
\usepackage[notestencaps]{testidx}
\makeindex[program=texindy,options={-C utf8 -L icelandic}]
\begin{document}
\testidx
\printindex
\end{document}
在这种情况下,索引包含一个默认组(其中包括符号、数字和冰岛字母规则中未出现的字母:Ć、Ł、Ś 和 Ż),以及字母组 A、...、D、ð、E、...、Z、Þ、Æ、Ö 和 Å。
该索引还包括一些以二元字母(例如 dd、dz、ff、ij、ll、ly、ng、th)以及三元字母(dzs)开头的术语,以测试索引应用程序处理这些术语的能力。
默认情况下,符号以以下形式索引
\index{>alpha@$\alpha$}
或者
\index{<tstidxmarker@\csname tstidxmarker\endcsname \space (\tstidxcsfmt {tstidxmarker})}
或者
\index{E@$E$}
表示索引符号的不同方式。<
和>
前缀允许将不同类型的符号组合在一起,但您可以使用 选项省略此前缀noprefix
。
还有一个补充包testidx-glossaries
,它使用glossaries
包接口而不是\index
。
可以使用 添加其他测试段落\tstidxnewblock
。带星号的形式要求第一个参数的控制序列可用于保存块编号(如果需要在另一个块中引用该块,则不使用\label
/,\ref
因为引用通常用作对用户的指示,如果省略必需的块,则无法解析。)例如:
\documentclass{book}
\usepackage{fontspec}
\usepackage{imakeidx}
\usepackage[notestencaps]{testidx}
\makeindex[program=texindy,options={-C utf8 -L general}]
\tstidxnewblock*{\mystartblock}{The \tstidxopenword{cat} sat
on the \tstidxword{mat}. (This block requires block~\myendblock\
to close a range.)}
\tstidxnewblock{O gato \tstidxutfword{engra\c{c}ado}[engracado]{engraçado}
perseguiu o papagaio bobo.}
\tstidxnewblock*{\myendblock}{The \tstidxcloseword{cat} made friends
with the parrot. (This block requires block~\mystartblock.)}
\begin{document}
\testidx
\printindex
\end{document}
这些新的块定义可以放入自动加载的包中testidx
。
CLDR:还有什么办法吗?
现在有一个新的索引替代方案bib2gls
但它需要glossaries-extra
。不使用,而是在文件\index
中定义术语。由于是 Java 应用程序,如果您至少拥有 Java 8,那么您可以使用 CLDR 作为语言环境提供程序。使用 Java 8,这需要(包含在随 分发的 bash 脚本中)。您可能更喜欢不同的顺序,例如。通过放置在列表中的第一位,它具有最高优先级。如果 CLDR 不支持语言环境,则检查下一个提供程序。(我认为 Java 9 默认支持 CLDR。).bib
bib2gls
-Djava.locale.providers=CLDR,JRE,SP
bib2gls
-Djava.locale.providers=CLDR,SP,JRE
CLDR
这是一个简单的.bib
文件(称为entries.bib
):
% Encoding: UTF-8
@index{animal}
@index{duck,parent={animal}}
@index{goose,plural={geese},parent={animal}}
@entry{sample,
name={sample},
description={an example with a description}
}
@abbreviation{html,
short="html",
long={hypertext markup language}
}
@symbol{pi,
name={\ensuremath{\pi}}
}
以下是仅使用文件中一个术语的示例文档entries.bib
:
\documentclass{article}
\usepackage[record]{glossaries-extra}
\GlsXtrLoadResources[
src={entries}% data in entries.bib
]
\begin{document}
\gls{sample}.
\printunsrtglossaries
\end{document}
该testidx-glossaries
软件包提供对以下方面的支持bib2gls
:
\documentclass{book}
\usepackage{fontspec}
\usepackage[bib2gls]{testidx-glossaries}
\tstidxmakegloss
\begin{document}
\testidx
\printunsrtglossary[title={Index}]
\end{document}
\tstidxmakegloss
是一个方便的快捷方式,它根据包选项执行\makenoidxglossaries
或\makeglossaries
或。在这种情况下,它实际上执行了几个调用。如果添加包选项,可以在文件中找到这些调用。这是一个带有显式调用的示例:\GlsXtrLoadResources
\GlsXtrLoadResource
.log
verbose
\documentclass{book}
\usepackage{fontspec}
\usepackage[bib2gls,manual]{testidx-glossaries}
\GlsXtrLoadResources[src={testidx-glossaries-mathsym},
group={Maths},
sort={letter-case},
selection={recorded and deps and see},
ignore-fields={description}
]
\GlsXtrLoadResources[src={testidx-glossaries-markers},
group={Markers},
sort={letter-case},
selection={recorded and deps and see},
ignore-fields={description}
]
\GlsXtrLoadResources[src={testidx-glossaries-numbers},
sort={integer},
selection={recorded and deps and see},
ignore-fields={description}]
\GlsXtrLoadResources[
src={\tstidxbasebibfiles,\tstidxutfbibfiles,\tstidxglyphfile-utf8},
selection={recorded and deps and see},
ignore-fields={description}]
\renewcommand{\glsnamefont}[1]{\textmd{#1}}
\begin{document}
\testidx
\printunsrtglossary[title={Index}]
\end{document}
的每个实例都会\GlsXtrLoadResources
在索引/词汇表中创建一个新块(可以通过选项标识type
,但在此示例中只有默认main
类型)。块不一定对应于字母组或提供任何视觉区别。它只是允许在一个列表中进行不同的排序。group
如果需要,选项会分配字母组,但bib2gls
必须使用--group
(或-g
)开关调用才能与此选项一起使用。组选项的值是一个标签。如果相应的标题不同,可以使用来设置\glsxtrsetgrouptitle
。
处理号码
可以使用数字排序方法之一对数字进行排序。在上面的代码中,第三个块根据 进行排序sort={integer}
。Java 可以识别各种数字系统,因此只要排序值可以解析,就应该按数字排序。任何无法解析的值都将被视为 0。
设置一组新的排序规则和字母组
可以如上所示创建自定义组(例如数字和符号),但您也可以提供自己的规则。规则语法可能很长,但包(使用该选项时glossaries-extra-bib2gls
会自动加载)提供了一些方便的快捷方式。例如:glossaries-extra
record
\documentclass{book}
\usepackage{fontspec}
\usepackage[bib2gls,manual]{testidx-glossaries}
\GlsXtrLoadResources[src={testidx-glossaries-mathsym},
group={Maths},
sort={letter-case},
selection={recorded and deps and see},
ignore-fields={description}
]
\GlsXtrLoadResources[src={testidx-glossaries-markers},
group={Markers},
sort={letter-case},
selection={recorded and deps and see},
ignore-fields={description}
]
\GlsXtrLoadResources[src={testidx-glossaries-numbers},
sort={integer},
selection={recorded and deps and see},
ignore-fields={description}]
\GlsXtrLoadResources[
src={\tstidxbasebibfiles,\tstidxutfbibfiles,\tstidxglyphfile-utf8},
selection={recorded and deps and see},
ignore-fields={description},
sort={custom},
sort-rule={\glsxtrcontrolrules
;\glsxtrspacerules
;\glsxtrnonprintablerules
;\glsxtrcombiningdiacriticrules
,\glsxtrhyphenrules
<\glsxtrgeneralpuncrules
<\glsxtrdigitrules
<\glsxtrfractionrules
<a,A <b,B <c,C <ch,CH,Ch <d,D <dd,DD,Dd <e,E <f,F <ff,FF <g,G <ng,NG,Ng
<h,H <i,I <l,L <ll,LL <m,M <n,N <o,O <p,P <ph,PH,ph <r,R <s,S <t,T
<th,TH,Th <u,U <w,W <y,Y
}
]
\renewcommand{\glsnamefont}[1]{\textmd{#1}}
\begin{document}
\testidx
\printunsrtglossary[title={Index}]
\end{document}
修改规则
这也可以通过自定义规则来完成。如果您bib2gls
使用--debug
开关运行,规则将写入转录.glg
文件。(搜索Collator rules:
)您可以复制并粘贴此内容,但请注意开头的控制代码。最好将它们替换\glsxtrcontrolrules
为上面显示的等。
支持在一个索引中索引多种语言
您可以使用支持两种语言的自定义规则,也可以\GlsXtrLoadResources
为每种语言使用单独的规则。例如:
\GlsXtrLoadResources[src={german-terms},sort={de-CH-1996}]
\GlsXtrLoadResources[src={japanese-terms},sort={ja}]
\GlsXtrLoadResources[src={sanskrit-terms},sort={sa}]
双向超链接
文档中使用这些包\gls
提供的命令来引用术语。如果包在之前加载(因此在和之前,隐式加载包),glossaries
这些命令将成为列表中相关条目的超链接。hyperref
glossaries
glossaries-extra
testidx-glossaries
\documentclass{book}
\usepackage{fontspec}
\usepackage[hidelinks]{hyperref}
\usepackage[bib2gls]{testidx-glossaries}
\tstidxmakegloss
\renewcommand{\glsnamefont}[1]{\textmd{#1}}
\begin{document}
\testidx
\printunsrtglossary[title={Index}]
\end{document}
位置列表中的页码会链接回来。如果您希望术语链接回来(例如,链接到主要参考文献),那么这会更复杂,但可以做到,尽管它仍处于试验阶段。(至少需要glossaries-extra
v1.29 和bib2gls
v1.4。)
\documentclass{article}
\usepackage{amsmath}
\usepackage{lipsum}
\usepackage[colorlinks]{hyperref}
\usepackage[record,indexcounter]{glossaries-extra}
\newcommand{\primary}[1]{\hyperbf{#1}}
\GlsXtrLoadResources[src={test-entries},
save-index-counter=primary
]
\renewcommand{\glsnamefont}[1]{\GlsXtrIndexCounterLink{#1}{\glscurrententrylabel}}
\begin{document}
A \gls{sample}. \lipsum*[1] A \gls{duck}.
An equation:
\begin{equation}
\gls[counter=equation]{pi}
\end{equation}
And some more equations:
\begin{align}
A &= b\\
f(x) &= \gls[counter=equation]{pi}x
\end{align}
\lipsum[2]
Another \gls[format=primary]{sample}. \lipsum*[3] Another \gls{duck}.
\gls{pi}. \lipsum[4]
A \gls{sample}. \lipsum*[5] A \gls{duck} and \gls[format=primary]{pi}.
\lipsum*[6] A \gls[format=primary]{duck}.
\printunsrtglossaries
\end{document}
包含不同信息的索引
您可以使用选项为位置使用不同的计数器counter
(例如,\gls[counter=equation]{pi}
在上面的例子中),或者您可以使用自定义位置,例如:
\glsadd[thevalue={Supplementary Material}]{sample}
默认情况下,位置的顺序与索引的顺序相同,但您可以根据counter
索引时的用途来区分位置。例如:
\GlsXtrLoadResources[
loc-counters={equation,page},% group locations by counter
src={entries}% data in entries.bib
]
您可以在其他字段中提供更多信息。(请参阅手册中的“示例”章节bib2gls
。)
轻松设置输出端的标签
这可以通过词汇表样式或使用提供的钩子来完成glossaries-extra
。再次参阅用户手册中的“示例”一章bib2gls
。
混合写作
类似地,您可以为一个脚本提供一个字段,为另一个脚本提供另一个字段。您可以使用\glsaddkey
基础glossaries
包提供的方法来定义字段,并提供一些用户命令来引用文档中的字段。@dualentry
条目.bib
格式可以提供一种索引两种形式的方法(作为两个单独的术语,可以选择在不同的索引/词汇表中)。
排序引擎关闭,索引引擎打开
您可以使用 关闭排序,但这可能会导致分层条目出现问题,因此在下面的示例中sort=none
使用来删除层次结构:flatten
\documentclass{book}
\usepackage{fontspec}
\usepackage[hidelinks]{hyperref}
\usepackage[bib2gls,manual]{testidx-glossaries}
\GlsXtrLoadResources[
src={testidx-glossaries-mathsym,
testidx-glossaries-markers,
testidx-glossaries-numbers,
\tstidxbasebibfiles,\tstidxutfbibfiles,\tstidxglyphfile-utf8},
selection={recorded and deps and see},
ignore-fields={description},
flatten,
sort={none}
]
\renewcommand{\glsnamefont}[1]{\textmd{#1}}
\begin{document}
\testidx
\printunsrtglossary[title={Index}]
\end{document}
这将按定义顺序列出条目(在.bib
文件中)。您还可以sort=use
按文档中首次使用的顺序列出,或sort=random
用于随机列表。
排序引擎开启,索引引擎关闭
您可以使用 选择所有已定义的条目(无论它们是否已在文档中引用)selection=all
。 (如果已在文档中编入索引,则可以使用save-locations=false
省略位置列表。)
相关阅读:
- 测试索引:testidx.sty。TUGboat 38:3,2017年。
bib2gls
用户手册