Desired index result
I want an index using makeindex
to have entries like the following (where I've used ~~~ and ~~~~~~ to indicate indenting for subentries and sub subentries):
nothing, 1
~~~ nil, 1
~~~~~~ and zero, 1
~~~~~~ (see also null elements}
~~~ null, 1
~~~ See also zero elements
null elements, 1zero (see zero elements)
zero elements, 1
Note the following formatting requirements shown:
- A "See also …" for a main entry begins with an upper-case "S".
- A "(see also …)" for a subentry is indented below the subentry and enclosed in parens.
- A "(see …)" cross-reference is enclosed in parens.
- A "(see …)" cross-reference does not include a comma after the (sub)entry on its line.
- A "see" or "see also"/"See also" entry does not end with a page number.
Here's a screen shot of the printed index:
A working source file that produces the result
The following source file will accomplish that:
\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}
Simplification & improvement sought
Can this be simplified by suitable definitions that would avoid having to explicitly include the |gobbleone
in each "see only" and "see" entry? And it would even be better if I did not have to explicitly include the zzzzz@
sort key that puts the "see also" subentries after all others.
I would strongly prefer definitions written in LaTeX (using newcommand
) rather than at lower-level TeX (using \def
).
These related postings unfortunately do not seem to accomplish what I need:
Best Answer
SECOND EDIT
(I don't know what is the usual practice. I have left the initial answer and edit at the bottom and the new one here at the start).
To fullfill all the requirements, instead of manipulating the argument of
\index
, I have made three new commands with two arguments to take care of it. The first argument is the entry in the index and the second the see text. The commands are:The result is:
The complete code is:
OLD SECTION
To avoid the use of
|gobbleone
to get rid of the page numbers, you have to insert the commands themakeidx
way with|
and not theLaTeX
way with\
.To have these entries in the last place, you still will need
\gobbleone
to eliminate the comma.(edited to remove unwanted space)
An additional command
\lastentry
makes typing easier, but the\index
command must be renewed and then a\def
is required to have the content of\index
expanded.The complete code: (edited to remove unwanted space)