不浪费空白:弹性调整框

不浪费空白:弹性调整框

考虑一下:

\documentclass[a4paper,10pt]{article}
\usepackage[landscape,hmargin={1.2cm,1cm},vmargin=1cm,footskip=7mm]{geometry}
\begin{document}
\rule{5cm}{6cm}

\rule{5cm}{3cm}

\rule{5cm}{10cm}
\end{document}

(MWE 占位符) 框分布在两页上,浪费了大量空白。如果将它们稍微缩小一点,就可以将所有框放在一页上。有没有类似的东西\adjustbox(它可以缩放材料),但可以拉伸到一定程度以很好地适应材料?

(我知道可以摆弄页面底部的粗糙度,但这不是我想要的,因为在我的真实示例中 a)我的边距已经很小并且 b)我已经在使用adjustbox。此外,TeX 是程序生成的,因此手动摆弄参数不是一个选择。)

[问题已编辑,以澄清 MWE。]

答案1

您可以使用 TeX 的弹性粘合机制来计算下次运行的盒子尺寸。

在此处输入图片描述

\documentclass[a4paper,10pt]{article}
\usepackage[landscape,hmargin={1.2cm,1cm},vmargin=1cm,footskip=7mm]{geometry}
\makeatletter
\def\foo{%
\global\advance\fooc1
\hrule\@width\z@\@height\z@
\nobreak
\nointerlineskip
\hbox{\pdfsavepos
\edef\tmp{\write\noexpand\@auxout{%
\gdef\string\fooposa@\romannumeral\fooc{{\noexpand\the\noexpand\pdflastxpos}{\noexpand\the\noexpand\pdflastypos}}}}\tmp}%
\noindent\vbox to 0pt{%
\expandafter\ifx\csname fooposa@\romannumeral\fooc\endcsname\relax
\[email protected]\relax
\else
\dimen@\dimexpr
\expandafter\expandafter\expandafter\fooy\csname fooposa@\romannumeral\fooc\endcsname
-
\expandafter\expandafter\expandafter\fooy\csname fooposb@\romannumeral\fooc\endcsname\relax
\fi
\rule{5cm}{\dimen@}\vss}\par
\nobreak
\vskip 9.5cm plus .2cm minus 1cm\relax
\nobreak
\nointerlineskip
\hbox{\pdfsavepos
\edef\tmp{\write\noexpand\@auxout{%
\gdef\string\fooposb@\romannumeral\fooc{{\noexpand\the\noexpand\pdflastxpos}{\noexpand\the\noexpand\pdflastypos}}}}\tmp}%
\nobreak
\hrule\@width\z@\@height\z@
\penalty\z@}



\def\fooy#1#2{#2sp }
\newcount\fooc


\makeatother
\raggedbottom
\begin{document}



\foo

\smallskip

\foo

\smallskip

\foo

\end{document}

答案2

不确定这是否能回答你的问题。标准 TeX\vbox会尝试将其内容调整到给定的高度,并且为了能够做到这一点,\baselineskip应该\parskip具有一定的可拉伸性/可收缩性(如果没有,则会产生过满和未满的垂直框)。

因此,对于您的情况,如果您适当地定义\parskip\baselineskip,并将“盒子”的内容放在给\vbox定高度的内,结果将尝试适应该高度。当然,困难的部分是事先估计所需的高度,这就是我认为这个答案没用的原因。

无论如何,为了阐明底层概念,有一个 MWE:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\long\def\content{
\parskip=1em plus 1ex minus 1ex
\baselineskip=11pt plus 2pt minus 4pt
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ac diam et
turpis imperdiet venenatis vitae sit amet dolor. [...]

Mauris volutpat est in tellus luctus in eleifend orci venenatis. Pellentesque 
gravida dictum augue, quis imperdiet metus gravida sed. 
}

% Two minipages side-to-side to compare their heights
\begin{minipage}[t]{.45\textwidth}
\vbox to 4cm{\content}
\end{minipage}\hfill
\begin{minipage}[t]{.45\textwidth}
\vbox to 2.8cm{\content}
\end{minipage}
\end{document}

结果

答案3

我不太清楚您是想复制方框还是想用图形等替代它们。我有两个可行的解决方案,但仍然需要输入具体数字。进一步调整可能会产生更好的结果。第一组基于文本高度构建,因此它将随文本区域缩放。

\documentclass[a4paper,10pt]{article}
\usepackage[landscape,hmargin={1.2cm,1cm},vmargin=1cm,footskip=7mm]{geometry}
\usepackage{graphics}
\begin{document}

\resizebox{!}{.49\textheight}{\rule{5cm}{9.5cm}}

\resizebox{!}{.49\textheight}{\rule{5cm}{9.5cm}}

\resizebox{!}{.49\textheight}{\rule{5cm}{9.5cm}}

\resizebox{!}{.49\textheight}{\rule{5cm}{9.5cm}}

\newpage
\scalebox{.95}{\rule{5cm}{9.5cm}}

\scalebox{.95}{\rule{5cm}{9.5cm}}

\scalebox{.95}{\rule{5cm}{9.5cm}}

\scalebox{.95}{\rule{5cm}{9.5cm}}

\end{document}

相关内容