期望的索引结果
我想要一个索引来makeindex
包含如下条目(其中我使用 ~~~ 和 ~~~~~~ 来指示子条目和子子条目的缩进):
无,1
~~~ 零,1
~~~~~~ 和零,1
~~~~~~(也可以看看空元素}
~~~ null, 1
~~~也可以看看零元素
空元素, 1零 (看零元素)
零元素,1
请注意以下显示的格式要求:
- A ”也可以看看...”表示主条目以大写字母“年代“。
- A ”(也可以看看...)”的子条目在子条目下方缩进并用括号括起来。
- A ”(看...)”交叉引用括在括号中。
- A ”(看...)”交叉引用不是在行中的(子)条目后面包含一个逗号。
- A ”看“ 或者 ”也可以看看“/”也可以看看“条目确实不是以页码结尾。
产生结果的工作源文件
下面的源文件将实现这个目的:
\documentclass{book}
\usepackage{makeidx}
\newcommand\gobbleone[1]{}
\newcommand*{\seeonly}[2]{\ (\emph{\seename} #1)}
\newcommand*{\also}[2]{(\emph{\alsoname} #1)}
\newcommand{\Also}[2]{\emph{See also} #1}
\makeindex
\begin{document}
This is a short book about zero. Therefore, it's also about nothing.
Which means null (or nil).
\index{nothing}
\index{nothing!nil}
\index{nothing!nil!and zero} % added for clarity
\index{nothing!nil!zzzzz@\also{null elements}|gobbleone}
\index{nothing!null}
\index{nothing!zzzzz@\Also{zero elements}|gobbleone}
\index{null elements}
\index{zero \seeonly{zero elements}|gobbleone}
\index{zero elements}
\printindex
\end{document}
寻求简化和改进
能否通过适当的定义来简化这一过程,从而避免必须明确地将|gobbleone
“仅查看”和“查看”条目包括进去?如果我不必明确地包含将“另请参阅”子条目放在所有其他条目之后的排序键,那就更好了zzzzz@
。
我强烈倾向于用 LaTeX(使用newcommand
)而不是低级 TeX(使用\def
)编写的定义。
不幸的是,这些相关的帖子似乎并没有满足我的需要:
答案1
第二次编辑
(我不知道通常的做法是什么。我把最初的答案和编辑留在了底部,把新的答案留在了这里的开始处)。
为了满足所有要求,我没有操纵 的参数\index
,而是创建了三个带有两个参数的新命令来处理它。第一个参数是索引中的条目,第二个参数是看文本。命令如下:
\seeonlyindex{<index entry>}{<see text>}
\alsoindex{<index entry>}{<see text>}
\Alsoindex{<index entry>}{<see text>}
结果是:
完整代码如下:
\documentclass{book}
\usepackage{makeidx}
\newcommand\gobbleone[1]{}
\newcommand{\seeonly}[2]{\ (\emph{\seename} #1)}
\newcommand{\also}[2]{\unskip(\emph{\alsoname} #1)}
\newcommand{\Also}[2]{\unskip\emph{See also} #1}
\let\oldindex\index
\renewcommand{\index}[1]{\def\exptoindex{#1}\expandafter\oldindex\expandafter{\exptoindex}}
\newcommand{\seeonlyindex}[2]{\index{#1@#1\protect\gobbleone|seeonly{#2}}}
\newcommand{\alsoindex}[2]{\index{#1!zzzz@\protect\gobbleone|also{#2}}}
\newcommand{\Alsoindex}[2]{\index{#1!zzzz@\protect\gobbleone|Also{#2}}}
\makeindex
\begin{document}
This is a short book about zero. Therefore, it's also about nothing.
Which means null (or nil).
\index{nothing}
\index{nothing!nil}
\index{nothing!nil!and zero}
\alsoindex{nothing!nil}{null elements}
\index{nothing!null}
\Alsoindex{nothing}{zero elements}
\index{null elements}
\seeonlyindex{zero}{zero elements}
\index{zero elements}
\printindex
\end{document}
旧区
为了避免使用 来|gobbleone
删除页码,您必须按照makeidx
的方式插入命令|
,而不是 的LaTeX
方式\
。
为了将这些条目放在最后,您仍然需要\gobbleone
删除逗号。
\index{nothing!nil!zzzz@\gobbleone|also{null elements}}
附加命令\lastentry
使打字更容易,但\index
必须更新命令然后才\def
需要\index
扩展内容。
完整代码:(编辑以删除不需要的空间)
\documentclass{book}
\usepackage{makeidx}
\newcommand\gobbleone[1]{}
\newcommand{\seeonly}[2]{\ (\emph{\seename} #1)}
\newcommand{\also}[2]{\unskip(\emph{\alsoname} #1)}
\newcommand{\Also}[2]{\unskip\emph{See also} #1}
\makeindex
\begin{document}
This is a short book about zero. Therefore, it's also about nothing.
Which means null (or nil).
\let\oldindex\index
\renewcommand{\index}[1]{\def\exptoindex{#1}\expandafter\oldindex\expandafter{\exptoindex}}
\newcommand{\lastentry}{!zzzz@\protect\gobbleone}
\index{nothing}
\index{nothing!nil}
%\index{nothing!nil!zzzz@\gobbleone|also{null elements}}
\index{nothing!nil\lastentry|also{null elements}}
\index{nothing!null}
%\index{nothing!zzzz@\gobbleone|Also{zero elements}}
\index{nothing\lastentry|Also{zero elements}}
\index{null elements}
\index{zero|seeonly{zero elements}}
\index{zero elements}
\printindex
\end{document}