LaTeX 中的处方集?在分页符之前呈现完整的子节

LaTeX 中的处方集?在分页符之前呈现完整的子节

因此,我将数学和物理公式放在 LaTeX 的简单公式表中。目前,我使用文章类和章节/子节作为结构,其中每个子节/子子节代表一个公式,并附有说明:

\documentclass{article}

\begin{document}

\section{Ordinary Differential Equations}

\subsection{Solution Procedure for Ordinary Differential Equations
Some Text that describes how to solve odes
\subsection{Different Topic}
...

\end{document}

一切都运行良好,看上去不错,但是有一件事让我很烦恼:

我想整体查看我的公式!LaTeX 的构造是,当页面写满时,​​会将子部分拆分成多页,因此我不得不浏览两页,因为某些公式/描述会自动拆分!

是否需要在我的序言中添加一些内容,告诉 LaTeX 打印子节,以便整个子节显示在同一页上?如果不行,是否有其他选项(其他文档类等)是我之前遗漏的?手动分页符或新页面命令似乎只是一种丑陋的黑客手段。

奖励:如果我所期望的行为是可能的,如果一个小节无法放在一页上,LaTeX 会怎么做?

非常感谢大家的帮助。提前致谢!

答案1

在不对文档进行任何更改的情况下,抓取子部分的内容似乎不太可靠/稳定。因此,我构建了一个环境 ( ssecenv),将其内容排版在一个框中,并根据页面上剩余的空间检查所需的垂直空间。

环境采用可选的星号、可选的参数和强制的参数——就像命令一样\subsection

\documentclass[]{article}

\usepackage{letltxmacro}
\usepackage{duckuments}
\usepackage{xparse}

\makeatletter
\newbox\tim@ssec
\newdimen\tim@spaceleft
\newdimen\tim@spaceneeded
\NewDocumentEnvironment{ssecenv}{ >{\tim@sProcessor}s >{\tim@OProcessor}O{} m }
  {%
    \par
    \setbox\tim@ssec\vbox\bgroup
      \subsection#1#2{#3}%
  }
  {%
    \egroup
    \tim@spaceleft=\textheight
    \advance\tim@spaceleft-\pagetotal
    \tim@spaceneeded=\ht\tim@ssec
    \advance\tim@spaceneeded\dp\tim@ssec
    \ifdim\tim@spaceneeded>\textheight
    \else
      \ifdim\tim@spaceleft<\tim@spaceneeded
        \clearpage
      \fi
    \fi
    \unvbox\tim@ssec
  }
\newcommand\tim@sProcessor[1]
  {%
    \IfBooleanTF{#1}{\def\ProcessedArgument{*}}{\def\ProcessedArgument{}}%
  }
\newcommand\tim@OProcessor[1]
  {%
    \if\relax\detokenize{#1}\relax
      \def\ProcessedArgument{}%
    \else
      \def\ProcessedArgument{[#1]}%
    \fi
  }
\makeatother

\begin{document}
\begin{ssecenv}[bar]{foo}
  \blindduck
\end{ssecenv}
\begin{ssecenv}*{foo}
  \blindduck
\end{ssecenv}
\begin{ssecenv}*[bar]{foo}
  \blindduck
\end{ssecenv}
\begin{ssecenv}{foo}
  \blindduck
  \blindduck
\end{ssecenv}
\end{document}

相关内容