如果元素不适合当前页面的其余部分,则将其放在新页面上

如果元素不适合当前页面的其余部分,则将其放在新页面上

编辑我的 google-fu 显然低于标准,这里有一个简单的解决方案:如果整个部分不适合当前页面,则部分应自动开始新页面

如果整个部分不适合页面的剩余部分,我想强制每个部分从新的页面开始。

我曾尝试使用迷你页面,但当文本超出页面可用空间时,它们就会失败。(我希望仅当这些部分是该页面上的唯一内容时,才允许它们溢出到另一个页面)。

这也不起作用:

\begin{samepage}
\section{Some title}
\lipsum[1-5]
\end{samepage}
\begin{samepage}
\section{Some title}
\lipsum[1-4]
\end{samepage}
\begin{samepage}
\section{Some title}
\lipsum[1-30]
\end{samepage}

答案1

下面的代码可以实现你想要的效果。但是它有一些重要的限制:

  1. s内部不可能存在浮点数Section
  2. 章节不能任意长,总高度最大为 16383.99998 pt。

不确定是否还有更多限制。

\documentclass[]{article}

\makeatletter
\newsavebox\Section@box
\newenvironment*{Section}
  {%
    \par
    \setbox\Section@box\vbox\bgroup
    \@ifnextchar[
      \Section@
      \Section@@
  }
  {%
    \egroup
    \ifdim\pagetotal=0pt
    \else
      \ifdim\pagegoal<\dimexpr\ht\Section@box+\dp\Section@box\relax
        \clearpage
      \fi
    \fi
    \unvbox\Section@box
  }
\long\def\Section@[#1]#2%
  {%
    \section[{#1}]{#2}%
  }
\newcommand\Section@@[1]
  {%
    \section{#1}%
  }
\makeatother

\usepackage{lipsum}

\begin{document}
\begin{Section}{Some title}
  \lipsum[1-5]
\end{Section}
\begin{Section}{Some title}
  \lipsum[1-4]
\end{Section}
\begin{Section}{Some title}
  \lipsum[1-30]
\end{Section}
\end{document}

相关内容