是否有可能在不使用 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}