使用 sloppypar 实现无连字符的嵌套列表

使用 sloppypar 实现无连字符的嵌套列表

我使用(TeX Live 2012/W32TeX)XeTeXVersion 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文件是很多在第二种情况下更容易阅读。

无连字符的图像

相关内容