使用 imakeidx 和 texindy 在一个索引条目下创建多个 \seealso

使用 imakeidx 和 texindy 在一个索引条目下创建多个 \seealso

我需要seealso在一个索引条目下有多个。我尝试了几种方法来实现这一点。第一个变体(见下文)在条目之间产生分号,但我需要逗号作为分隔符。其他变体产生了良好的输出,但会抛出错误,例如ERROR: Cross-reference-target ("a, c") does not exist!。有解决方案makeidx,但我需要用imakedx和来解决这个问题xindy

我的 MWE:

\documentclass{article}

\usepackage{hyperref}

\usepackage[xindy]{imakeidx}
\makeindex[options=-M texindy]

\begin{document}
foo\index{a} \index{b} \index{c} \index{d}

\index{a|seealso{c}} \index{a|seealso{d}} %1st

\index{b|seealso{a, c}} %2nd

\index{c\relax |seealso{a, b}} %3rd

\index{d\gobble |seealso{b, c}} %4th

\printindex
\end{document}

我的输出:

多个参见

答案1

多个条目的分隔符seealso在文件中定义makeindex.xdy,该文件通常位于安装目录中。如果您在存储文件的目录中xindy创建替代文件,则会加载替代文件。例如,以下示例为第一个变体输出逗号且没有错误:makeindex.xdy.tex

makeindex.xdy

(define-crossref-class "see")
(markup-crossref-list :class "see" :open "\see{" :sep ", " :close "}{}")

(define-crossref-class "seealso")
(markup-crossref-list :class "seealso" :open "\seealso{" :sep ", " :close "}{}")

(markup-crossref-layer-list :sep ", ")

(define-location-class-order ("roman-page-numbers"
                  "arabic-page-numbers"
                  "alpha-page-numbers"
                  "Roman-page-numbers"
                  "Alpha-page-numbers"
                  "see"
                  "seealso"))

结果:

在此处输入图片描述

也可能将替代规则设置为命令行选项,但我没有找到这样做的方法。

相关内容