我正在尝试在 TikZ 节点中使用用SaveVerbatim
of保存的环境fancyvrb
。但 TikZ 似乎弄乱了间距,以至于我无法将其用于代码片段。以下 MWE 显示了第二行相对于第一行未正确对齐,以及 TikZ 如何在节点顶部添加一个空行。我该如何解决这个问题?
\documentclass{article}
\usepackage{tikz}
\usepackage{fancyvrb}
\begin{document}
\begin{SaveVerbatim}{foo}
def foo():
return 42
\end{SaveVerbatim}
\UseVerbatim{foo}
\noindent
\begin{tikzpicture}
\node[text width=3cm,inner sep=0,draw] {\UseVerbatim{foo}};
\end{tikzpicture}
\end{document}
答案1
该命令\BUseVerbatim
更适合此应用程序。
\documentclass{article}
\usepackage{tikz}
\usepackage{fancyvrb}
\begin{document}
\begin{SaveVerbatim}{foo}
def foo():
return 42
\end{SaveVerbatim}
\UseVerbatim{foo}
\noindent
\begin{tikzpicture}
\node[inner sep=0,draw] {\BUseVerbatim{foo}};
\end{tikzpicture}
\noindent
\begin{tikzpicture}
\node[inner sep=\fboxsep,draw] {\BUseVerbatim{foo}};
\end{tikzpicture}
\end{document}
答案2
下面的方法似乎可以解决问题。虽然我觉得有点混乱。
\documentclass{article}
\usepackage{tikz}
\usepackage{fancyvrb}
\begin{document}
\begin{SaveVerbatim}{foo}
def foo():
return 42
\end{SaveVerbatim}
\newsavebox{\baz}
\sbox{\baz}{\begin{minipage}{3cm}\UseVerbatim{foo}\end{minipage}}
\UseVerbatim{foo}
\noindent
\begin{tikzpicture}
\node[text width=3cm,inner sep=0,draw] {\usebox{\baz}};
\end{tikzpicture}
\end{document}
答案3
只是为了好玩:请注意保存框宽度 = \hsize
。
\documentclass{article}
\usepackage{tikz}
\newsavebox{\foo}
\begin{document}
\setbox\foo=\vbox{\topsep=0pt
\begin{verbatim}
def foo():
return 42
\end{verbatim}}
\hrule\noindent\usebox\foo\hrule
\noindent
\begin{tikzpicture}
\node[text width=3cm, inner sep=0, draw] {\usebox\foo};
\end{tikzpicture}
\end{document}