![如何修复 enumitem 内联列表中的间距?](https://linux22.com/image/382574/%E5%A6%82%E4%BD%95%E4%BF%AE%E5%A4%8D%20enumitem%20%E5%86%85%E8%81%94%E5%88%97%E8%A1%A8%E4%B8%AD%E7%9A%84%E9%97%B4%E8%B7%9D%EF%BC%9F.png)
我在使用包中的内联列表时遇到了一些间距问题enumitem
。我知道示例中使用这种方式的排版不够优雅,但这只是为了演示这个问题。
如果我使用标准列表作为内联描述列表(1),那么标签和项目文本之间的空间似乎是可拉伸的,而处理完整个项目后就不会了。
我尝试使用手册中的示例来设置选项 (2),但变化不大。同样令人好奇的是 ttfamily 和 truetype 之间的间距很大。我不知道这是怎么回事。
我尝试设置不同的标签和项目分隔符,但出现了一个奇怪的可破坏空间,参见(3)。
我也尝试过使用非装箱模式,这有点像我所期望的 (4)。然而,我的问题是我期望的东西与手册中写的不同 (第 9 页):
附加键是
itemjoin*
,如果设置了,则用于代替itemjoin
最后一项之前的 。因此,before=\unskip{: }, itemjoin={{; }}, itemjoin*={{, and }}
在项目之间使用以下标点符号:
Blah blah:(a) 一;(b) 二;(c) 三,和 (d) 四。Blah blah
itemjoin
在垂直模式下会被忽略(即在非装箱模式下,在引号、显示列表等之后)。
在示例中,itemjoin={{, }}
并没有被忽略,并且我开始相信该手册中缺少星号。这是手册中的拼写错误吗?
在 (5) 中,我尝试模拟我所期望的内容。我知道这看起来很奇怪,但这是因为所选示例。实际上,标签会很短,后面的文本会长一点。但它确实展示了我想要的内容,即
- 描述紧接着,
afterlabel
并且不允许中断; - 之后允许打破
itemjoin
; - 空间都是可伸缩的
- 以最后一行向左对齐结束。
我必须如何设置内联列表的选项才能实现上述示例?
枚举 (6) 和逐项列举 (7) 版本也有一些奇怪的间距,但从视觉上看,小标签可能会缓解这个问题。不过,我期望它的行为与描述列表相同,但这实际上不是问题,比较一下 周围的空格1.
。
以下是相应的 MWE:
\documentclass[a5paper, twocolumn]{article}
\usepackage[inline]{enumitem}[2011/08/28]
\begin{document}
\section{Inline description list}
Testing a few inline lists with different options.
(1)\\
With the environment \texttt{description*} the list will be
set as a single paragraph.
For example:
\begin{description*}[font={\ttfamily}]
\item[bfseries] \textbf{bold};
\item[itshape] \textit{italics};
\item[ttfamily] \texttt{truetype}.
\end{description*}
(2)\\
Setting manual options (example from manual) results in weird spacing
\begin{description*}[font={\ttfamily}, before=\unskip{: }, itemjoin={{; }}, itemjoin*={{, and }}]
\item[bfseries] \textbf{bold}
\item[itshape] \textit{italics}
\item[ttfamily] \texttt{truetype}
\end{description*}
(3)\\
Trying a different label separator for the list:
\begin{description*}[font={\ttfamily}, itemjoin={{, }}, afterlabel={{:\nobreakspace}}, after={{.}}]
\item[bfseries] \textbf{bold}
\item[itshape] \textit{italics}
\item[ttfamily] \texttt{truetype}
\end{description*}
(4)\\
Trying a different label separator for the list, and unboxing:
\begin{description*}[mode=unboxed, font={\ttfamily}, itemjoin={{, }}, afterlabel={{:\nobreakspace}}, after={{.}}]
\item[bfseries] \textbf{bold}
\item[itshape] \textit{italics}
\item[ttfamily] \texttt{truetype}
\end{description*}
(5)\\
Trying manually:
\texttt{bfseries}:~\textbf{bold}, \texttt{itshape}:~\textit{italics}, \texttt{it}:~Do not use that one, \texttt{ttfamily}:~\texttt{truetype}.
(6)\\
For comparison, the list with the \texttt{enumerate*} environment looks quite okay:
\begin{enumerate*}
\item \textbf{bold};
\item \textit{italics};
\item \textit{it};
\item \texttt{truetype}.
\end{enumerate*}
(7)\\
For comparison, the list with the \texttt{itemize*} environment has also some weird spaces:
\begin{itemize*}
\item \textbf{bold};
\item \textit{italics};
\item \textit{it};
\item \texttt{truetype}.
\end{itemize*}
\end{document}
答案1
你对enumitem
手动的:如果您添加了itemjoin*={{, and }}
第四个示例,则文件中会出现以下内容.log
:
Package enumitem Warning: itemjoin* discarded in mode unboxed
如果不指定itemjoin*=<string>
,则不会生成任何警告消息。事实上,您引用的段落后面紧接着的一段指出
第 9 页: … [使用] 另一种“模式”,您可以使用 激活它
mode=unboxed
(默认为mode=boxes
)。使用它可以自由使用浮动,但错位的\item
s 不会被捕获并被itemjoin*
忽略……
但是,您的第四个示例运行良好,并且已经满足您的所有四个要求:
\documentclass[a5paper, twocolumn]{article}
\usepackage[inline]{enumitem}[2011/09/28]%[2011/08/28]
\begin{document}
\section{Inline description list}
Testing a few inline lists with different options.
(4)\\
Trying unboxing:
\begin{description*}[mode=unboxed, font={\ttfamily}, itemjoin={{, }}, afterlabel={{:\nobreakspace}}, after={{.}}]
\item[bfseries] \textbf{bold}
\item[itshape] \textit{italics}
\item[it] Do not use that one
\item[ttfamily] \texttt{typewriterfont}%\texttt{truetype}
\end{description*}
(5)\\
Trying manually:
\texttt{bfseries}:~\textbf{bold},
\texttt{itshape}:~\textit{italics},
\texttt{it}:~Do not use that one,
\texttt{ttfamily}:~\texttt{typewriterfont}.%\texttt{truetype}.
\end{document}