![enumitem 和 \raggedright 的问题](https://linux22.com/image/265172/enumitem%20%E5%92%8C%20%5Craggedright%20%E7%9A%84%E9%97%AE%E9%A2%98.png)
enumerate
我希望列表( 、itemize
和)中的项目description
正确排列。因此我使用enumitem
包来简化操作
\usepackage{enumitem}
\setlist[enumerate]{before = \raggedright}% In fact I use \RaggedRight from ragged2e package, but it doesn't matter (I think)
但后来我发现一个问题:如果枚举在另一个段落中,它就可以正常工作;但如果它在同一个段落中,它\raggedright
也适用于该段落。
\documentclass{scrartcl}
\usepackage{enumitem}
\setlist[enumerate]{before=\raggedright}
\begin{document}
% THIS WORKS
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\begin{enumerate}
\item Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
\item Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\end{enumerate}
% THIS DOESN'T
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\begin{enumerate}
\item Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
\item Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\end{enumerate}
\end{document}
我该如何解决这个问题?这是一个错误吗?
编辑:
读完@egreg的回答后,我仍然不太满意,因为如果我编译这个,我会得到两个不同的间距
\documentclass{scrartcl}
\usepackage{enumitem}
%\setlist[enumerate]{before=\csname par\endcsname\raggedright}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
\begin{enumerate}\raggedright
\item Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
\end{enumerate}
\end{document}
和这个
\documentclass{scrartcl}
\usepackage{enumitem}
\setlist[enumerate]{before=\csname par\endcsname\raggedright}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
\begin{enumerate}%\raggedright
\item Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
\end{enumerate}
\end{document}
而且我不完全相信第二个(egreg 的)是正确的(空间更大)。
答案1
这里介绍一种解决问题的方法,这是由于第二种情况在\begin{itemize}
执行时并没有结束前一段,所以\raggedright
代码会影响它:
\setlist[itemize]{before=\csname par\endcsname\raggedright,
partopsep=0pt}
这样,我们在开始itemize
列表之前就结束了段落。
\csname par\endcsname
技巧是避免出现虚假的错误信息。
替代方法。无需before=\raggedright
设置,但
\usepackage{etoolbox}
\AtBeginEnvironment{itemize}{\preto\item{\raggedright}}
请注意,此设置将被嵌套到itemize
环境的所有列表继承。