\includegraphics
生成的框的宽度和高度大约相差 0.5pt:
\usepackage{graphicx}
...
\setbox0\hbox{\includegraphics[width=\textwidth,height=\textheight]{mypic}}
\showthe\textheight
\showthe\ht0
\showthe\textwidth
\showthe\wd0
\includegraphics
有没有可以更高精度调整大小的版本?我正在使用pdflatex
。
width=
仅供参考,如果仅指定或,则没有舍入误差height=
,但如果同时指定,则两者都舍入不正确。
答案1
height
和选项width
以及相关选项\resizebox
实际上计算了一个比例因子,然后使用某种内部形式来\scalebox
进行缩放。由于此计算需要除法(使用循环实现graphic/x
),因此会引入数字错误。错误的大小取决于原始大小和请求的大小。如果比例因子是整数,则不会出现错误。方程式(如果我没记错的话)如下:
(requested size / original size) * original size ~ requested size
不幸的是,该(..)
因素受到 TeX 分辨率有限的影响。
(~
= 大约)
此外,实际缩放是由驱动程序或输出格式本身完成的,即图像按原样添加到 PDF 中,查看器按顺序进行缩放。我认为你不可能得到更小的误差。我自己尝试了其他除法方法,但没有得到更好的精度。
为了在 TeX 中拥有官方尺寸,需要插入一个具有给定尺寸的框。不幸的是,graphic/x
生成框时使用的是计算出的比例因子,而不是请求的宽度和高度。可以重写代码以执行不同的操作,这样图像在 PDF 查看器中的大小仍应与之前相同,但官方 TeX 尺寸将是“正确的”,即符合要求。只需将宽度和高度明确设置为请求的尺寸即可。我为基于 的adjustbox
包做了一些研究和工作graphicx
。但是,到目前为止,我不敢修补,graphics/x
以免冒任何隐藏的可比性等风险。
您还可以检查 PDF 标准,是否可以包含具有给定请求大小(转换为 bp)而不是比例因子的缩放图像,然后相应地重写 pdftex 驱动程序。
答案2
“本机”驱动程序代码expl3
提供了一种获得更高精度的方法。目前,该代码没有图形包含,因此设置需要首先将未缩放的图像包含在一个框中,然后进行缩放:
\documentclass{article}
\usepackage{graphicx}
\usepackage[native-drivers]{expl3}
\ExplSyntaxOn
\cs_new_eq:NN \ResizeBox \box_resize_to_wd_and_ht_plus_dp:Nnn
\ExplSyntaxOff
\newbox{\mybox}
\begin{document}
% Image from mwe bundle
\setbox\mybox\hbox{\includegraphics{example-image-a}}
\ResizeBox\mybox{\textwidth}{\textheight}
\showthe\textheight
\showthe\ht\mybox
\showthe\textwidth
\showthe\wd\mybox
\end{document}
在这里,我使用最新代码得到了最终的宽度恰好是 345 pt,高度恰好是 550 pt expl3
。马丁在回答中指出,项目大小调整由驱动程序本身以缩放比例(\pdfsetmatrix
使用最近的 pdfTeX 的原始方法)完成。因此,最终大小是 TeX 可以得到的最接近比例因子乘以原始大小,而不是给定的绝对值。我们最近调整了我们的代码,以便在大多数情况下不会出现这种情况:您将获得所需的确切大小。