我正在尝试从中央 .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 for
来breakable
决定最后一个片段是使用完整页面还是仅使用其自然高度。这里有一些例子:
\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
内容项之间