enumitem nextline 样式:嵌套项目不应从描述标签的行开始

enumitem nextline 样式:嵌套项目不应从描述标签的行开始

我使用enumitem描述样式nextline来模拟目录条目,代码如下:

\documentclass{article}
\usepackage{enumitem}

\newenvironment{DLdescription}[1][*]{%
  \newcommand{\DLitem}[2][]{%
    \item[##1\hfill\emph{##2}]
  }
  \begin{description}[style=nextline,leftmargin=#1]%
}{\end{description}}

\begin{document}

  \begin{DLdescription}
  \DLitem[dleft1]{dright1}
    blah blah
    \begin{itemize}
    \item nested item correctly starts on its own line
    \end{itemize}
      \DLitem[dleft2]{dright2}
    % nothing before itemize
    \begin{itemize}
    \item nested item shouldn't start on description label's line!
    \end{itemize}
  \end{DLdescription}

\end{document}

麻烦在于第二描述项以 : 开头itemize,嵌套项出现在同一行 :-(

代码示例的输出

在其他地方找到的解决方法建议将 a 附加\hfill到相关标签,在我的情况下,这将DLitem使用以下方法修补命令

\item[##1\hfill\emph{##2}]\hfill

但结果并不令人满意,因为在描述标签的行和第一个嵌套项之间添加了太多的垂直空间:

修补代码的输出

如何在没有任何额外垂直空间的情况下获得第二幅图像中的结果?

答案1

我认为你滥用了这种nextline风格。我建议你这样做:

\documentclass{article}
\usepackage{enumitem}

\newcommand{\DLitem}[2][]{%
 \item[#1]\hfill \emph{#2}\par}

\newenvironment{DLdescription}[1][*]
 {\begin{description}[leftmargin=#1]}
 {\end{description}}

\begin{document}

  \begin{DLdescription}
  \DLitem[dleft1]{dright1}
    blah blah
    \begin{itemize}
    \item nested item correctly starts on its own line
    \end{itemize}
      \DLitem[dleft2]{dright2}
    % nothing before itemize
    \begin{itemize}
    \item nested item shouldn't start on description label's line!
    \end{itemize}
  \end{DLdescription}

\end{document}

\parskip如果您希望第一行后的空间较少,您可以进行局部调整。

答案2

以下是有效的手动调整方法:

在此处输入图片描述

\documentclass{article}
\usepackage{enumitem}% http://ctan.org/pkg/enumitem

\newcommand{\DLitem}[2][]{%
  \item[#1\hfill\emph{#2}]
}
\newenvironment{DLdescription}[1][*]{%
  \begin{description}[style=nextline,leftmargin=#1]%
}{\end{description}}

\begin{document}

  \begin{DLdescription}
  \DLitem[dleft1]{dright1}
    blah blah
    \begin{itemize}
    \item nested item correctly starts on its own line
    \end{itemize}
      \DLitem[dleft2]{dright2}
    \hfill\\[\dimexpr-2\baselineskip-\topsep]
    \begin{itemize}
    \item nested item shouldn't start on description label's line!
    \end{itemize}
  \end{DLdescription}

\end{document}​

插入一个空白行\null\hfill,然后垂直跳过,相当于描述的开始一个额外的\baselineskip\\[\dimexpr-2\baselineskip-\topsep]

相关内容