如何避免默认枚举/逐项列举之前出现分页符?

如何避免默认枚举/逐项列举之前出现分页符?

基本相同这个问题,只是我不想要记住到处写\mynobreakpar(或做其他任何事情)。

如何将其设置为所有 itemize/enumerate/etc. 环境的默认选项?

答案1

我不知道这是否有点过头了,但有一种解决方法是使用etoolbox包。我擅自从您的链接复制了 Ulrike Fischer 的宏。

\documentclass{article}
\makeatletter 
\newcommand\mynobreakpar{\par\nobreak\@afterheading} 
\makeatother

\usepackage{etoolbox}
\BeforeBeginEnvironment{itemize}{
\mynobreakpar
}
\usepackage{lipsum}
\begin{document}
    Some text
    \begin{itemize}
        \item Item 1
        \item Item 2
        \item Item 3
    \end{itemize}
    \lipsum[1-4]
    Here is an intervening paragraph. Does this answer your needs? Because the quick brown fox jumps over the head of the lazy dog. And the quick brown fox jumps over the head of the lazy dog.
    \begin{itemize}
    \item Item 1
    \item Item 2
    \item Item 3
    \end{itemize}
\end{document}

答案2

这是另一种解决方案。我将创建自己的版本,以适应您希望此功能适用的环境:

\makeatletter 
\newcommand\mynobreakpar{\par\nobreak\@afterheading} 
\makeatother
\newenvironment{myitemize}{\mynobreakpar\begin{itemize}}{\end{itemize}}

答案3

我不明白为什么要在列表之前添加一个新段落。实际上,似乎您需要考虑到的影响\par才能得到您想要的。

只有一种情况我不喜欢列表前的分页符。此外,我不喜欢列表标签不对齐。这导致了以下情况。

\makeatletter
\newcommand{\nolisttopbreak}{\vspace{\topsep}\nobreak\@afterheading}
\makeatother

\newenvironment{listproof}[1][\proofname]{\begin{proof}[#1]\mbox{}\nolisttopbreak}{\end{proof}}

正如您所见,任何地方都没有任何段落分隔符。

\@afterheading可能只是 a 所\begin{proof}生成的,因此第一个列表项在命令之后立即开始,\proofname中间没有任何换行符或垂直空格。

答案4

使用我自己的答案在提问者提到的问题中,你可以重新定义物品宏使其适用于列表环境。它绝对透明,您甚至不必使用自己的环境。

\let\nativeitem\item
\renewcommand{\item}{
    \begin{samepage} % prevent page-break before list enviroment
    \nativeitem\ % character needed after \item
    \end{samepage}\pagebreak[2] % page-break opportunity after (and only after) every item
}

相关内容