我遇到的情况是,有些内容本质上是动态的。有时它正好适合一页,但有时文本更多,需要超过一页。
如果它正好适合一页,甚至是页面的一部分,我们可以继续使用当前字体大小。但在第二种情况下,我们希望动态减小当前字体大小,使内容正好适合一页。
我对此有一些粗略的想法,但似乎无法执行我的想法。
这是我迄今为止集思广益的结果。
\documentclass[12pt]{article}
\usepackage{lipsum}
\usepackage{relsize}
\makeatletter
\long\def\fittopage#1{%
% Find number of pages required including fractional pages
\def\n@pages{\p@gesneed{#1}}
% Get downsizing needed if any
\def\df@ctor{\downsizingf@ctor{\n@pages}}
\def\df@ctor{1} % Value forced for testing purpose
% Render the page
{\smaller[\df@ctor]#1}}
% Actual computation engines
\long\def\p@gesneed#1{\relax}
\def\downsizingf@ctor{\relax}
\makeatother
\begin{document}
\fittopage{\lipsum[1]}
\clearpage
\fittopage{\lipsum[1-10]}
\end{document}
缩小盒装内容不是一种选择,因为这也会减小宽度。在当前情况下,这是不允许的。
答案1
您可以将内容装箱并测量箱子高度......
请注意,这使用 fix-cm 来获取可缩放的 cm 大小,其他字体系列通常默认允许任意缩放。
\RequirePackage{fix-cm}
\documentclass[12pt]{article}
\usepackage{lipsum}
\usepackage{relsize}
\makeatletter
\long\def\fittopage#1{{%
\sbox0{\begin{minipage}[b]{\textwidth}#1\end{minipage}}%
\ifdim\ht0>\textheight
\relscale{0.9}%
\typeout{trying: \f@size}%
\fittopage{#1}%
\else
\noindent\usebox0
\fi
}}
\makeatother
\begin{document}
\fittopage{\lipsum[1]}
\clearpage
\fittopage{\lipsum[1-10]}
\end{document}