![覆盖文本+矩形标签图像的最简单方法?](https://linux22.com/image/241220/%E8%A6%86%E7%9B%96%E6%96%87%E6%9C%AC%2B%E7%9F%A9%E5%BD%A2%E6%A0%87%E7%AD%BE%E5%9B%BE%E5%83%8F%E7%9A%84%E6%9C%80%E7%AE%80%E5%8D%95%E6%96%B9%E6%B3%95%EF%BC%9F.png)
到目前为止,对于我的图形,我一直在使用 LaTeX 的简单图形代码,即:
\begin{figure}
\centering
\includegraphics[width=6.5in]{figure.png}
\caption[Stuff here]{(A) More stuff here and (B) here.}
\label{background-operating-mode}
\end{figure}
一切都很好,直到我得到一个多部分图形,例如需要在同一个 PNG 文件中标记的部分 (A) 和部分 (B)。我想要做的是:将 PNG 文件作为“底层”插入;在其上方,在我选择的位置,放置一个黑色矩形,作为“中间层”;在其上方,在大致相同的位置,放置一个白色文字字符,例如“A”。
我搜索了一下,发现 TikZ 可能是实现这一目标的一种方法。但是我对此深感困惑(下面是第一次尝试),所以我问,有没有更简单的方法来实现这个非常基本的任务?我不想从头开始画一个图形……只想在 PNG 上叠加一个矩形和一个字符。最简单的方法是什么?
\noindent \begin{tikzpicture}
{\includegraphics[width=6.5in]{group-figures/background/fig1.png}};
\fill (0,0) rectangle (20pt, 20pt);
\end{tikzpicture}
答案1
最简单的方法是使用项目onimage
中的包From Answers to Packages
,它实现了使用 TikZ 在图像上绘图。
onimage.dtx
要使用该包:从以下位置下载文件bazaar.launchpad.net/~tex-sx/tex-sx/development/files,运行pdflatex
它,然后将生成的.sty
文件移动到您的工作目录。
然后你可以加载onimage
包并使用tikzonimage
环境,其形式为
\begin{tikzonimage}[<options for includegraphics>]{<image name>}[<options for TikZ>]
...
\end{tikzonimage}`
坐标系将按以下方式缩放:(0,0)
图像的左下角为坐标系,右上角为坐标系。如果愿意,可以通过在可选的 TikZ 参数中(1,1)
设置键来禁用此缩放。tsx/scale cs=none
这是一个简单的例子:
\documentclass{article}
\usepackage{onimage}
\begin{document}
\begin{tikzonimage}{bottle.jpg}
\draw [orange, line width=5pt] (0.5,0.92) circle [radius=0.75cm];
\end{tikzonimage}
\end{document}
您可以通过设置键来打开网格来帮助您定位 TikZ 对象tsx/show help lines
。
\documentclass{article}
\usepackage{onimage}
\begin{document}
\begin{tikzonimage}{bottle.jpg}[tsx/show help lines]
\draw [orange, line width=5pt] (0.5,0.92) circle [radius=0.75cm];
\end{tikzonimage}
\end{document}
为了让标签看起来像您描述的一样,您可以使用选项font=<font commands>
来设置字体选项、fill=<color>
背景和text=<color>
文本颜色。为了保持整洁,您可以使用以下方式为此定义一种新样式
\tikzset{
<new style name>/.style={
fill=black,
text=white,
font=\fontfamily{phv}\selectfont\Large\bfseries
}
}
下面是一个示例,其中我还添加了标签位置(距图像右下边缘 0.2 厘米)作为样式定义的一部分,并使样式改变every node/.style
,该样式应用于 TikZ 图片中的所有节点。这允许我们在tikzonimage
可选参数中将这个新定义的样式应用于整个 TikZ 图片,而不是使用将其应用于节点本身\node [<style>] {};
:
\begin{document}
\tikzset{
image label/.style={
every node/.style={
fill=black,
text=white,
font=\fontfamily{phv}\selectfont\Large\bfseries,
anchor=south east,
xshift=-0.2cm,
yshift=0.2cm,
at={(1,0)}
}
}
}
\begin{tikzonimage}[width=0.5\textwidth]{bottle}[image label]
\node{A};
\end{tikzonimage}
\begin{tikzonimage}[width=0.25\textwidth]{bottle}[image label]
\node{B};
\end{tikzonimage}
\end{document}