覆盖文本+矩形标签图像的最简单方法?

覆盖文本+矩形标签图像的最简单方法?

到目前为止,对于我的图形,我一直在使用 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}

相关内容