我正在尝试为某些编号列表创建样式,这些列表的格式为普通段落;即,在标签前缩进一个段落,而每个项目的所有后续行均不缩进。这符合《芝加哥格式手册》对段落样式中垂直列表的建议(第 6.128 节):
当编号列表中的项目由很长的句子或几句话组成,并且列表不需要印刷突出时,可以将项目设置为常规文本样式的编号段落,只有第一行缩进,并像普通散文一样加标点。
我使用该enumitem
软件包来处理 (1) 样式数字和其他内容。在查看了手册中与列表相关的宽度的出色细分memoir
(尤其是图 8.2)后,我让它正常工作了,但只需更改我认为实际上正确的内容即可。(回忆录手册作为普通 LaTeX 的参考资料,真是令人惊讶!)
我认为应该做的是:
\begin{enumerate}[label=(\arabic*),leftmargin=0pt,itemindent=\dimexpr\parindent+\labelwidth+\labelsep,listparindent=\parindent]
(参见其他问题供使用\dimexpr
。)
也就是说,左边距为零,然后设置\itemindent
(项目第一行缩进),使其代表段落缩进加上标签及其分隔符的空间。
但是,这实际上为前几行增加了太多空间。如果我去掉sum\labelsep
中的itemindent
,它就可以正常工作(或者至少看起来对齐正确)。
\begin{enumerate}[label=(\arabic*),leftmargin=0pt,itemindent=\dimexpr\parindent+\labelwidth,listparindent=\parindent]
enumitem
有人能解释一下这是怎么回事吗?我怀疑这与内部使用方式有关labelwidth
...另外,如果您认为这不是对芝加哥措辞的正确解释,请告诉我!
编辑:如果您想要完整的 LaTeX 文档来查看该问题,这里有一个我之前准备的文档(Blue Peter 风格):
\documentclass[11pt,a4paper,twoside,notitlepage]{article}
\usepackage{enumitem}
\begin{document}
\section{Enumerate Layout Tests}
First \emph{with} use of {\textbackslash}labelsep in the itemindent sum:
\begin{enumerate}[label=(\arabic*),leftmargin=0pt,itemindent=\dimexpr\parindent+\labelwidth+\labelsep,listparindent=\parindent]
\item My first long long long
long long long long long
long long long long long
long long long long long
long long long long long
long long long long long
long long long long long item.
With a second paragraph!
\item My second long long long
long long long long long
long long long long long
long long long long long
long long long long long
long long long long long
long long long long long item.
\end{enumerate}
And a second paragraph to show the standard paragraph indent position. But with lots of text
text text text text text
text text text text text
text text text text text
text text text text text
text text text text text
to check multi-line paragraphs.
OK, now \emph{without} use of {\textbackslash}labelsep in the itemindent sum:
\begin{enumerate}[label=(\arabic*),leftmargin=0pt,itemindent=\dimexpr\parindent+\labelwidth,listparindent=\parindent]
\item My first long long long
long long long long long
long long long long long
long long long long long
long long long long long
long long long long long
long long long long long item.
With a second paragraph!
\item My second long long long
long long long long long
long long long long long
long long long long long
long long long long long
long long long long long
long long long long long item.
\end{enumerate}
\end{document}
答案1
如果您正在使用(或能够使用)该enumitem
软件包的 V3+(即使用参数wide
),lockstep 的答案是正确的。他还在评论中强调了我的问题的根本原因。不过,我的问题的正确答案实际上是我之前尝试的 V3 的解决方案,我自己已经解决了。(非常感谢 lockstep 的指点。)
我绘制了下面的图像来帮助直观地了解长度的微妙之处,其中\labelsep
“独立于” \itemindent
。enumitem
手册(甚至是 V2.2 版本)确实讨论了这一点。
(当然长度可以是负数,所以这不是完整的故事。)
由于一个长度对另一个长度的依赖,解决方案变得复杂。在 V3 中,enumitem
您可以通过设置依赖长度(使用语法\<length>=!
)来控制这一点;请参阅手册。为了实现与wide
V2.2 中的选项相同的效果,我重用了其基础设置(手册中有说明),但手动计算了依赖长度。我们最终得到以下结果:
\begin{enumerate}[label=(\arabic*),align=left,leftmargin=0pt,labelindent=\parindent,%
labelwidth=0pt,labelsep=1.8em,listparindent=\parindent,%
itemindent=\dimexpr\labelindent+\labelwidth+\labelsep-\leftmargin]
请注意我手动设置的轻微改动\labelsep
;1.8em 看起来几乎与“正常”应用的分隔完全匹配。
为了以宏样式使用它,我使用了environ
包,因为普通宏似乎不可能针对环境的参数\newcommand
进行扩展。(如果这enumerate
是使用普通宏即可。
% Allow environments to be defined that have their contents inserted into
% another environment (within a macro).
\usepackage{environ}
\NewEnviron{parStyleList}{
\begin{enumerate}[label=(\arabic*),align=left,leftmargin=0pt,labelindent=\parindent,%
labelwidth=0pt,labelsep=1.8em,listparindent=\parindent,%
itemindent=\dimexpr\labelindent+\labelwidth+\labelsep-\leftmargin]%
\BODY\end{enumerate}}
然后使用如下方式:
\begin{parStyleList}
\item Blah
\item Blah
\end{parStyleList}
答案2
从版本 3 开始,enumitem
您可以简单地使用该wide
选项来创建类似于普通段落的列表。有关详细信息,请参阅手册第 3.9 节。
\documentclass{article}
\usepackage{enumitem}
\setlist[enumerate]{label=(\arabic*),wide,nosep}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{enumerate}
\item \lipsum[1-2]
\end{enumerate}
\end{document}