为了排版具有非常紧密的行距的列表,我通常tightlist
使用的环境定义自己memoir
的list
列表。
尽管我的定义(见下文)(1)确保所有垂直间距参数都为零,并且(2)使用环境Spacing
确保单倍行距(在 1.5 或更宽的间距环境中),但奇怪的是,在嵌套之后我得到了一个多余的空行tightlist
:
\documentclass{memoir}
\newenvironment{mytightlist}[3]{%
\begin{Spacing}{1}%
\begin{list}{#1}{%
\setlength{\topsep}{0pt}%
\setlength{\parskip}{0pt}%
\setlength{\parsep}{0pt}%
\setlength{\itemsep}{0pt}%
\setlength{\leftmargin}{#2}%
\setlength{\labelwidth}{#3}%
\setlength{\labelsep}{0.5em}%
}%
}%
{\end{list}\end{Spacing}}
\begin{document}
Text.
\begin{mytightlist}{\(\bullet\)}{1.5em}{0.5em}
\item Text.
\begin{mytightlist}{\(\circ\)}{1.5em}{0.5em}
\item Text.
\item Text.
\end{mytightlist}% there is an empty line here that shouldn't be there
\item Text.
\end{mytightlist}
Text.
\begin{mytightlist}{\(\bullet\)}{1.5em}{0.5em}
\item Text.
\begin{mytightlist}{\(\circ\)}{1.5em}{0.5em}
\item Text.
\item Text.
\end{mytightlist}\vspace{0pt}% this magically prevents the empty line from occurring
\item Text.
\end{mytightlist}
Text.
\end{document}
\vspace{0pt}
嵌套消除空行后发出tightlist
,这样就解决了问题,但为什么首先会发生这种情况,为什么这种解决方案有效?这种行为似乎是由Spacing
环境与list
环境的相互作用引起的。
答案1
Spacing
一开始不要使用。但是如果你要使用(你不应该),\begin{Spacing}
只在真正需要时才使用。
\documentclass{memoir}
\usepackage[a4paper,margin=2cm]{geometry} % just to fit the example in one page
\usepackage{lipsum}
\newif\iftightlist
\newenvironment{mytightlist}[3]{%
\iftightlist
\def\finishspacing{}%
\else
\begin{Spacing}{1}\def\finishspacing{\end{Spacing}}%
\fi
\tightlisttrue
\begin{list}{#1}{%
\setlength{\topsep}{0pt}%
\setlength{\parskip}{0pt}%
\setlength{\parsep}{0pt}%
\setlength{\itemsep}{0pt}%
\setlength{\leftmargin}{#2}%
\setlength{\labelwidth}{#3}%
\setlength{\labelsep}{0.5em}%
}%
}%
{\end{list}\finishspacing}
\begin{document}
\begin{Spacing}{1.5}
\lipsum*[2]
\begin{mytightlist}{\(\bullet\)}{1.5em}{0.5em}
\item \lipsum*[2]
\begin{mytightlist}{\(\circ\)}{1.5em}{0.5em}
\item \lipsum*[2]
\item \lipsum*[2]
\end{mytightlist}
\item \lipsum*[2]
\end{mytightlist}
\lipsum*[2]
\end{Spacing}
\end{document}