考虑以下示例,使用枚举项包裹。
\newlist{foolist}{itemize}{1}
\setlist[foolist]{label = \textbullet, labelindent = 1em, leftmargin = *, align = left}
...
\begin{foolist}
\item[Abc] Aute esse ut qui est id veniam qui consectetur aute sit quis reprehenderit.
\item[Def] Tempor qui ullamco anim nisi occaecat pariatur ullamco duis sit non occaecat exercitation qui.
\item[Ghi] Ullamco consequat velit fugiat quis.
\end{foolist}
这并不像人们预期的那样显示:
- 列表项的缩进每行都不一样;
- 悬挂缩进在某种程度上小于首行缩进。
标签宽度当然应该是任何标签的最大宽度的默认值。请注意,这里的标签缩进是正确的。
答案1
我认为您正在寻找的是widest
确定使用最广泛的标签的关键:
\begin{foolist}[widest={Abc}]
得出的结果是:
代码:
\documentclass{article}
\usepackage{enumitem}
\newlist{foolist}{itemize}{1}
\setlist[foolist]{
label = \textbullet,
labelindent = 1em,
leftmargin = *,
align = left,
}
\begin{document}
\begin{foolist}[widest={Abc}]
\item[Abc] Aute esse ut qui est id veniam qui consectetur aute sit quis reprehenderit.
\item[Def] Tempor qui ullamco anim nisi occaecat pariatur ullamco duis sit non occaecat exercitation qui.
\item[Ghi] Ullamco consequat velit fugiat quis.
\end{foolist}
\end{document}
答案2
据我理解您的问题,您想自动将labelwidth
某个列表的设置为该列表的最宽标签,该标签是通过设置的\item[<label>]
。
目前,这还没有在enumitem
包中实现。你实际上能要做的是检查的长度最后的标签并设置labelwidth
为此宽度。另一种方法是由@Peter Grill 提议,是您使用widest
选项明确设置长度,但这并不像您希望的那样自动。
解决此问题的可能方法已在这个问题。我想出了以下替代解决方案:
首先,我使用了description
环境,因为我认为这更适合您的需求。
然后,我重新定义了\item
命令,以便对于列表中的每个项目,代码现在检查当前标签是否比前一个标签宽(或者比第一个标签的 0pt 宽),如果是,则将内部长度(\maxlabeltempwidth
)设置为该值。
在列表的末尾,这个值被存储\setwidestlabel
在 .aux 文件中(感谢@egreg很好的答案)。最后,对于文档中的每个列表,.aux 文件都会存储一个具有最大标签宽度的值。
在列表设置中,最终使用该值(通过\getwidestlabel
)来设置labelwidth
。
\documentclass{article}
\usepackage{enumitem, calc}
\newlength{\maxlabeltempwidth}
\setlength{\maxlabeltempwidth}{0pt}
\let\descItem\item
\renewcommand\item[1][]{%
\descItem[#1]%
\setlength{\maxlabeltempwidth}{\maxof{\maxlabeltempwidth}{\widthof{\textbf{#1}}}}}
\makeatletter
\newcommand{\setwidestlabel}[2]{%
\immediate\write\@auxout{%
\string\global\string\@namedef{descwidestlabel\romannumeral#1}{\the#2}%
}
}
\makeatother
\newcommand{\getwidestlabel}[1]{%
\ifcsname descwidestlabel\romannumeral#1\endcsname
\csname descwidestlabel\romannumeral#1\endcsname
\else
0pt%
\fi
}
\newlist{foolist}{description}{1}
\setlist[foolist]{
after = \setwidestlabel{\EnumitemId}{\maxlabeltempwidth},
labelwidth = \getwidestlabel{\EnumitemId},
leftmargin = !
}
\begin{document}
\begin{foolist}
\item[Abc] Aute esse ut qui est id veniam qui consectetur aute sit quis reprehenderit.
\item[Def] Tempor qui ullamco anim nisi occaecat pariatur ullamco duis sit non occaecat exercitation qui.
\item[Ghi] Ullamco consequat velit fugiat quis.
\end{foolist}
\begin{foolist}
\item[Abcdefghi] Aute esse ut qui est id veniam qui consectetur aute sit quis reprehenderit.
\item[Def] Tempor qui ullamco anim nisi occaecat pariatur ullamco duis sit non occaecat exercitation qui.
\item[Ghi] Ullamco consequat velit fugiat quis.
\end{foolist}
\begin{foolist}
\item[Abc] Aute esse ut qui est id veniam qui consectetur aute sit quis reprehenderit.
\item[Def] Tempor qui ullamco anim nisi occaecat pariatur ullamco duis sit non occaecat exercitation qui.
\item[Ghi jkl] Ullamco consequat velit fugiat quis.
\end{foolist}
\end{document}
输出结果如下: