是否可以为图形的大小指定一个“范围”?例如从.3\textwidth
到.5\textwidth
或5cm +- 10%
或5 cm +- 0.1\textwidth
。您为所有图像指定一个范围,TeX 会在此范围内选择实际大小,以实现最佳浮点位置和文档的最佳“外观”。这可能有助于 TeX 算法找到更好或至少更灵活的浮点位置,从而降低不良率。对于选定的图像,也应该可以“覆盖”此自动调整大小,但我认为这不会有什么问题……我的建议是否过于雄心勃勃?我知道会有很多变量,但很难找到解决方案……需要相当长的时间才能遍历所有可能的组合。您可以将其缩小到仅将此范围应用于浮点在某种程度上“至关重要”的图形……也可以通过增加范围的增量来加速此过程(例如,只有两个增量:+- 10 %
例如+- 0.5 cm
)。老实说,我认为这在 TeX 中(很容易)实现,但希望最后会实现!;)
答案1
你可以将宽度设置为 TeX 可以测试的任何条件;\textwidth
例如,将宽度设置为自然大小的最大值,这是很常见的。但是,除非你想重写 LaTeX 浮动放置算法的大部分内容,否则必须在浮动被放置时做出决定放并且在 LaTeX 决定浮动位置时无法进行,因为浮动位置被保存为框,因此浮动位置代码无法使用内部结构来重新设置该值。
另一方面,可以(但非常脆弱,并且与任何其他与图形接口的代码不兼容)将固定数量的变体隐藏到浮动框中,然后仅根据输出例程中的某些信息使用一个变体(例如,左页或右页,或顶部或底部浮动),请参见 这个答案
答案2
为了稍微扩展一下 David 对条件大小的引用,请记住,您可以将和都设置width
为height
文本布局的相对最大大小(或任何其他预定大小),并使用该选项保持图像的纵横比keepaspectratio
。
这实际上增加了很多灵活性,因为相同的规则可以避免在垂直页面中缩放过多的肖像图像或过少的全景图片。
在下面的例子中,文本长度被修改以首先模拟 1x1 文本布局,然后再模拟另外四个矩形布局。
在每种情况下,原始 1x1 长宽比的图像会重复十次,并 width
以height
相反的顺序设置在 10% 到 90% 之间(借助宏来简化编码)。
\textwidth
在=这种不寻常的情况下\textheight
,显然设置两种尺寸根本没有意义,这里的最大缩放比例是在两种尺寸相同(0.5\textwidth = 0.5\textheight)时完成的,但在矩形文本区域(常见情况)最大缩放比例是将设置width
为 10-20%、30-40%、60-70% 或 90-100%,具体取决于文本的纵向/横向布局。
\documentclass{article}
\usepackage{mwe}
\newcommand\EXAMPLE[2]{\includegraphics[width=.#1\textwidth, height=.#2\textheight,keepaspectratio]{example-image-1x1}\hfill}
\begin{document}
Scheme:
\medskip
\footnotesize
Text
Layout: Image max. \verb|10% width| or \verb|90% height|
\dotfill max. \verb|90% width| or \verb|10% height|
\large\bigskip
\setlength{\textwidth}{2.6cm}
\setlength{\textheight}{2.6cm}
$1\times1$: \hfill
\EXAMPLE{9}{1}
\EXAMPLE{9}{1}
\EXAMPLE{8}{2}
\EXAMPLE{7}{3}
\EXAMPLE{6}{4}
\EXAMPLE{5}{5}
\EXAMPLE{4}{6}
\EXAMPLE{3}{7}
\EXAMPLE{2}{8}
\EXAMPLE{1}{9}
\medskip
\setlength{\textwidth}{2cm}
\setlength{\textheight}{4cm}
$2\times4$: \hfill
\EXAMPLE{9}{1}
\EXAMPLE{8}{2}
\EXAMPLE{7}{3}
\EXAMPLE{6}{4}
\EXAMPLE{5}{5}
\EXAMPLE{4}{6}
\EXAMPLE{3}{7}
\EXAMPLE{2}{8}
\EXAMPLE{1}{9}
\medskip
\setlength{\textwidth}{4cm}
\setlength{\textheight}{2cm}
$4\times2$: \hfill
\EXAMPLE{9}{1}
\EXAMPLE{8}{2}
\EXAMPLE{7}{3}
\EXAMPLE{6}{4}
\EXAMPLE{5}{5}
\EXAMPLE{4}{6}
\EXAMPLE{3}{7}
\EXAMPLE{2}{8}
\EXAMPLE{1}{9}
\medskip
\setlength{\textwidth}{1cm}
\setlength{\textheight}{8cm}
$1\times8$: \hfill
\EXAMPLE{9}{1}
\EXAMPLE{8}{2}
\EXAMPLE{7}{3}
\EXAMPLE{6}{4}
\EXAMPLE{5}{5}
\EXAMPLE{4}{6}
\EXAMPLE{3}{7}
\EXAMPLE{2}{8}
\EXAMPLE{1}{9}
\medskip
\setlength{\textwidth}{8cm}
\setlength{\textheight}{1cm}
$8\times1$: \hfill
\EXAMPLE{9}{1}
\EXAMPLE{8}{2}
\EXAMPLE{7}{3}
\EXAMPLE{6}{4}
\EXAMPLE{5}{5}
\EXAMPLE{4}{6}
\EXAMPLE{3}{7}
\EXAMPLE{2}{8}
\EXAMPLE{1}{9}
\end{document}