我有一段代码,我曾用它(显然)与tex4ht
(用 编译latex
)来获取 html 文档 - 并且据我所知(是一段时间以前)它运行正常。现在我尝试用 编译相同的代码片段pdflatex
,结果出现了错误的图像大小 - 但这仅在使用bb=
(边界框)参数时发生。
显然,我需要添加参数bb=
以避免在latex
处理此代码时出现单独的 bbox 文件,据我所知,它运行良好。问题是,我想在pdflatex
编译运行中也保留相同的代码。
为此,我制作了一个包含原始源图像的 zip 文件:
...我已经设法用这个 MWE 重建了错误:
\documentclass{book}
\usepackage{graphicx}
\begin{document}
\begin{figure}[hbt]
\centering
\includegraphics[bb=0 0 1408 1056,width=0.49\textwidth]{IMG1.JPG} \includegraphics[width=0.49\textwidth]{IMG2.jpg} %bb=0 0 1629 1221
\ifdefined\ifHtml\HCode{<br/>}\else\fi
\caption{Left: some text here; right: some text there}
\label{fig:fig1}
\end{figure}
\begin{figure}[tb]
\centering
\includegraphics[bb=0 0 1000 1415,width=0.49\textwidth,trim=90 540 250 380,clip]{IMG3} \includegraphics[bb=0 0 1600 1200,width=0.49\textwidth]{IMG4}
\ifdefined\ifHtml\HCode{<br/>}\else\fi
\caption{Left: some text here; right: some text there}
\label{fig:fig2}
\end{figure}
\end{document}
输出如下(单击可查看高分辨率):
这就是问题:
- 在第一个图(前两幅图)中,每当我使用参数时
bb=
,\includegraphics
我都会得到错误的图像尺寸(比小得多width=0.49\textwidth
) - 在第二张图(下面两张图)中,我使用
bb=
参数来\includegraphics
- 这里是不问题,大小是正确的?!
IMG* 图像最初来自相机;我在 Gimp 中用红色填充替换了它们的内容,然后重新保存 - 奇怪的是,错误仍然发生;这些图像是测试图片.zip。因此,即使图像数据本身消失了,EXIF 数据仍然存在于这些图像中,我尝试过:
exiftool -f IMG*
...但我看不出前两幅图有什么奇怪之处,bb=
在第一幅图中使用时可能会导致此错误。以下是图像大小的快速概览:
$ identify IMG*
IMG1.JPG JPEG 1408x1056 1408x1056+0+0 8-bit DirectClass 13KB 0.010u 0:00.000
IMG2.jpg[1] JPEG 1629x1221 1629x1221+0+0 8-bit DirectClass 16.1KB 0.000u 0:00.000
IMG3.jpg[2] JPEG 1000x1415 1000x1415+0+0 8-bit DirectClass 8.7KB 0.010u 0:00.000
IMG4.JPG[3] JPEG 1600x1200 1600x1200+0+0 8-bit DirectClass 15.6KB 0.000u 0:00.000
但请注意编译时 pdflatex 在日志中输出的内容:
Package pdftex.def Warning: Option `bb' does not make sense,
(pdftex.def) using `viewport' instead on input line 8.
<IMG1.JPG, id=1, 565.312pt x 423.984pt> <use IMG1.JPG>
<IMG2.jpg, id=2, 654.0435pt x 490.2315pt> <use IMG2.jpg>
Package pdftex.def Warning: Option `bb' does not make sense,
(pdftex.def) using `viewport' instead on input line 16.
<IMG3.jpg, id=3, 1003.75pt x 1420.30624pt> <use IMG3.jpg>
Package pdftex.def Warning: Option `bb' does not make sense,
(pdftex.def) using `viewport' instead on input line 16.
<IMG4.JPG, id=5, 1606.0pt x 1204.5pt> <use IMG4.JPG>
因此,它有点“解释”前两张图像变得更小,但我真的不明白为什么。
有人能解释为什么会发生这种情况吗?以及如何才能使代码在命令中也能正确编译pdflatex
,同时保留原始代码和参数?bb=
\includegraphics
编辑:发现了为什么前两幅图像的解释不同——它们有不同的打印尺寸/分辨率:
$ identify -verbose IMG* | grep 'Image:\|Resolution:\|Print'
Image: IMG1.JPG
Resolution: 180x180
Print size: 7.82222x5.86667
exif:FocalPlaneXResolution: 2816000/225
exif:FocalPlaneYResolution: 2112000/169
exif:XResolution: 180/1
exif:YResolution: 180/1
Image: IMG2.jpg
Resolution: 180x180
Print size: 9.05x6.78333
exif:FocalPlaneXResolution: 2816000/225
exif:FocalPlaneYResolution: 2112000/169
exif:XResolution: 180/1
exif:YResolution: 180/1
Image: IMG3.jpg
Resolution: 72x72
Print size: 13.8889x19.6528
Image: IMG4.JPG
Resolution: 72x72
Print size: 22.2222x16.6667
exif:FocalPlaneXResolution: 1600000/225
exif:FocalPlaneYResolution: 1200000/169
exif:XResolution: 72/1
exif:YResolution: 72/1
因此,显然,分辨率为 72 dpi 的那些的bb=
解释是正确的,但是那些没有该打印分辨率的(前两个是 180 dpi)在bb=
与 一起使用时尺寸不正确pdflatex
。
我想我可以只更改 Gimp 中图像的 DPI 打印分辨率并完成它 - 但假设我不想更改图像或代码,我该怎么做?我试过了texdoc graphicx
,但它似乎没有参数resolution
...
答案1
如果需要 bb 参数,则必须给出正确的值。
\includegraphics[bb=0 0 1408 1056,width=0.49\textwidth]{IMG1.JPG}
\includegraphics[width=0.49\textwidth]{IMG2.jpg} %bb=0 0 1629 1221
应该改为
\includegraphics[bb=0 0 563 422,width=0.49\textwidth]{IMG1.JPG}
\includegraphics[width=0.49\textwidth]{IMG2.jpg} %bb=0 0 652 488
命令
extractbb IMG1.JPG
可能会告诉您创建的 IMG1.xbb 中的正确边界框。