如何设置两个具有相同字符的索引条目之间的空格

如何设置两个具有相同字符的索引条目之间的空格

当我创建索引时,我只在不同的字符(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

那么不同字母之间的间距将是同一字母开头的条目之间间距的两倍。

在此处输入图片描述

相关内容