我想编写一个命令或类似命令,允许我重新缩放给定的段落以适合给定的框架,同时保持纵横比。问题是段落通常是手动设置的,而不是自动换行的(因此我不知道它的宽度)。
举个例子,使用adjustbox
包,我可以组合minsizebox
和按以下方式maxsizebox
定义almostwhatiwant
(生成的框displayconstraint
仅用于说明):
\documentclass{article}
\usepackage{adjustbox}
\newcommand{\displayconstraint}[1]{\fbox{\begin{minipage}[l][3cm]{5cm} #1 \end{minipage}}}
\newcommand{\almostwhatiwant}[1]{\maxsizebox{5cm}{3cm}{\minsizebox{5cm}{3cm}{#1}}}
\begin{document}\noindent
\displayconstraint{\almostwhatiwant{test}} % example 1
\displayconstraint{\almostwhatiwant{t}}\\ % example 2
\displayconstraint{\almostwhatiwant{test\\test test}} % example 3
\displayconstraint{\almostwhatiwant{\parbox{\linewidth}{test\\test test}}} % example 4
\end{document}
呈现以下内容:
前两个示例(顶行)按预期呈现,但一旦我想换行,就会遇到一个问题,我必须使用类似段落的环境(否则,就会发生第三个示例),为此我必须指定线宽。这允许我以我想要的方式格式化文本,但重新缩放框使用的文本宽度现在是指定的线宽,因此结果不令人满意(示例 4)。
我知道解决这个问题的许多其他方法,但它们最终都由于类似的原因而失败或需要我手动执行某些操作(例如检测段落的最长行)。
如果我能以某种方式检测段落的实际宽度或将段落裁剪为其实际内容,我就能解决这个问题。
答案1
您可以使用tabular
或varwidth
\documentclass{article}
\usepackage{adjustbox,varwidth}
\newcommand{\displayconstraint}[1]{\fbox{\begin{minipage}[l][3cm]{5cm} #1 \end{minipage}}}
\newcommand{\almostwhatiwant}[1]{\maxsizebox{5cm}{3cm}{\minsizebox{5cm}{3cm}{#1}}}
\begin{document}
\raggedright
\displayconstraint{\almostwhatiwant{test}} % example 1
\displayconstraint{\almostwhatiwant{t}}\\ % example 2
\displayconstraint{\almostwhatiwant{test\\test test}} % example 3
\displayconstraint{\almostwhatiwant{\begin{tabular}{@{}l@{}}test\\test test\end{tabular}}} % example 4
\displayconstraint{\almostwhatiwant{\begin{varwidth}{\linewidth}
test test
\end{varwidth}}}
\displayconstraint{\almostwhatiwant{\begin{varwidth}{\linewidth}
test test test test
\end{varwidth}}}
\displayconstraint{\almostwhatiwant{\begin{varwidth}{\linewidth}
test test test test test test
\end{varwidth}}}
\displayconstraint{\almostwhatiwant{\begin{varwidth}{\linewidth}
test test test test test test test test
\end{varwidth}}}
\displayconstraint{\almostwhatiwant{\begin{varwidth}{\linewidth}
test test test test test test test test test test
\end{varwidth}}}
\end{document}