我正在寻找一种minipages
在 LaTeX 中跨越页面的方法。
我有一系列食谱(通过 cuisine 包提供的 recipe 环境呈现),长度各不相同,从 10 行到超过一页。我希望在一页上放尽可能多的食谱,并且仅在必要时将文本扩展到多页。到目前为止,minipage
如果内容不超过一页,我使用的环境就足够了。
有没有办法获得“2 页”minipage
或类似的东西?
编辑:
我有类似的内容:文本 A、B、C 和 D。如果没有必要,我不希望它们跨越页面。
- AAAABB (新页面) BBCCDD 不可接受
- AAAA(新页)BBBB(新页)CCDD 是理想输出
编辑:
我的内容是来自美食包的食谱集合。
答案1
您的规范太模糊了。您希望将尽可能多的内容放在一页上,但有些内容大于一页,因此应该拆分。允许拆分的标准是什么?我会这样做:
将菜谱排版在一个盒子里并进行测量。
如果它短于某个恒定长度(比如说页面高度的 40%),那么就把它放在页面上的小页面中。
如果较长,则将其插入到页面上而不使用 minipage(因此允许它拆分)
下面是执行此类操作的代码:
\documentclass{article}
\usepackage{lipsum,environ}
\newsavebox\recipebox
\newlength\recipebreaklength
\setlength\recipebreaklength{0.4\textheight}
\newcommand\typesetrecipe[1]{%
\par\noindent\rule{\linewidth}{1ex}\par
\BODY
\par\noindent\rule{\linewidth}{1ex}\par
}
\NewEnviron{recipe}{%
\savebox{\recipebox}{\parbox{\linewidth}{%
\typesetrecipe{\BODY}%
}}%
\ifdim
\dimexpr\ht\recipebox+\dp\recipebox\relax
> \recipebreaklength
\typesetrecipe{\BODY}%
\else
\par\noindent\usebox\recipebox
\fi
\bigskip
}
\begin{document}
\raggedbottom
\begin{recipe}\lipsum[2]\end{recipe}
\begin{recipe}\lipsum[3]\end{recipe}
\begin{recipe}\lipsum[4]\end{recipe}
\begin{recipe}\lipsum[5]\end{recipe}
\begin{recipe}\lipsum[6]\end{recipe}
\begin{recipe}\lipsum[7-10]\end{recipe}
\end{document}
答案2
你可以把文本放入一个页面\vbox
,然后测试它是否太长,不适合这个页面。如果不长,你可以设置它,否则你可以\vsplit
让它跨两个页面。
我问了一个类似的问题,使用 Latex 在两页相对的页面上排版给定的文本;史蒂夫的回答可以根据您的要求进行定制。
答案3
使用samepage
环境来保存您想要保持在同一页面上的内容。您可能\raggedbottom
也需要它。