我正在尝试让 LaTeX 处理我的图形,以便它们保持纵横比,但在最大宽度和高度方面使图像仍然适合页面。 Pandoc 吐出应该执行此操作的 LaTeX 投影机代码,这看起来是正确的……但它不起作用。考虑:
\documentclass[14pt,aspectratio=169]{beamer}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\makeatother
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
\begin{document}
\begin{frame}{What are my lengths?}
maxwidth = \the\maxwidth
maxheight = \the\maxheight
linewidth = \the\linewidth
textheight = \the\linewidth
\end{frame}
\begin{frame}{Wide}
\fbox{\includegraphics{wide.png}}
\end{frame}
\begin{frame}{high}
\fbox{\includegraphics{high.png}}
\end{frame}
\end{document}
真正高大上的图片不太适合纳入tse,所以让我来描述一下它们:
$ file high.png wide.png
high.png: PNG image data, 1000 x 10000, 8-bit colormap, non-interlaced
wide.png: PNG image data, 10000 x 1000, 8-bit colormap, non-interlaced
小问题是输出告诉我 maxwidth 和 maxheight 是 0pt。不重要,但我该如何打印它?
主要问题是高位数字没有缩小,而是低于应有的水平。这与\maxwidth
和无关\maxheight
,因为 得到的结果相同\setkeys{Gin}{width=8in,height=4in,keepaspectratio}
。
我如何哄骗投影仪中的图形保持其纵横比,但尝试尽可能地拉伸而不在 x 和 y 方向上溢出页面?(一如既往,感谢建议。)
答案1
我建议利用一些adjustbox
的键:max width
和max height
。它会按顺序测试尺寸,因此在某些情况下可能无法按预期工作。但是,编写自己的\includeimage{<img>}
命令可以检查图像是横向还是纵向,并根据需要指定max width
或max height
。由于您只指定要调整的单个长度,因此它将保持纵横比。
\documentclass{article}
\usepackage[export]{adjustbox}
\usepackage{xfp}
\newsavebox{\imgbox}
\newcommand{\includeimage}[1]{%
\savebox{\imgbox}{\includegraphics{#1}}%
\ifdim\fpeval{\wd\imgbox/\ht\imgbox}pt>1pt
% Landscape image
\includegraphics[max height=3em]{#1}%
\else
% Portrait image
\includegraphics[max width=3em]{#1}%
\fi
}
\setlength{\parindent}{0pt}
\begin{document}
\rule{5em}{1pt}% For reference
\includegraphics[width=5em,height=3em]{example-image}
\includegraphics[width=5em,max height=2em]{example-image} \rule{1pt}{2em}
\includegraphics[height=10em,max width=5em]{example-image}
\rule{5em}{1pt}% For reference
\bigskip
\includeimage{example-image} \rule{1pt}{3em}
\includeimage{example-image-9x16}
\rule{3em}{1pt}
\end{document}
以上输出中的规则仅供参考。