当我创建索引时,我只在不同的字符(b,s,t)之间获得最佳垂直间距。
\usepackage{makeidx}\makeindex
\index{book}
\index{summer!sun}
\index{summer!heat}
\index{sound}
\index{tower}
因为我只有几个索引条目,所以 summer 和 sound 之间的垂直间距(以相同的字符开头)应该与不同的字母相同,例如(book 和 summer 或 sound 和 tower:一个 1em 的空白行)。
我尝试在互联网和软件包文档中寻找解决方案,但没有成功。
使用 makeidx 可以实现这个吗?
答案1
您可以重新定义\@idxitem
为在其前面留出垂直空间,而 while\indexspace
不执行任何操作。也\subitem
需要重新定义,否则它也会添加垂直空间。
为了将第一个条目与标题分开,\vspace{12pt}
添加了一条指令\theindex
,并对其进行了修改。
% arara: pdflatex
% arara: makeindex
% arara: pdflatex
\documentclass{article}
\usepackage{etoolbox}
\usepackage{makeidx}\makeindex
\makeatletter
\def\@idxitem{\par\addvspace{10\p@ \@plus 5\p@ \@minus 3\p@}\hangindent 40\p@}
\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}
\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}
\def\indexspace{}
\patchcmd\theindex{\indexname}{\indexname\vspace{12pt}}{}{}
\makeatother
\begin{document}
x
\index{book}
\index{summer!sun}
\index{summer!heat}
\index{summer!heat!sweat}
\index{sound}
\index{tower}
\count255=0
\loop\ifnum\count255<40
\advance\count255 1
\expandafter\index\expandafter{\romannumeral\count255}
\repeat
\printindex
\end{document}
我使用指令arara
来简化编译;\loop
只需填写一些索引条目,以便我们到达第二列。
如果我将上面的代码改为
\makeatletter
\def\@idxitem{\par\addvspace{5\p@ \@plus 2.5\p@ \@minus 1.5\p@}\hangindent 40\p@}
\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}
\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}
\renewcommand\indexspace{\par\addvspace{10\p@ \@plus 5\p@ \@minus 3\p@}}
\patchcmd\theindex{\indexname}{\indexname\vspace{12pt}}{}{}
\makeatother
那么不同字母之间的间距将是同一字母开头的条目之间间距的两倍。