考虑 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}}