哪些东西可以使用了?(TeX Live 2014,明年可能也会用)

哪些东西可以使用了?(TeX Live 2014,明年可能也会用)

(这不是一个真正的问题,而是想法和观点的列表。)

我并不是一个严肃的 TeXist,但索引创建这个主题让我非常感兴趣。由于我喜欢用 Lua 编程,我开始想我是否可以尝试一两个实验来涵盖索引世界中的一些主题。让我想一想。在这篇文章/问题中,我试图收集我们遗漏的、可以改进的或只是将它们包含在开箱即用的功能中会很好的想法。

这个列表可能有助于程序员实际编写一些新程序,或者帮助我在实际进行编程之前走上正确的轨道。

哪些东西可以使用了?(TeX Live 2014,明年可能也会用)

我们经常使用一些工具和包来进行排序和/或创建索引:


我们可能希望拥有什么?(待更新)

支持更多语言

为了辛迪,我尝试准备定义文件梵文(音译方案)和巴利语。但正确设置它相当耗时。最好只定义一些字母,比如在 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.ziphttp://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">[\- ‐ – , ; \: ! ? . … ‘ ‚ “ „ ( ) \[ \] § @ * / \&amp;]</exemplarCharacters>
  [... omitted ...]

如果我们可以解析这些数据(请参阅此网页低密度脂蛋白; Unicode 区域设置数据标记语言),可以设置新语言(本例中为捷克语)的规则。它涵盖了许多语言和方言,但例如波纳佩语尚未涵盖。因此我认为,即使有这些数据可用,仍然应该有一种简单的方法来定义一种新语言。

可能有很多工具可以解析和预处理这些文件,让我提一下cldr来自 JavaScript 世界。

很难说比伯可用于在索引创建中进行排序,即使可以,它也无法处理索引创建的典型问题。

关于僧伽罗语和泰米尔语的注释

几年前,布拉格的 Zdeněk Wagner 向我展示了他在天城文中的实验,但它尚未被收录在官方 Xindy 文件中。Zdeněk 告诉我他的文件尚未完全准备好发布。因此对婆罗米文的支持可能仍然很弱。

有一天,我想看到排序的列表/索引,例如巴利语,最好在僧伽罗语泰米尔语更不用说日语、中文、韩语等等了。

看起来这是有可能的,因为 CLDR 包含文件si.xmlISO 639-1;僧伽罗语)和ta.xmlISO 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。).bibbib2gls-Djava.locale.providers=CLDR,JRE,SPbib2gls-Djava.locale.providers=CLDR,SP,JRECLDR

这是一个简单的.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.logverbose

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

\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这些命令将成为列表中相关条目的超链接。hyperrefglossariesglossaries-extratestidx-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-extrav1.29 和bib2glsv1.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省略位置列表。)

相关阅读:

相关内容