如何动态调整可变内容的字体大小以适合页面?

如何动态调整可变内容的字体大小以适合页面?

我遇到的情况是,有些内容本质上是动态的。有时它正好适合一页,但有时文本更多,需要超过一页。

如果它正好适合一页,甚至是页面的一部分,我们可以继续使用当前字体大小。但在第二种情况下,我们希望动态减小当前字体大小,使内容正好适合一页。

我对此有一些粗略的想法,但似乎无法执行我的想法。

这是我迄今为止集思广益的结果。

\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}

相关内容