我正在xindy
Windows 10 上使用 MikTeX 进行测试。我有以下简单内容myfile.tex
:
\documentclass{article}
\usepackage{imakeidx}
\makeindex
\begin{document}
Some text
\index{aa}
\index{ab}
\index{ac}
\printindex
\end{document}
...mystyle.xdy
包含一行:(define-letter-group "ab" :after "A" :before "B")
。
当我运行
xelatex myfile
texindy -C utf8 -L english -M mystyle -o myfile.ind myfile.idx
xelatex myfile
或者
xelatex myfile
xindy -C utf8 -L english -M texindy -M mystyle -o myfile.ind myfile.idx
xelatex myfile
我可以看到xindy
运行并生成了.ind
,它读取了我的样式文件但并未应用它。发生了什么?我该如何xindy
应用我的样式文件?
答案1
我无法确切地说明 MikTeX 的情况,但在我的 Debian GNU/Linux 系统上的 TeXLive 上,xindy
使用所谓的前缀将重音字母放入字母组中并对其进行排序。例如,以下内容取自/usr/share/xindy/lang/english/utf8.xdy
:
;; Rules for xindy; generated by make-rules.pl
;; language: English
(define-letter-group "A" :prefixes ("�"))
(define-letter-group "B" :after "A" :prefixes ("�"))
(define-letter-group "C" :after "B" :prefixes ("�"))
(这里"�"
替换了用于对索引条目进行排序的单字节字符串,它们对于所有字母组都是不同的,对于"A"
它是0x80
字节,对于"B"
它是0x84
,对于"C"
它是0x86
等等。)之后,"en-alphabetize"
规则用这些前缀替换所有字母,并xindy
根据它们对单词进行排序并将单词放入字母组中。以下是规则的摘录:
(define-rule-set "en-alphabetize"
:rules (("À" "�" :string)
("à" "�" :string)
("Æ" "��" :string)
("æ" "��" :string)
再次,我无法重现 8 位字符串,尽管"�"
所有四条规则中的第一条0x80
意味着这些字母将进入"A"
字母组。
因此,如果您希望"AB"
字母组融入现有组,则必须为其分配合适的前缀。我的 TeXLive 的工作方式如下mystyle.xdy
:
(define-letter-group "ab" :after "A" :prefixes ("��"))
其中第一个�
有0x80
十六进制代码,第二个有0x84
十六进制代码。我不知道 MikTeX 的代码是否应该相同,因为它们是由脚本生成的。如果有帮助的话,这里是编码base64
(mystyle.xdy
因为 8 位字符串,简单的复制和粘贴不起作用):
KGRlZmluZS1sZXR0ZXItZ3JvdXAgImFiIiA6YWZ0ZXIgIkEiIDpwcmVmaXhlcyAoIoCEIikpDQoNCg==
当我跑步时
xindy -C utf8 -L english -M texindy -M mystyle myfile.idx
我得到以下信息myfile.ind
:
\begin{theindex}
\providecommand*\lettergroupDefault[1]{}
\providecommand*\lettergroup[1]{%
\par\textbf{#1}\par
\nopagebreak
}
\lettergroup{A}
\item aa, 1
\item ac, 1
\indexspace
\lettergroup{ab}
\item ab, 1
\end{theindex}