tikz 节点的标签或引脚中的 \verb

tikz 节点的标签或引脚中的 \verb

tikz 的文档给出了以下示例,其中包含\verb节点文本中的命令(第 2.21 节添加文本, 第 3 版):

\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw (0.5,0.5) node [fill=yellow!80!black]
                       {Text at \verb!node 1!}
     -- (1.5,1.5) node {Text at \verb!node 2!};
\end{tikzpicture}

如果我想使用节点的标签或固定功能,它无法按预期工作:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw (0.5,0.5) node [fill=yellow!80!black]
                       {Text at \verb!a_b!}
                     -- (1.5,1.5) node[label={\verb!a_b!}] {Text at \verb!a_b!};
\end{tikzpicture}
\end{document}

给出的错误信息是! Missing $ inserted.由于_我想要使用。

答案1

\documentclass[tikz]{standalone}
\usepackage{fancyvrb} \DefineShortVerb{\|}
\begin{document}
\SaveVerb{Verb}|a_b|
\begin{tikzpicture}
    \draw (0,0) rectangle (2,2);
    \draw (0.5,0.5) node [fill=yellow!80!black]{Text at |a_b|} -- (1.5,1.5) 
                    node[label=\UseVerb{Verb}] {Text at |a_b|};
\end{tikzpicture}
\end{document}

答案2

我真的不完全明白发生了什么,但我可以提供一种解决方法。为此,让我首先提到,创建一个新的\savebox并尝试用它填充\savebox\verbox{\verb!a_b!}会失败。但是,一个lrbox可以工作,所以我建议先将标签的内容存储在一个中\savebox,然后使用它。

\documentclass[tikz]{standalone}
\newsavebox\verbox
\begin{document}
\begin{lrbox}{\verbox}
\verb!a_b!
\end{lrbox}
% fails:
%\savebox\verbox{\verb!a_b!}
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw (0.5,0.5) node [fill=yellow!80!black]
                       {Text at \verb!a_b!}
                     -- (1.5,1.5) node[label={\usebox\verbox}] {Text at \verb!a_b!};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

另一种解决方法产生与@marmot 答案相同的输出。

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw (0.5,0.5) node [fill=yellow!80!black]
                       {Text at \verb!a_b!}
                     -- (1.5,1.5) node[label=\texttt{a\string_b}] {Text at \verb!a_b!};
\end{tikzpicture}
\end{document}

相关内容