适用于 LaTeX 的高精度 \includegraphics

适用于 LaTeX 的高精度 \includegraphics

\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 可以得到的最接近比例因子乘以原始大小,而不是给定的绝对值。我们最近调整了我们的代码,以便在大多数情况下不会出现这种情况:您将获得所需的确切大小。

相关内容