TikZ 搞乱了 fancyvrb 环境的间距

TikZ 搞乱了 fancyvrb 环境的间距

我正在尝试在 TikZ 节点中使用用SaveVerbatimof保存的环境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}

相关内容