enumitem 中的多行标签:使列表内容与标签第一行垂直对齐

enumitem 中的多行标签:使列表内容与标签第一行垂直对齐

标题描述了我的目标,到目前为止的 MWE:

\documentclass{article}
\usepackage{enumitem, lipsum}

\begin{document}
\begin{description}[leftmargin=!,
                    align=right,
                    ]
\item[label 0] \lipsum[75]
\item[\begin{tabular}{c}
            label 1 1st line\\
            label 1 2nd line
        \end{tabular}] \lipsum[75]

\item[\smash{\begin{tabular}{c}
                 label 2 1st line\\
                 label 2 2nd line
             \end{tabular}}] \lipsum[75]
\end{description}

\end{document}

\smashtabular帮助我更接近目标,但列表内容的第一行仍然与标签的中点对齐(不是第一行):

在此处输入图片描述

如何将列表内容的第一行与标签的第一行对齐以实现以下效果?

            labe 0     { content of label 0 }

1st line of labe 1     { content of label 1; content of label 1;
2nd line of labe 1     content of label 1; content of label 1; c
                       ontent of label 1 }

理想情况下,标签和内容的垂直间距应该匹配,这也是我希望最终摆脱它的原因,tabular因为它在垂直和水平方向上增加了提取空间。

答案1

您可能喜欢以下不用于tabular形成物品标签的解决方案:

\documentclass{article}
\usepackage{enumitem}
\SetLabelAlign{right}{\strut\smash{\parbox[t]\labelwidth{\raggedleft #1}}} % <--
\usepackage{lipsum}

\begin{document}
\begin{description}[labelwidth=8em,
                    align=right,
                    leftmargin=!,
                    ]
\item[label 0] \lipsum[75]
\item[label 1 1st line\\                % <--
      label 1 2nd line]     \lipsum[75] % <--

\item[label 2 1st line\\
      label 2 2nd line]     \lipsum[11]
\end{description}

\end{document}

在此处输入图片描述

编辑:right仅当列表中的任何一个使用选项格式化时,才使用有意义和影响的 定义:

[labelwidth=8em, % <---
 align=right,
 leftmargin=!,   % <---
 ]

但是,你可以限制\SetLabelAlign到一些本地组:

\documentclass{article}
\usepackage{geometry}
\usepackage{enumitem}
\usepackage{lipsum}

\begin{document}
{ % <-- start of local group
\SetLabelAlign{right}{\strut\smash{\parbox[t]\labelwidth{\raggedleft #1}}} 
\begin{description}[labelwidth=8em,
                    align=right,
                    leftmargin=!,
                    ]
\item[label 0] \lipsum[75]
\item[label 1 1st line\\
      label 1 2nd line]     \lipsum[75]

\item[label 2 1st line\\
      label 2 2nd line]     \lipsum[66]
\end{description}
} % <-- end of local group
\begin{enumerate}
\item[1]    \lipsum[66]
\item[22]   \lipsum[66]
\item[333]  \lipsum[66]
\end{enumerate}

\begin{description}
\item[test] \lipsum[66]
\item[longer item label]    \lipsum[66]
\end{description}
\end{document}

在此处输入图片描述

答案2

解决方案如下stackengine

\documentclass{article}
\usepackage{enumitem, lipsum}
\usepackage[usestackEOL]{stackengine}

\begin{document}

\begin{description}[leftmargin=!,
                    align=right,
                    ]
\item[label 0] \lipsum[75]
\item[\smash{\Longunderstack{ label 1 1st line\\
            label 1 2nd line}}] \lipsum[75]

\item[\smash{\Longunderstack{
                 label 2 1st line\\
                 label 2 2nd line}}] \lipsum[75]
\end{description}

\end{document} 

在此处输入图片描述

相关内容