因此,我将数学和物理公式放在 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}