如何以相反的顺序获取(xindy)索引(旨在首先显示最后的历史变化)?

如何以相反的顺序获取(xindy)索引(旨在首先显示最后的历史变化)?

考虑以下 MWE (例如test.tex),并使用以下命令进行编译:

  1. pdflatex test
  2. texindy -M test.xdy test.idx
  3. pdflatex test

其中,更改是通过(稍微)定制的索引列出的(我不需要包提供的\RecordChanges、、机制)。\PrintChanges\changesdoc

\documentclass{article}
\usepackage[xindy,nonewpage]{imakeidx}
\usepackage{filecontents}

\begin{filecontents*}{\jobname.xdy}
(markup-index :open  "~n
\begin{theindex}
  \small
  \providecommand*\lettergroupDefault[1]{}
  \providecommand*\lettergroup[1]{}
  ~n"
  :close "~n~n\end{theindex}~n"
:tree)
\end{filecontents*}

\makeindex[title=Change History,columns=1,options=-M \jobname.xdy]

\newcommand\changes[2]{\index{#1!#2}}
\newcommand\PrintChanges{\printindex}

\begin{document}
\changes{v1.0}{First public version}%
\changes{v2.0}{Second public version (much better)}%
%
This is a nice document but its next version will be much better.
%
\PrintChanges
\end{document}

在此处输入图片描述

这很好,但最后的更改位于最后的位置,如果更改历史变得很长,那就不是很方便,特别是对于经常想要检查最后更改的勤奋读者来说。

因此,最好是将更改历史记录(因此这里是索引)按相反的顺序排列。(请注意,此请求对于doc包提供的更改历史记录也有效。)

更新

感谢 egreg 的建议,我尝试使用define-sort-rule-orientations手册中所述的命令:

此命令必须位于索引样式中的所有排序规则命令之前。

好的,让我们尝试这样做。texindy使用-d script选项运行让我们看到,实际上,运行:

texindy -d script test.idx

实际上运行:

xindy -d script -L general -C latin -M tex/inputenc/latin -M texindy -M page-ranges -M word-order -I latex test.idx

但即使减少到最低限度:

xindy -d script test.idx

运行xindy加载模块latin9-lang.xdy,包含:

(require "lang/general/latin9.xdy")
(define-sort-rule-orientations (forward backward forward forward))
(use-rule-set :run 0
          :rule-set ("xy-alphabetize" "xy-ignore-special"))
(use-rule-set :run 1
          :rule-set ("xy-resolve-diacritics" "xy-ignore-special"))
(use-rule-set :run 2
          :rule-set ("xy-resolve-case" "xy-ignore-special"))
(use-rule-set :run 3
          :rule-set ("xy-resolve-special"))

因此,似乎不可能define-sort-rule-orientations在所有排序规则之前指定另一个。

因此,问题仍然存在:如何以相反的顺序获取(xindy)索引?

答案1

抱歉回答晚了:几天前,我在研究以相反顺序打印 babel-french 的变更历史时发现了这个帖子。

以下是我对丹尼斯提出的问题的一些想法。

  1. 使用“define-sort-rule-orientations”不是一个选项:它用于在 4 个排序阶段从左到右(向前)或从右到左(向后)读取模式,而不是用于反向排序;参见http://xindy.sourceforge.net/doc/new-sort-rules.ps

  2. 在由 LaTeX、XeLaTeX 或 LuaLaTeX 生成的索引或词汇表上运行 xindy (或 texindy) 需要二进制“tex2ind​​y”,它将“.idx”或“.glo”文件转换为 xindy 可读的格式。不幸的是,一些字符代码(即由 \levelchar、\actualchar、\quotechar 定义的代码)被硬编码到二进制文件中,以作为“.idx”文件的默认值;由于“doc.sty”会更改它们,因此 tex2ind​​y 不适合转换使用 doc.sty 生成的“.glo”文件。

  3. 因此,必须使用自制的过滤器绕过“tex2ind​​y”,该过滤器必须能够将“.glo”文件转换为“xindy -I xindy”可读的内部格式。

    doc.sty 生成的“.glo”条目示例:

    \changes{v.2.3c}{2001/01/01}{Foo 更改为 Bar} 发生在第 15 页,未嵌入 \begin{macro}...\end{macro} 环境中,产生

    \glossaryentry{v2.3c> =General:>Foo 更改为 Bar}{15}

    它应该转换为 xindy 内部语法,如下所示:

    (indexentry :tkey (("sort-key0" "v2.3c") ("sort-key1" "General:") (" Foo 更改为 Bar")) :locref "15")

  4. 过滤器(依赖于正则表达式)可以在Perl,Lua等中写为fi。

    ——“sort-key0”可以从版本号2.3c(按升序或降序)派生,以实现正常或反向排序,而无需更改xindy模块中的任何内容。

    —— 可以选择“sort-key1”来将这些更改排序在 {macro} 环境内所做的更改之前(或之后)。

  5. 使用适当的样式模块(“-M style.xdy”)运行“xindy -I xindy”将生成最终的、正确排序的“.gls”文件。

相关内容