针对盒装内容的“智能”分页

针对盒装内容的“智能”分页

我正在尝试从中央 .tex 文件加载内容,然后显示它。

%%%%%%%%%%%%%%%
% central.tex %
%%%%%%%%%%%%%%%
\saveContent{A}{this is content "A"}
\saveContent{B}{this is content "B"}
\saveContent{C}{this is content "C"}
\saveContent{D}{this is content "D"}
% \vdots

%%%%%%%%%%%%%%%%
% document.tex %
%%%%%%%%%%%%%%%%
\documentclass{article}
\input{central.tex}

\useContent{A}
\useContent{B}
\useContent{C}

\begin{document}
  \displayUsableContent
\end{document}

具体用例是,这允许我使用问题库编写问题集和考试,只需编辑文档的前几行。我相信有很多方法可以做到这一点。

不同的内容块有不同的大小。假设A占用 0.5 页(垂直)、B占用 1.0 页、C占用 1.5 页和D占用 0.5 页。我希望它们显示为

+---+  +---+  +---+  +---+
| A |  | B |  | C |  | C |
|   |  | B |  | C |  | D | % (breaking D onto its own page would be acceptable)
|(1)|  |(2)|  |(3)|  |(4)|
+---+  +---+  +---+  +---+

我尝试将内容包装起来minipage,这样会截断最后 0.5 页C

+---+  +---+  +---+  +---+
| A |  | B |  | C |  | D |
|   |  | B |  | C |  |   | % where is my C :(
|(1)|  |(2)|  |(3)|  |(4)|
+---+  +---+  +---+  +---+

我曾尝试将内容包装在里面list,但这并不尊重尽可能将内容保持在一起的做法:

+---+  +---+  +---+  +---+
| A |  | B |  | C |  | D |
| B |  | C |  | C |  |   | % B is broken but doesn't need to be :(
|(1)|  |(2)|  |(3)|  |(4)|
+---+  +---+  +---+  +---+

有没有办法让 LaTeX 自动以这种方式分页?粗略的规则是,如果附加内容无法与先前的内容放在同一页上,请将其放在新页面上;如有必要,在内容中创建分页符

答案1

我不确定如何应用这个解决方案,但我认为它可以工作。它包括使用tcolorboxes将问题包含在主文档中。在这种情况下,可以控制框使用的垂直空间量。默认情况下,它是其自然高度,但您可以使用选项,例如feight fill在每一页中使用所有可用空间。也可以使用框中的选项heigth fixed forbreakable决定最后一个片段是使用完整页面还是仅使用其自然高度。这里有一些例子:

\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}

\tcbset{enhanced, breakable, height fixed for=all}

\begin{document}
\begin{tcolorbox}[height fill, title=Problem A]
\lipsum[1]
\end{tcolorbox}
\begin{tcolorbox}[height fill, title=Problem B]
\lipsum[1-3]
\end{tcolorbox}
\begin{tcolorbox}[title=Problem C]
\lipsum[1-5]
\end{tcolorbox}
\begin{tcolorbox}[height fixed for=none, title=Problem D]
\lipsum[1-5]
\end{tcolorbox}
\begin{tcolorbox}[height fill, title=Problem E]
\lipsum[1]
\end{tcolorbox}
\end{document}

在此处输入图片描述

注意:选项blanker将抑制所有框架和颜色但保留垂直空间。

答案2

假设内容可以自由进行分页(未被框起来),只需将

\filbreak

内容项之间

相关内容