考虑一下这个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 的结果框也会变得非常宽。