我仍然在苦苦挣扎enumitem
。我完全不理解水平间距参数。我确实读过文档,也看过许多问题的答案,但尽管如此,我还是不明白!我完全不知道应该做什么labelindent=*
或labelindent=!
应该做什么。有人能简单解释一下这五个参数是什么,以及这些选项有什么作用*
吗!
?
具体来说,我希望此处列表的第二行堆叠在第一行下方,而不是从左侧稍微偏一点的地方开始。这是我尝试这样做的,但如您所见,它不起作用。(顺便说一句,我明确设置了,因为在本文档中,labelindent=0pt
它已全局设置为正常使用。)\parindent
\documentclass[12pt, a4paper, oneside, fleqn]{report}
\usepackage{enumitem}
\setlist[description]{leftmargin=\parindent,labelindent=\parindent,itemsep=1pt,parsep=0pt,topsep=0pt}
\begin{document}
\chapter*{Symbols list}
\begin{description}[labelindent=0pt,labelwidth=0.7cm,leftmargin=0.7cm]
%
\item[x] Text text text text more words. Here is a full sentence to use up some space. And yet another sentence. blah blah blah
\item[y] Text text text text more words. Here is a full sentence to use up some space. And yet another sentence. blah blah blah
\item[z] Text text text text more words. Here is a full sentence to use up some space. And yet another sentence. blah blah blah
\end{description}
\end{document}
更新
我尝试了@Bernard 在他的回答中提出的解决方案,但对我来说不起作用。我正在更新我的代码,因为我的标签文本相当宽(我最初没有包括它,因为我觉得我的整个论文将在我提交之前在 tex.se 上发布 ;-)。
这是 Bernard 的建议,将labelwidth
扩展到 2.1 厘米以适应宽文本,labelindent=0pt
这是我想要的设置:
\documentclass[12pt, a4paper, oneside, fleqn]{report}
\usepackage{enumitem}
\setlist[description]{leftmargin=\parindent,labelindent=\parindent,itemsep=1pt,parsep=0pt,topsep=0pt}
\usepackage[showframe, top=2.5cm, left=3.5cm, bottom=2.5cm, right=2.5cm, includehead]{geometry}
\geometry{headheight=28pt, headsep=18pt}
\begin{document}
\chapter*{Symbols list}
\begin{description}[labelindent=0em ,labelwidth=2.1cm, labelsep*=1em, leftmargin =!, style = standard]%
\item[$\mathbf{H}$] Forward model Jacobian matrix
\item[$\mathbf{MoistCov}$] Background error covariance matrix calculated from an ensemble of forecast states and using a new moisture control variable designed to eliminate increments in the stratosphere.
\end{description}
\end{document}
它看起来是这样的:
除此之外,当我\setlist
在开头注释掉命令时,会发生以下情况,这很奇怪,因为显然存在一些交互,尽管我不知道具体是什么,因为看起来我应该覆盖水平设置。看起来leftmargin=!
不是leftmargin
从其他设置计算的:
答案1
Enumitem
引入了一个新的非常有用的长度,labelsep*
,这样labelsep* + itemindent = labelsep(参见文档的§3.3)。设置labelindent + labelwidth + labelsep* = leftmargin
可以满足您的需要,同时允许标签文本比默认值更长。如果style=standard
,较宽的标签会更改列表的左边距,而使用style=sameline
,它可以超出左边距:
\documentclass[12pt, a4paper, oneside, fleqn]{report}
\usepackage[showframe, nomarginpar]{geometry}
\usepackage{enumitem}
\begin{document}
\chapter*{Symbols list}
\begin{description}[labelindent=1em ,labelwidth=1.3cm, labelsep*=1em, leftmargin =!, style = standard]%
\item[x text]Text text text text more words. Here is a full sentence to use up some space. And yet another sentence. blah blah blah
\item[y] Another text text text text more words. Here is a full sentence to use up some space. And yet another sentence. blah blah blah
\item[z] Text text text text more words. Here is a full sentence to use up some space. And yet another sentence. blah blah blah
\end{description}
\begin{description}[labelindent=1em ,labelwidth=1.2cm, labelsep*=1em, leftmargin =! , itemindent = 0pt, style = sameline]
\item[x text]Text text text text more words. Here is a full sentence to use up some space. And yet another sentence. blah blah blah
\item[y] Another text text text text more words. Here is a full sentence to use up some space. And yet another sentence. blah blah blah
\item[z] Text text text text more words. Here is a full sentence to use up some space. And yet another sentence. blah blah blah
\end{description}
\end{document}
为了更详细地解释发生了什么,标签从标签缩进处开始,标签行后面的行的开头是左边距,等于标签缩进 + 标签宽度 + 标签间隔*。设置前 3 个值,然后 leftmargin=! 使左边距从前三个值计算出来,如所示。
它的工作方式与枚举和逐项操作相同,只是在这些情况下标签对齐方式为right
,因此如果标签宽度太小,标签可以进入(页面)左边距。它的行为类似于\llap{label}
。
让我解释一下为什么你的代码不起作用:设置键的顺序很重要。style=standard
最后设置时,你用标准样式中定义的值覆盖了以前的值——就像setlist{description}{…}
序言中的值可以被描述环境中的实际可选参数覆盖一样。如果你将代码更改为以下内容,它就会按你想要的方式工作:
\documentclass[12pt, a4paper, oneside, fleqn]{report}
\usepackage[utf8]{inputenc}
\usepackage{enumitem}
\usepackage[showframe, top=2.5cm, left=3.5cm, bottom=2.5cm, right=2.5cm, includehead]{geometry}
\geometry{headheight=28pt, headsep=18pt}
\begin{document}
\chapter*{Symbols list}
\begin{description}[style =standard, labelindent=0em , labelwidth=2cm, labelsep*=1em, leftmargin =!]%
\item[$\mathbf{H}$] Forward model Jacobian matrix
\item[$\mathbf{MoistCov}$] Background error covariance matrix calculated from an ensemble of forecast states and using a new moisture control variable designed to eliminate increments in the stratosphere.
\end{description}
\end{document}
键leftmargin=!
表示左边距是根据 § 3.3 中描述的其他参数计算得出的,即
leftmargin=labelindent + labelwidth + labelsep*
,这些参数都已选定。请注意,对于几乎相同的键,只有删除leftmargin=!
会产生不同的结果,因为必须有一个预定义的 leftmargin 值不是覆盖:
写为parameterkey=! 意味着此参数是根据其他参数计算的,无论您是明确设置了它们,还是由环境、样式和 & 设置。据我所知,parameterkey=* 意味着与附加功能相同,该功能labelwidth
设置为常规值(例如,对于罗马样式枚举,设置为 viii)。我认为它对枚举环境有意义,尽管从文档中我看不太清楚。
答案2
\documentclass{article}
\usepackage{enumitem}
\usepackage{layouts}
\begin{document}
\listdiagram
\clearpage
\begin{enumerate}
\item The figure illustrates the layout of an \texttt{enumerate} list.
\currentlist
\listdesign
\end{enumerate}
\end{document}
答案3
你可以从这个问题中看到如何用 tikzmark 绘制这些线条该方案展示了枚举环境中不同的水平长度
答案4
我找到了下面的图表,来自§8.16list
的LaTeX2e 非官方参考手册(2018 年 10 月)非常有帮助:
在哪里:
h0
:\labelwidth
h1
:\labelsep
h2
:\listparindent
h3
:\leftmargin
h4
:\itemindent
h5
:\rightmargin
关键的等式是, 的括号右边缘h1
与 的括号右边缘位于相同的水平位置h4
,这意味着标签框的左边缘位于:
h3+h4-(h0+h1)