有没有办法扩展 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
您想要使用的任何内容。