在我的文档中,我使用了几个词汇表,其中一个用于命名。我对这个词汇表的排序有一些特殊的要求。实现我想要的最简单的方法是,如果我可以sort=def
只提供一个词汇表的选项,但据我所知,这只能作为包选项提供。
因此我想我可能必须写自己的规则。由于我对 xindy 没有任何经验,我想知道以下规则是否是一个很好的起点。
我想要的是:
X
以...为前缀的术语#
紧随其后X
- 如果术语
X
后面有下划线,则该术语紧跟在术语后面X
和前面#X
例子
X
#X
X_index
#X_index
Xindex
#Xindex
我觉得以下规则可能是合理的这里:
(merge-rule "<startOfLine>\#"(.*)<endOfLine>" "\1~e")
(merge-rule "<startOfLine>(.*[^~e])<endOfLine>" "\1~b")
(merge-rule "_" "~b")
我不确定如何使用第一条规则强制匹配整行。我也不确定如何does not end with last character
在第二条规则中制定位。第二条规则旨在防止\#X
落后Xa
。
此外,我查看了samplexdy.tex
词汇表包(docfolder/samples
),并注意到相应的 xindy 文件看起来巨大的,因此,任何关于我在哪里插入规则或我真正需要什么的指示都将不胜感激。我该如何指示glossaries
我只想将修改后的 xindy 文件用于多个词汇表中的一个词汇表?
答案1
来自glossaries
版本 4.04,现在可以使用不同的排序方法,但前提是使用\makenoidxglossaries
选项使用 TeX 进行排序:
\documentclass{article}
\usepackage[nopostdot,nogroupskip]{glossaries}
\newglossary{nomen}{}{}{Nomenclature}
\makenoidxglossaries
% main glossary
\newglossaryentry{goose}{name={goose},description={}}
\newglossaryentry{zebra}{name={zebra},description={}}
\newglossaryentry{duck}{name={duck},description={}}
\newglossaryentry{aardvark}{name={aardvark},description={}}
% nomenclature
\newglossaryentry{X}{type=nomen,name={X},description={}}
\newglossaryentry{hashX}{type=nomen,name={\#X},description={}}
\newglossaryentry{X-index}{type=nomen,name={X\_index},description={}}
\newglossaryentry{hashX-index}{type=nomen,name={\#X\_index},description={}}
\newglossaryentry{Xindex}{type=nomen,name={Xindex},description={}}
\newglossaryentry{hashXindex}{type=nomen,name={\#Xindex},description={}}
\begin{document}
Test document.
\glsaddall
\printnoidxglossary[sort=word]
\printnoidxglossary[type=nomen,sort=def]
\end{document}
(需要运行两次 LaTeX 才能显示词汇表。)这将产生:
这里的缺点是,当使用此方法进行字母排序时,它会非常慢,按字符代码排序,并且如果排序值包含命令,则会出现问题。glossaries-extra
扩展包提供了一种混合方法,允许您使用makeindex
/xindy
进行字母排序,并使用“noidx”方法按用途/定义排序。
\documentclass{article}
\usepackage[nogroupskip]{glossaries-extra}
\newglossary{nomen}{}{}{Nomenclature}
\makeglossaries[main]
% main glossary
\newglossaryentry{goose}{name={goose},description={}}
\newglossaryentry{zebra}{name={zebra},description={}}
\newglossaryentry{duck}{name={duck},description={}}
\newglossaryentry{aardvark}{name={aardvark},description={}}
% nomenclature
\newglossaryentry{X}{type=nomen,name={X},description={}}
\newglossaryentry{hashX}{type=nomen,name={\#X},description={}}
\newglossaryentry{X-index}{type=nomen,name={X\_index},description={}}
\newglossaryentry{hashX-index}{type=nomen,name={\#X\_index},description={}}
\newglossaryentry{Xindex}{type=nomen,name={Xindex},description={}}
\newglossaryentry{hashXindex}{type=nomen,name={\#Xindex},description={}}
\begin{document}
Test document.
\glsaddall
\printglossary
\printnoidxglossary[type=nomen,sort=def]
\end{document}
的可选参数\makeglossaries
应为词汇表标签列表,用于标识需要排序的词汇表makeindex
(或xindy
如果xindy
使用了包选项)。任何剩余的词汇表(nomen
在本例中)都被视为\makenoidxglossaries
已使用。结果与上一个示例相同,但构建过程需要包含makeindex
/ xindy
(明确包含或通过辅助脚本makeglossaries
或包含makeglossaries-lite
)。makeglossaries
和都makeglossaries-lite
可以从文件中检测到,对于此示例,.aux
只有词汇表需要处理。main
还有第三种方法,即glossaries-extra
使用bib2gls
。这需要对文档进行一些修改,因为现在必须在一个或多个.bib
文件中定义条目。
例如,文件entries.bib
可能包含字母条目。如果条目有描述,则可以使用@entry
:
@entry{goose,
name={goose},
plural={geese},
description={long-necked waterbird}
}
如果条目没有描述,您可以使用@index
:
@index{goose,
name={goose},
plural={geese}
}
如果@index
字段name
与标签完全匹配,则可以省略它:
@index{goose,
plural={geese}
}
(您不能用 执行此操作@entry
。)如果您使用 XeLaTeX 或 LuaLaTeX,则标签只能包含 UTF-8 字符。
因此这里是entries.bib
:
@index{goose,
plural={geese}
}
@index{zebra}
@index{duck}
@index{aardvark}
其它条目可以用 定义@entry
。例如:
@entry{X,
name={X},
description={}
}
但由于这些条目就像符号,因此您可以改用@symbol
(与 一样@index
,不需要字段description
):
@symbol{X,
name={X}
}
这里是symbols.bib
:
@symbol{X,
name={X}
}
@symbol{hashX,
name={\#X}
}
@symbol{X-index,
name={X\_index}
}
@symbol{hashX-index,
name={\#X\_index}
}
@symbol{Xindex,
name={Xindex}
}
@symbol{hashXindex,
name={\#Xindex}
}
文档现在如下所示:
\documentclass{article}
\usepackage[record,% use bib2gls
nogroupskip]{glossaries-extra}
\newglossary{nomen}{}{}{Nomenclature}
\GlsXtrLoadResources[
src={entries}, % terms defined in entries.bib
type={main}, % put these terms in the 'main' glossary
save-locations=false,% no location list required
selection={all}% select all terms
]
\GlsXtrLoadResources[
src={symbols}, % terms defined in symbols.bib
type={nomen}, % put these terms in the 'nomen' glossary
sort=none,% don't sort
save-locations=false,% no location list required
selection={all}% select all terms
]
\begin{document}
Test document.
\printunsrtglossaries
\end{document}
如果调用该文件myDoc.tex
则文档构建为:
pdflatex myDoc
bib2gls myDoc
pdflatex myDoc
(如果您想要字母组,您需要bib2gls -g
或bib2gls --group
。)
生成的文档不会显示我使用的位置save-locations=false
。如果您想要位置,请忽略该选项。如果您只想选择文档中使用过的条目,请忽略selection=all
。
默认行为是按文档区域设置排序。在此示例中,区域设置尚未设置,因此bib2gls
将返回系统区域设置(对我来说是en-GB
)。您可以指定不同的语言/区域设置,例如,sort=de-CH-1996
或sort=pt-BR
或sort=en
。使用获得定义顺序sort=none
。还有其他可用的排序方法。