使用 overpic 或类似工具在 SVG 图像上添加文本

使用 overpic 或类似工具在 SVG 图像上添加文本

是否有可能在不使用 Inkscape 的情况下将文本放置在 svg 矢量图像上?

\overpic对我来说,使用和快速更改文本\put比每次打开 Inkscape 并生成 pdf_tex 文件要方便得多。

或者这是唯一的方法吗?谢谢!

答案1

这里,我使用\stackinset来实现目标(stackengine包)

我提供的内容\scaledinset是为了回应 OP 的评论。因此,它们不是物理 x 和 y 距离,而是#2图形#4对象整体宽度和高度的一小部分。

为了进行此演示,我还使用了标准图形(而不是 svg)。

\documentclass[standard]{letter}
\usepackage{svg}
\usepackage[usestackEOL]{stackengine}
\usepackage{graphicx}
\newcommand\scaledinset[6]{%
  \setbox0=\hbox{#6}%
  \stackinset{#1}{#2\wd0}{#3}{#4\ht0}{#5}{#6}
}
\begin{document}
\scaledinset{l}{.5}{b}{.7}{test}{\includegraphics[width=0.15\linewidth]{example-image}}

\scaledinset{l}{.5}{b}{.7}{test}{\includegraphics[width=0.45\linewidth]{example-image}}
\end{document}

在此处输入图片描述

答案2

我的答案基本上与Steven B. Segletes 的回答%,但我在 之后添加了一个\stackinset{#1}{#2\wd0}{#3}{#4\ht0}{#5}{#6}。如果没有这个,%定义的命令\scaledinset总是会在图像后插入一个新行,这可能非常烦人。

\documentclass[standard]{letter}
\usepackage{svg}
\usepackage[usestackEOL]{stackengine}
\usepackage{graphicx}
\newcommand\scaledinset[6]{%
  \setbox0=\hbox{#6}%
  \stackinset{#1}{#2\wd0}{#3}{#4\ht0}{#5}{#6}%
}
\begin{document}
\scaledinset{l}{.5}{b}{.7}{test}{\includegraphics[width=0.15\linewidth]{example-image}}

\scaledinset{l}{.5}{b}{.7}{test}{\includegraphics[width=0.45\linewidth]{example-image}}
\end{document}

随着代码来自 Steven B. Segletes一个会失去对齐,而可以通过添加来保持对齐,%如下例所示:

\documentclass[standard]{report}
\usepackage{subcaption}
\usepackage{svg}
\usepackage[usestackEOL]{stackengine}
\usepackage{graphicx}
\newcommand\scaledinset[6]{%
  \setbox0=\hbox{#6}%
  \stackinset{#1}{#2\wd0}{#3}{#4\ht0}{#5}{#6}%
}
\newcommand\scaledinsetOld[6]{%
  \setbox0=\hbox{#6}%
  \stackinset{#1}{#2\wd0}{#3}{#4\ht0}{#5}{#6}
}
\begin{document}
\begin{figure}
     \centering
     \begin{subfigure}[b]{0.3\textwidth}
         \centering
         \includegraphics[width=\textwidth]{example-image}
     \end{subfigure}
     \hfill
     \begin{subfigure}[b]{0.3\textwidth}
         \centering
         \scaledinset{l}{.3}{b}{.7}{test new code}{\includegraphics[width=\textwidth]{example-image}}
     \end{subfigure}
     \hfill
     \begin{subfigure}[b]{0.3\textwidth}
         \centering
         \scaledinsetOld{l}{.3}{b}{.7}{test old code}{\includegraphics[width=\textwidth]{example-image}}
     \end{subfigure}
\end{figure}
\end{document}

在此处输入图片描述

答案3

还有一种使用 overpic 的方法 - 添加 SVG 图形,在 SVG 包含之后但在标题部分之前,添加另一个带有透明线的 overpic 图形。然后,您可以根据需要向此 overpic 图形添加文本...

例如,

\begin{figure}[h]
\includesvg[inkscapelatex=false,width=\linewidth]{figures/xxx.svg}
\begin{overpic}[width=\linewidth,height=0.001in]{figures/blank.png}
\put(20, 20) {Blah blah!}
\end{overpic}
\caption{\label{fig}Blah blah blah!}
\end{figure}

相关内容