在同一个索引条目中使用 makeindex 命令时,多个 \seealso 的正确用法是什么?

在同一个索引条目中使用 makeindex 命令时,多个 \seealso 的正确用法是什么?

如果使用

\index{invariant!\relax|seealso{Lorentz invariance}}%
\index{invariant!\relax|seealso{speed of light}}%

.tex文件中,当 makeindex 程序.ilg处理第二个条目时,它会在文件中生成一个警告:

## Warning (input = motionmountain-volume4.idx, line = 29; output = motionmountain-volume4.ind, line = 618):
   -- Conflicting entries: multiple encaps for the same page under same key.

如何\seealso在不产生任何警告的情况下在一个条目下放置多个条目?

澄清:目前的结果是,尽管有警告,但所有条目仍被添加,如下所示也可以看看条目1也可以看看entry2 等等

在我的梦想中,想要的结果是每一个也可以看看启动其自己的子条目,并且不会出现任何警告。

答案1

下面的测试文件产生也可以看看来自在单个输入中组合多个目标的条目的引用。由于\seealso省略了页码,我看不出有任何理由不合并目标。(只是不要忘记将它们括在括号中,以便将\seealso它们视为单个参数。)

此编码将设置也可以看看文本作为主项目的最后一个二级条目。 \igobble删除前导逗号和空格。创建一个简单的双参数命令来插入“额外”编码应该很简单。

这种方法不会产生任何警告,这是原始问题中指出的一个问题。

\documentclass{article}
\usepackage{makeidx}
\makeindex
\def\igobble#1 {}

\begin{document}

some text\index{a} with some index entries\index{b}
and some\index{c} \emph{see also} entries as well.
\index{a!zzzzz@\igobble |seealso {b, c}}
\index{a!bcd}
\index{c!zzzzz@\igobble |seealso {a, b}}

\printindex
\end{document}

示例代码的输出

感谢 andrew swann 建议使用简单样式的定义来解决删除不需要的空格的问题。(我的 latex 朋友一直试图让我改掉使用简单样式命令的习惯。但在某些情况下,latex(2e) 没有令人满意的方法。)

编辑:
op 更希望每个也可以看看在单独的行中输入。这可以做到,但需要额外的注意,主要是簿记。如果虚拟排序字段对所有都是相同的也可以看看一个主条目的条目,警告是不可避免的,尽管输出是可以的。为了避免警告,可以应用不同的虚拟排序字段。如果这样做,有必要分配它们以便实现所需的最终顺序;如果所有条目都\seealso位于输入文件中,这很容易。

\documentclass{article}
\usepackage{makeidx}
\makeindex
\def\igobble#1 {}

\begin{document}

some text\index{a} with some index entries\index{b}
and some\index{c} \emph{see also} entries as well.
\index{a!zzzza@\igobble |seealso {b}}
\index{a!zzzzb@\igobble |seealso {c}}
\index{a!bcd}
\index{c!zzzza@\igobble |seealso {a}}
\index{c!zzzzb@\igobble |seealso {b}}

\printindex
\end{document}

示例代码的输出

虚拟排序字段的选择将决定条目在索引中的位置。在这个例子中,zzzzx(带x变量)用于强制它们到最后。相反,如果它们优先放在开头,则 0 00x可以使用类似的方法,因为数字在字母之前排序,并且实际的二级索引条目以“零空间”开头的可能性非常小。

相关内容