描述标题中的换行符

描述标题中的换行符

在我的文档中,我有一个description环境。描述中的一个标题太长,一行都放不下,我想把它拆开。我知道这种样式不好,但我想不出任何缩短它的方法。我试过了,\\\newline没有用。我还能做什么?

我尝试使用 mdwlist 包。我在文档开头添加了以下内容:

\renewenvironment{description}{
  \begin{basedescript}{%
    \renewcommand{\makelabel}[1]{\bfseries##1}%
  }
}{%
  \desclabelstyle{\multilinelabel}

  \end{basedescript}%

}

但我得到的只是相同的结果。

我也尝试过这个,但没有任何效果:

\renewenvironment{description}{
  \desclabelstyle{\multilinelabel}
  \begin{basedescript}{%
    \renewcommand{\makelabel}[1]{\bfseries##1}%
  }
}{%
  \end{basedescript}%
}

我不能使用,\multilinelabel因为标签中的单词太长,因此我想使用\pushlabel。但是,即使在您给出的示例中,这也不起作用(可能它不知道如何换行)。有什么方法可以强制换行吗?

答案1

如果您的描述项目可能超过一行,我建议使用段落或小段落:

\documentclass{article}
\usepackage[english]{babel}
\usepackage{blindtext}

\newcommand*{\mtol}{This is some more text than fit at ony line but only some
  and not a lot}

\begin{document}
\subparagraph{\mtol} \blindtext
\subparagraph{Or with less text} \blindtext
\subparagraph{\mtol} \blindtext
\subparagraph{\mtol} \blindtext

\end{document}

这可能会导致

示例结果

这可能是您想要的,也可能不是。如果您不喜欢标签前的 par 缩进,只需将其替换\subparagraph\paragraph

或者您可以定义自己的多行描述环境,例如使用addmargin环境KOMA-Script 包 scrextend

\documentclass{article}
\usepackage[english]{babel}
\usepackage{blindtext}
\usepackage{scrextend}

\newcommand*{\mtol}{This is some more text than fit at ony line but only some
  and not a lot}

\newenvironment{mldescription}{%
  \begin{addmargin}[2em]{1em}
    \setlength{\parindent}{-1em}%
    \newcommand*{\mlitem}[1]{\par\textbf{##1}\quad}\indent
}{%
  \end{addmargin}
  \medskip
}

\begin{document}
\blindtext
\begin{mldescription}
\mlitem{\mtol} \blindtext
\mlitem{Or with less text} \blindtext
\mlitem{\mtol} \blindtext
\mlitem{\mtol} \blindtext
\end{mldescription}
\blindtext

\end{document}

这将导致

mldescription 列表的结果

addmargin这几乎就是您想要的。如果您想要更多或更少的缩进或更多或更少的悬挂文本,只需更改环境或的值即可\parindent

如果您希望项目之间有额外的垂直空间,您也可以将其添加到新环境的定义中:

\newenvironment{mldescription}{%
  \begin{addmargin}[2em]{1em}
    \setlength{\parindent}{-1em}%
    \newcommand*{\mlitem}[1]{\par\medskip% vertical space
      \textbf{##1}\quad}\indent
}{%
  \end{addmargin}
  \bigskip% changed to have more vertical space than between items
}

与垂直空间相同

如果您已经在使用 KOMA-Script 类,则无需加载包scrextend

答案2

包裹枚举项为此提供一种风格:

\documentclass{article}

\usepackage{enumitem} % load this one

\usepackage{lipsum}
\newcommand*{\longtext}{This is some text that runs off the margin
  when used in a description label}

\newenvironment{longdescription}
  {\begin{description}[style=unboxed]}
  {\end{description}}

% Just to get dummy text
\usepackage{lipsum}
\newcommand*{\longtext}{This is some text that runs off the margin
  when used in a description label}

\begin{document}
\lipsum[2]

\begin{longdescription}
\item[\longtext] \lipsum*[3]
\item[Normal label] \lipsum*[4]
\end{longdescription}

\lipsum[2]

\end{document}

在此处输入图片描述

答案3

在这种情况下,如果你需要多行文本,你可以使用\parbox,例如

\documentclass{article}
\begin{document}
\begin{description}
\item[\protect{\parbox[t]{1cm}{long\\label}}] text
\end{description}
\end{document}

带有多行标签的描述列表

t这里我使用了可选参数中的对齐参数来\parbox获得顶行的垂直对齐。

如果想进一步定制,请查看mdwlist包,它为描述列表标签提供了几种不同的样式,也为多行标签提供了样式。它还解决了多行标签与多行描述相结合的问题。

\documentclass{article}
\usepackage[english]{babel}
\usepackage{blindtext}
\usepackage{mdwlist}
\begin{document}
\begin{basedescript}{%
  \desclabelstyle{\multilinelabel}
  \desclabelwidth{2cm}}
\item[This is a pretty long text for a label] \blindtext
\item[more] text
\end{basedescript}
\end{document}

mdwlist 多行标签示例

答案4

如果您想采用 @Stefan Kittwitz 第一种方法使用 \parbox,您可以 \smash 它以避免换行(仅!)如果您的文本长于标签:

\documentclass{article}
\usepackage{blindtext}
\usepackage{enumitem}
\begin{document}
\setlist[description]{leftmargin=!,labelwidth=2.5cm}
\begin{description}
     \item[\protect{\smash{\parbox[t]{2cm}{This is a pretty long text for a label}}}] \blindtext
     \item[\protect{\smash{\parbox[t]{2cm}{This is a pretty long text for a label}}}] Lorem ipsum\\~\\~\\
     \item[\protect{\smash{\parbox[t]{2cm}{This is a pretty long text for a label}}}] \blindtext
\end{description}
\end{document}

enumitem 包用于自定义描述标签。另外,很抱歉回答这个问题,我的声誉不够高,无法发表评论 :)

相关内容