当顶部条目向右延伸太远时,连续索引条目之间会出现一个空白行

当顶部条目向右延伸太远时,连续索引条目之间会出现一个空白行

考虑 MWE

\documentclass{book}
\usepackage{imakeidx}
\let\cleardoublepage\clearpage
\makeindex
\usepackage{idxlayout}

\newcommand{\beforeheadspace}{.7ex}% <<<<<<<<<<<<<<<<<
\newcommand{\beforesubheadspace}{.4ex}% <<<<<<<<<<<<<<<<<

\renewcommand\subitem{\vspace*{\beforeheadspace}\par\hangindent 40pt \hspace*{20pt}} % added <<<<<
\renewcommand\subsubitem{\vspace*{\beforesubheadspace}\par\hangindent 40pt \hspace*{30pt}} % added <<<<<

\begin{document}
\large
    
Some words.\index{HEADING@\textbf{HEADING}!1@ \textbf{\color{red}{Subheading}}! This sentence is the first entry.}
\index{HEADING@\textbf{HEADING}!2@ \textbf{\color{red}{Subheading}}! This sentence of anoher set of words -- illustrates the effect.}
\index{HEADING@\textbf{HEADING}!3@ \textbf{\color{red}{Subheading}}! These words comprise the third entry.}
               
\idxlayout{columns=1}
\printindex
\end{document}

生成索引:

在此处输入图片描述

在代码中,我在副标题和条目之间添加了一些额外的垂直空间,如下所示:

\newcommand{\beforeheadspace}{.7ex}% <<<<<<<<<<<<<<<<<
\newcommand{\beforesubheadspace}{.4ex}% <<<<<<<<<<<<<<<<<

\renewcommand\subitem{\vspace*{\beforeheadspace}\par\hangindent 40pt \hspace*{20pt}} % added <<<<<
\renewcommand\subsubitem{\vspace*{\beforesubheadspace}\par\hangindent 40pt \hspace*{30pt}} % added <<<<<

但是,这似乎导致了问题,因为当我删除这些行并运行代码时,不需要的空白行就会消失。

问题:如何在副标题和条目之间添加上述额外的垂直空间,同时避免当条目延伸到右边太远时出现偶尔的空白行。

评论:newcommand当我不包括和代码时,我从未记得遇到过空行问题renewcommand——这样的索引条目要么停留在一行,要么转到下一行,至少显示页码。

谢谢。

答案1

\par您所观察到的是在开始新段落之前,长行末尾有一些空白内容,这些空白内容会换行到下一行(导致出现明显的空行) 。

您可以\vspace*切换\par

\renewcommand\subitem{\par\vspace*{\beforeheadspace}\hangindent 40pt \hspace*{20pt}}

或者您可以自己通过以下方式删除可选的尾随内容\unskip

\renewcommand\subitem{\unskip\vspace*{\beforeheadspace}\par\hangindent 40pt \hspace*{20pt}}

相关内容