如何让 xindy 不仅能读取还能应用 .xdy 样式文件?

如何让 xindy 不仅能读取还能应用 .xdy 样式文件?

我正在xindyWindows 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 的代码是否应该相同,因为它们是由脚本生成的。如果有帮助的话,这里是编码base64mystyle.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}

相关内容