在enumitem 手册,我找不到关于leftmargin
、itemindent
、labelsep
、labelwidth
和中感叹号和星号的用法区别的清晰解释labelindent
。
例如,设置labelsep=*
和labelsep=!
?
\documentclass{article}
\usepackage{enumitem}
\newcommand\litem[1]{\item{\bfseries#1.\space}}
\begin{document}
\begin{enumerate}[label=(\alph*),labelsep=!]
\litem{Term one} First term description.
\litem{Term two} Second term description.
\end{enumerate}
\end{document}
答案1
正如enumitem
leftmargin
文档中,列表中的水平间距由参数、itemindent
、和组成,labelsep
如下所示:labelwidth
labelindent
也就是说:
值服从关系
leftmargin = labelindent + labelwidth + labelsep - itemindent
标签的右边缘
\item
将缩进labelindent + labelwidth
。文本的第一行将
\item
缩进leftmargin + itemindent
。后续行将以 缩进
leftmargin
。
如您所见,有五个参数,但它们并非全部独立。给定其中任意四个,您就可以计算出第五个,这就是这些选项的!
和*
值的作用所在。
为什么要有这种冗余?因为在标准 LaTeX 中,该参数labelindent
并不存在;它由 引入enumitem
。该包的作者认为,能够直接设置列表标签的缩进可能会很有用,而不必手动计算其他值来实现所需的缩进。
默认情况下,新参数labelindent
总是根据其他参数计算得出。如果要直接设置labelindent
,则必须指定enumitem
应计算哪个参数。这就是该!
值的用途。
*
做同样的事情,但它也首先设置labelwidth
。这很有用,因为正确的标签的边缘缩进为,因此,如果标签的实际宽度为,则labelindent + labelwidth
标签的左边缘将仅缩进。尝试通过使用值测量标签的宽度来猜测最宽可能标签的宽度labelindent
labelwidth
enumitem
- 0如果
label
使用设置\arabic*
, - 八如果
label
使用设置\roman*
, - 米如果使用和
label
设置\alph*
- 大写版本也类似。
因此,如果你设置label=(\alph*)
,enumitem
将测量宽度(米)并设置labelwidth
为该值。您可以使用该widest
选项更改此行为。
请注意,这意味着labelwidth=!
和labelwidth=*
做完全相同的事情。
好的,让我们看一个例子。enumitem
承认这些值的行为可能会令人困惑,并提供\DrawEnumitemLabel
可视化当前值,我将在下面使用它。它
[...] 从上到下绘制 4 条规则,, ,
labelindent
(labelwidth
正则细,负则粗);用两条垂直规则标记。labelsep
itemindent
leftmargin
\documentclass{article}
\usepackage{enumitem}
\parindent=0pt
\newcommand*\printvalue[1]{\texttt{\string #1} : \the #1}
\begin{document}
% set some defaults:
\setlist{
label=(\alph*),
leftmargin=50pt,
itemindent=10pt,
labelsep=5pt,
labelwidth=25pt,
labelindent=10pt,
}
By default, my definition of \verb|labelindent| is just ignored and it is calculated from the other values:
\begin{enumerate}
\DrawEnumitemLabel
\item \printvalue\leftmargin
\item \printvalue\itemindent
\item \printvalue\labelsep
\item \printvalue\labelwidth
\item \printvalue\labelindent
\end{enumerate}
I can change that using the \verb|!| value.
For example, I can instead calculate \verb|labelsep| from the other values:
\begin{enumerate}[labelindent=10pt, labelsep=!]
\DrawEnumitemLabel
\item \printvalue\leftmargin
\item \printvalue\itemindent
\item \printvalue\labelsep
\item \printvalue\labelwidth
\item \printvalue\labelindent
\end{enumerate}
The \verb|*| value does exactly the same, only it also set the value of \verb|labelwidth| first.
It tries to guess the widest possible label (\textsl{0} for \verb|\arabic*|, \textsl{viii} for \verb|\roman*|, \textsl{m} for \verb|\alph*|):
\begin{enumerate}[labelindent=10pt, labelsep=*]
\DrawEnumitemLabel
\item \printvalue\leftmargin
\item \printvalue\itemindent
\item \printvalue\labelsep
\item \printvalue\labelwidth
\item \printvalue\labelindent
\end{enumerate}
\end{document}