![使用 sloppypar 实现无连字符的嵌套列表](https://linux22.com/image/314925/%E4%BD%BF%E7%94%A8%20sloppypar%20%E5%AE%9E%E7%8E%B0%E6%97%A0%E8%BF%9E%E5%AD%97%E7%AC%A6%E7%9A%84%E5%B5%8C%E5%A5%97%E5%88%97%E8%A1%A8.png)
我使用(TeX Live 2012/W32TeX)XeTeX
。Version 3.1415926-2.4-0.9998
我想创建一个没有连字符的嵌套列表。我使用sloppypar
环境 withhyphenation
命令来关闭连字符。当与使用 enumerate 创建的嵌套编号列表一起使用时,这会产生问题。在下面的 MWE 中,外部列表中的第二项没有编号,而第二个内部列表中的第一项具有组合编号 2(a)。嵌套列表在没有 sloppypar 的情况下工作正常,如下面的第二部分所示。
\documentclass{article}
\usepackage{ragged2e}
\usepackage{polyglossia}
\begin{document}
\section{Nested list with sloppypar}
\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\end{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\end{enumerate}
\end{enumerate}
\section{Nested list without sloppypar}
\begin{enumerate}
\item Blah blah blah.
\begin{enumerate}
\item Blah blah blah.
\item Blah blah blah.
\end{enumerate}
\item Blah blah blah.
\begin{enumerate}
\item Blah blah blah.
\item Blah blah blah.
\end{enumerate}
\end{enumerate}
\end{document}
答案1
只需添加一个\par
或空白行即可离开嵌套enumerate
环境。
\documentclass{article}
\usepackage{ragged2e}
\usepackage{polyglossia}
\begin{document}
\section{Nested list with sloppypar}
\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\end{enumerate}\par % <----- ADDED PAR IS HERE
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\end{enumerate}
\end{enumerate}
\section{Nested list without sloppypar}
\begin{enumerate}
\item Blah blah blah.
\begin{enumerate}
\item Blah blah blah.
\item Blah blah blah.
\end{enumerate}
\item Blah blah blah.
\begin{enumerate}
\item Blah blah blah.
\item Blah blah blah.
\end{enumerate}
\end{enumerate}
\end{document}
正如我在下面的评论中告诉 OP 的那样,我无法明确回答为什么需要\par
。但原始 MWE 的症状表现为段落/组解释错误的问题。所以这是一个自然的初步猜测,在这种情况下,事实证明它足够了。
或者,可以将嵌套内容enumerate
包含在其自己的组中,如下所示:
\documentclass{article}
\usepackage{ragged2e}
\usepackage{polyglossia}
\begin{document}
\section{Nested list with sloppypar}
\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
{\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\end{enumerate}}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah blah.\end{sloppypar}
\end{enumerate}
\end{enumerate}
\end{document}
答案2
在列表环境中, 的操作\item
在段落开始时被推迟。 并\begin{sloppypar}
以 开头\par
,这会混淆此机制。
这是一个模拟所做事情的最小示例sloppypar
:\par
一开始是一些与问题无关的其他操作,\par
最后是一些其他操作。
\documentclass{article}
\newenvironment{foo}{\par}{\par}
\begin{document}
\begin{enumerate}
\item \begin{foo}x\end{foo}
\begin{enumerate}
\item \begin{foo}x\end{foo}
\end{enumerate}
\item \begin{foo}x\end{foo}
\begin{enumerate}
\item \begin{foo}x\end{foo}
\end{enumerate}
\end{enumerate}
\end{document}
如你所见,问题完全相同。
我不确定\justifying
您的文档是否需要,但我认为您应该定义一个包装器环境:
\documentclass{article}
\usepackage{polyglossia}
\usepackage{kantlipsum} % for mock text
\newenvironment{sloppyenumerate}
{\begin{enumerate}\sloppy\hyphenrules{nohyphenation}}
{\end{enumerate}}
\begin{document}
\begin{sloppyenumerate}
\item \kant[2]
\begin{enumerate}
\item \kant[3]
\end{enumerate}
\item \kant[4]
\begin{enumerate}
\item \kant[5]
\end{enumerate}
\end{sloppyenumerate}
\end{document}
如果您需要选择性地使用\sloppy
某些项目,请不要使用sloppypar
:
\newenvironment{sloppyitem}
{\sloppy\hyphenrules{nohyphenation}}
{\par}% <--- the \par here is fundamental
并使用
\item \begin{sloppyitem}text\end{sloppyitem}
答案3
虽然 Steven 的回答确实解决了您的问题,但您标记文档的方式并不理想。您可以使用以下方法大大简化一切:
\usepackage{etoolbox}
\AtBeginEnvironment{enumerate}{\sloppy\hyphenrules{nohyphenation}}
比较(并注释掉该\AtBeginEnvironment
行来查看差异):
\documentclass{article}
\usepackage[vmargin=1cm]{geometry}
\usepackage{ragged2e}
\usepackage{polyglossia}
\def\bb{I want to create a nested list withouthyphenation. Iamusingthesloppyparenvironmentwithhyphenationcommandtoturnoffhyphenation. This creates issues when used with a nested numbered list created using enumerate. In the MWE below, the second item in the outer list is not numbered, while the first item in the second inner list has the combined number 2(a). The nested list works fine without sloppypar as the second section below shows.}
\usepackage{etoolbox}
\begin{document}
\bb
\section{Nested list with sloppypar}
\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}\bb \end{sloppypar}
\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}\bb
blah blah.\end{sloppypar}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah
blah blah.\end{sloppypar}
\end{enumerate}\par
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah blah
blah.\end{sloppypar}
\begin{enumerate}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}Blah
blah blah.\end{sloppypar}
\item \begin{sloppypar}\justifying\hyphenrules{nohyphenation}\bb \end{sloppypar}
\end{enumerate}
\end{enumerate}
\section{Nested list without sloppypar}
\AtBeginEnvironment{enumerate}{\sloppy\hyphenrules{nohyphenation}}
\begin{enumerate}
\item \bb
\begin{enumerate}
\item \bb
\item Blah blah blah.
\end{enumerate}
\item Blah blah blah.
\begin{enumerate}
\item Blah blah blah.
\item \bb
\end{enumerate}
\end{enumerate}
\bb
\end{document}
该.tex
文件是很多在第二种情况下更容易阅读。