Xindy:将元信息传递给输出

Xindy:将元信息传递给输出

有没有办法扩展 xindy,使其通过排序算法传递一些元信息,然后在输出标记中处理这些信息?

具体来说,我需要我的索引词不仅显示页码,还显示章节 ID 和它所在的书的卷数。有没有办法将这些信息从原始索引传递到 xindy 中的输出标记?

原始索引的最小示例如下所示:

(indexentry :tkey (("α-Tier")) :locref "2" :id "xyz_sec-13.01" :edn "1.1")
(indexentry :tkey (("Tier α")) :locref "6" :id "xyz_subsec-1302" :edn "10.9")

当然,xindy 无法接受这种情况(“语法错误”),因为 indexentry 没有 id 和 edn 属性。我还尝试了类似

(indexentry :tkey (("α-Tier")) :locref "2" :attr "id=xyz_sec-13.01,edn=1.1")
(indexentry :tkey (("Tier α")) :locref "6" :attr "id=xyz_subsec-1302,edn=10.9")

但这也不起作用。

我通过使用它来工作

(indexentry :tkey (("α-Tier@@id=xyz_sec-13.01,edn=1.1@@")) :locref "2")
(indexentry :tkey (("Tier α@@id=xyz_sec-1302,edn=10.9@@")) :locref "6")

通过合并规则进行剪辑@@[^@]+@@,并使用预处理器调整我的输出标记。但我想知道是否有更优雅的方式来做到这一点,最好是在 xindy 内部?

答案1

如果你将以下行添加到 .xdy 文件中,

(define-location-class "SecAndEdn" :var ("arabic-numbers" 
   :sep ";sec-" "arabic-numbers" :sep ";" "arabic-numbers"))

它将允许您传递如下格式的位置:

(indexentry :tkey (("α-Tier")) :locref "2;sec-13;2017")
(indexentry :tkey (("Tier α")) :locref "6;sec-14;2017")

为了解决这个问题,我们创建了一个新的位置类,使用“阿拉伯数字”字母表来获取位置。我们使用选项:var允许它获取更多信息,这里我们打开另一个级别来允许该部分,即前面带有“;sec-”的“阿拉伯数字”,然后是前面只有“;”的另一个“阿拉伯数字”。

如果您想要不同的分隔符,您可以将参数更改为:sep您想要使用的任何内容。

相关内容