抱歉过几天再问。事实上,我刚刚从 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
相当于指定。bburx
bbury
bbllx=a,bblly=b,bburx=c,bbury=d
bb = a b c d
viewport
键viewport
与 一样,有四个参数bb
。但是在这种情况下,值是相对于文件中边界框指定的原点而取的。因此,要“查看”边界框指定区域左下角的正方形中的 1,请使用参数viewport=0 0 72 72
。
bb=30mm 25mm 0mm 0mm
或viewport=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 版本起,pdftex
和luatex
驱动程序恢复bb
为等同于viewport
(见https://github.com/latex3/graphics-def/commit/9e6d682fe28c3811410e0faae70c75e586fc8b05)。与之前的行为(在Heiko 的回答),此映射被视为“信息”而不是警告。
答案4
任何带有隐式负尺寸的行为bb
都只是由于缺乏错误检查来拒绝该输入(因为我从未想到这是必要的)如果它产生了您预期的偏移量,那么这只是偶然的、未经测试的代码。请注意,记录bb
为提供左下角和右上角坐标的坐标,这确实意味着前两个坐标的值小于后两个坐标。我个人会使用图片模式并\put(???,??)
在需要的任何位置覆盖打印文本和图形