如果与 memoir 的 Spacing 环境(用于单倍行距)一起使用,则在 memoir 的列表环境中会出现多余的空行(用于非常紧密的列表)

如果与 memoir 的 Spacing 环境(用于单倍行距)一起使用,则在 memoir 的列表环境中会出现多余的空行(用于非常紧密的列表)

为了排版具有非常紧密的行距的列表,我通常tightlist使用的环境定义自己memoirlist列表。

尽管我的定义(见下文)(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}

在此处输入图片描述

相关内容