特定宽高比的“minipage”

特定宽高比的“minipage”

考虑一下这个MWE:

\documentclass{article}
\usepackage{lipsum}
\begin{document}
\fbox{%
  \begin{minipage}[c][7in][t]{3in}
    \lipsum[3-4]
  \end{minipage}%
}
\end{document}

我希望能够生成minipage具有特定纵横比的图像,以完美适应所包含的文本。

因此,如果自然流动的文本总面积为 8 平方厘米,并且我们的目标是 2 的纵横比,那么它应该是宽度约为 4 厘米、高度为其一半的迷你页面,等等。

我怎么做?

答案1

我不确定是否完全理解这个问题,但我猜你想将宽度(第四个参数)设置为高度(第二个参数)的倍数。

如果高度是硬编码的或由 LaTeX 长度定义,则可以使用:

\begin{minipage}[c][<myheight>][t]{\dimexpr 2<myheight>\relax}

其中<myheight>可以是任意 LaTeX 长度,如\linewidth,并且 2 可以被任意文字浮点数替换。

编辑: 如果整个事物必须是动态的(即您事先不知道高度和宽度是多少,则可以使用来\savebox测量“面积”,然后计算新尺寸以适应规定的纵横比。整个过程包装在\miniaspect以下 MWE 中的宏中:

\documentclass{article}
\usepackage{lipsum}
\usepackage[margin=2cm,landscape]{geometry}
\usepackage{xfp}
\makeatletter
\newcommand\miniaspect[2]{
   \ifdefined\tmpbox\else\newsavebox\tmpbox\fi
   \ifdefined\newheight\else\newlength\newheight\fi
   \savebox{\tmpbox}{\parbox{0.5\linewidth}{#2}}
   \def\tt{\fpeval{sqrt({\strip@pt\wd\tmpbox}*({\strip@pt \ht\tmpbox}%
    +{\strip@pt\dp\tmpbox})/#1)}}%
    \setlength{\newheight}{\dimexpr\tt pt\relax}%
    \fbox{%
    \begin{minipage}[c][\newheight][t]{\dimexpr #1\newheight\relax}%
    #2
    \end{minipage}%
}}
\makeatother    
\begin{document}
\noindent\miniaspect{2}{\lipsum[3-4]}   %width=2*height
\noindent\miniaspect{0.8}{\lipsum[3-4]} %width=0.8*height
\end{document}

在这里我使用xfp包进行计算,因为我们需要得到一个平方根,并定义了一个宽页面(使用geometry),因为即使对于像这样的中等大小的文本\lipsum[3-4],长宽比为 2 的结果框也会变得非常宽。

相关内容