自从 \includegraphics 拒绝 bb 以来?

自从 \includegraphics 拒绝 bb 以来?

抱歉过几天再问。事实上,我刚刚从 TeX Live 2015 升级到 TeX Live 2017,然后一些东西开始出现问题。

下述测试例的结果令人吃惊。

\documentclass{letter}
\usepackage{graphicx}
\begin{document}
Hello World\\
Mr. X\includegraphics[bb=30mm 25mm 0mm 0mm,scale=.5]{signature.png}b
\end{document}

结果不包含任何图形,并且也交换了文本:

Hello World
b             Mr. X

我需要bb将透明的签名放置在输入的名称之上。

为什么\includegraphics现在拒绝明确的边界框?

更新

关于使用负值的 bb:这是一个长期有效的技巧。graphicx 手册第 2 页第 3 节包含 bb 作为选项。我使用此选项和负值将图像移动到需要的位置。它适用于 texlive 2015。它不适用于 texlive 2017。

回复 \llap:不,它将图像放在文本区域的左侧。结果很糟糕。

回复 \raisebox:不,我不想移动文本。

回复 \adjustbox:不,它将签名放在名称之上,不会重叠。

更新 #2

以下内容适用于 pdflatex,但适用于 lualatex。

\documentclass{letter}
\usepackage{graphicx}
\begin{document}
~\\A. Dolittle, MD\\
Job title\\
~\includegraphics[bb=0 0 10 10, scale=.5]{signature.png}
\end{document}

使用 pdflatex 时,会打印出两行,并将图像放在它们之上。使用 lualatex 时,根本不会包含任何图像。

This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017) (preloaded format=pdflatex 2018.1.8)  8 JAN 2018 22:20

This is LuaTeX, Version 1.0.4 (TeX Live 2017)  (format=lualatex 2018.1.8)  8 JAN 2018 22:29

更新 #3

以下内容适用于 pdflatex 和 lualatex。

\documentclass{letter}
\usepackage{graphicx}
\begin{document}
~\\A. Dolittle, MD\\
Job title\\
\begin{picture}(0,0)
\put(-30,25){\includegraphics[scale=.5]{signature.png}}
\end{picture}
\end{document}

我爱你大卫:-)

答案1

如果pdftex.def使用驱动程序(pdflatex),bb则不支持选项,因为 pdfTeX 能够提取它支持的图像格式的大小(例如 PDF、PNG、JPEG 等)。由于bb指定了图像的边界框,而 pdfTeX 已经知道边界框(/MediaBox 等),因此bb没有任何用处,而是viewport使用错误恢复选项。此行为是在很多年前实现的;从修订历史(在 的顶部pdftex.def):

% 2000/09/14 v0.03e
%  * Options `bbllx', `bblly', `bburx', `bbury' disabled,
%    option `bb' redirected with a warning to `viewport' (HO).

从问题来看:

\includegraphics[bb=30mm 25mm 0mm 0mm,scale=.5]{signature.png}

bb或 的价值观viewport是完全错误的,从LaTeX 图形包的文档

  • bb 参数应为四维,以空格分隔。这些表示文件内打印区域的“边界框”。

  • bbllx,,,设置 边界框。主要是为了与旧软件包兼容。指定 bblly相当于指定。bburxbburybbllx=a,bblly=b,bburx=c,bbury=dbb = a b c d

  • viewportviewport与 一样,有四个参数bb。但是在这种情况下,值是相对于文件中边界框指定的原点而取的。因此,要“查看”边界框指定区域左下角的正方形中的 1,请使用参数 viewport=0 0 72 72

bb=30mm 25mm 0mm 0mmviewport=30mm 25mm 0mm 0mm表示宽度(-30mm)和高度(-25mm)为负数,四个参数分别为左(llx)、下(lly)、右(urx)、上(ury),x轴从左到右,y轴从下到上。

负的宽度或高度是用户错误,并且会使软件包混乱graphics/graphicx)。例如,LaTeX 向左移动 30 毫米,因此在源中b绘制图像之后,图像的左侧Mr. X写入图像之前。

修复值,例如viewport=0mm 0mm 30mm 25mm,以恢复记录的行为。

放置图像的方法有很多种。例如,可以将其放在左侧,然后将其放入其中以覆盖左侧的文本\llap

Mr. X\llap{\includegraphics[scale=.5]{signature.png}}

\raisebox及其选项(也请查看可选选项)可用于垂直放置图像。环境提供了另一种方法picture

答案2

我尝试使用默认的 PNG 图像来执行您的示例。使用 2012 至 2016 年的 TeX Live 时,我收到警告

Package pdftex.def Warning: Option `bb' does not make sense,
(pdftex.def)                using `viewport' instead on input line 5.

所以,不,它从来没有起作用。它有点确实如此,但支持并不十分精确。

答案3

自 2018-01-01 版本起,pdftexluatex驱动程序恢复bb为等同于viewport(见https://github.com/latex3/graphics-def/commit/9e6d682fe28c3811410e0faae70c75e586fc8b05)。与之前的行为(在Heiko 的回答),此映射被视为“信息”而不是警告。

答案4

任何带有隐式负尺寸的行为bb都只是由于缺乏错误检查来拒绝该输入(因为我从未想到这是必要的)如果它产生了您预期的偏移量,那么这只是偶然的、未经测试的代码。请注意,记录bb为提供左下角和右上角坐标的坐标,这确实意味着前两个坐标的值小于后两个坐标。我个人会使用图片模式并\put(???,??)在需要的任何位置覆盖打印文本和图形

相关内容