期望的索引结果

期望的索引结果

期望的索引结果

我想要一个索引来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}   

相关内容