我正在使用创建索引makeindex
,但无法使输出看起来符合我的要求。基本上,我想创建一个格式如下的条目:
条目 1
~~~子条目 1, 2
~~~子条目 2, 3
~~~也可以看看条目2
我不知道如何格式化\index
命令才能正确显示最后一行。我能想到的最好方法是\index{entry1!z@{}|seealso{entry2}}
,但以逗号开头。
还有人遇到过这种非常特殊的强迫症问题吗?
编辑:好的,这里有一个演示该问题的例子:
\documentclass[12pt]{memoir}
\makeindex
\begin{document}
Lorem ipsum
\index{entry1!subentry1}
\index{entry1!subentry2}
\index{entry1!z@{}|seealso{entry2}}
\printindex
\end{document}
答案1
这是一个温和的黑客攻击,它在索引文件中插入一个 gobble 宏来丢弃,
:
\documentclass[12pt]{memoir}% http://ctan.org/pkg/memoir
\makeindex
\makeatletter
\newcommand{\gobblecomma}[1]{\@gobble{#1}\ignorespaces}
\makeatother
\begin{document}
Lorem ipsum
\index{entry1!subentry1}
\index{entry1!subentry2}
\index{entry1!subentry3@\gobblecomma|seealso{entry2}}
\printindex
\end{document}
运行后的索引文件makeindex
类似:
\begin{theindex}
\item entry1
\subitem subentry1, 1
\subitem subentry2, 1
\subitem \gobblecomma, \seealso{entry2}{1}
\end{theindex}
清楚地表明它会吞掉逗号,但也会删除任何后续空格(通过\ignorespaces
)。 的用途subentry3@\gobblecomma
是准确地将“逗号吞噬者”按字母顺序排列到subentry3
。
答案2
不幸的是,barbara beeton 的回答出于某种原因在“另见”前面加了一个逗号。唉,很容易将两个答案(barbara 的和 Werner 的)结合起来,用一个方便的命令就能得到想要的结果。
定义一次:
\newcommand{\gobblecomma}[1]{\ignorespaces}
\providecommand{\indexalso}[2]{%
\index{#1!zzzzz@\gobblecomma|seealso{#2}}}
使用:
\indexalso{<main heading>}{<see-also heading>}
例子:
\index{entry1!subentry1}
\index{entry1!subentry2}
\indexalso{entry1}{entry2}
将输出(根据需要):
entry1
~~~subentry1, 2
~~~subentry2, 3
~~~see also entry2
答案3
我认为最简单的方法是创建一个全新的命令:
\providecommand{\indexalso}[3]{%
\index{#1!zzzzz@\emph{\alsoname} {#2}}}
我使用了\providecommand
而不是\newcommand
因为这是包含在 ams 文档类中的候选,并且当提前知道这样的类更改时导致旧文件突然生成错误是不礼貌的。
\indexalso
用法如下:
\indexalso{<main heading>}{<see-also heading>}
确保zzzzz
这将被列在最后,除非作者有一个非常奇怪的二级条目。如果要使用多个“另请参阅”,则它们都应包含在单个条目中\indexalso
:
\indexalso{<main heading>}{<see-also heading; another see-also>}
我一直在写一些关于如何制作“干净”索引的技巧,包括我必须回答的有关 ams 出版物的所有内容;您的问题来得正是时候,因为这个问题仍然在“待办事项”列表中。
在咨询内部编辑人员和芝加哥手册后,我们确定,对于 ams 书籍来说,您要求的风格是最好的 - 这就是我们在索引文档中推荐的风格。当文档发布时,我会将其发布在 ams 网站上,并在此处添加链接。