tikzpicture
如果我将环境移到 的 after 命令中,下面的示例可以正常工作lstnewenvironment
。但是,如果我想在现有的 中绘制tikzpicture
,则不会显示节点内容。如果我添加更多代码行,它会垂直增长,但它们不可见:
\documentclass{beamer}
\usepackage{listings}
\usepackage{tikz}
\makeatletter
\lstnewenvironment{code}{%
\lstset{%
basicstyle=\ttfamily\footnotesize,
}%
\setbox\@tempboxa=\hbox\bgroup\color@setgroup
}%
{%
\color@endgroup\egroup
\node [fill=green]
{\box\@tempboxa};
}
\begin{document}
\begin{frame}[fragile]
\begin{tikzpicture}
\begin{code}
Some Code
\end{code}
\end{tikzpicture}
\end{frame}
\end{document}
我该如何修复这个问题,以便正确显示框,但又可以在同一个 tikzpicture 内创建多个代码框?
答案1
您不需要临时框(而且您很幸运\node
在执行 之前没有覆盖它\box\@tempboxa
)。您可以让环境主体直接使用环境起始代码 和结束代码填充\node
内容。因为它是和 不是 TeX 的原语,所以我认为和不是必需的,尽管它们可能不会造成危害。最后一件事:不要忘记!\node[fill=green] \bgroup
\egroup
\node
\hbox
\color@setgroup
\color@endgroup
\makeatother
\documentclass{beamer}
\usepackage{listings}
\usepackage{tikz}
\makeatletter
\lstnewenvironment{code}{%
\lstset{basicstyle=\ttfamily\footnotesize}%
\node[fill=green] \bgroup
}%
{%
\egroup ;%
}
\makeatother
\begin{document}
\begin{frame}[fragile]
\begin{tikzpicture}
\begin{code}
Some Code ($%@}{#\~&!)
\end{code}
\end{tikzpicture}
\end{frame}
\end{document}