我想在 BEAMER 中的一个框内显示一个交互式 Python 会话。
由于我的演示文稿有很多这样的幻灯片,我认为创建一个新环境会很方便,但是当我尝试编译以下代码时:
\documentclass{beamer}
\usepackage{pythontex}
\usepackage{tcolorbox}
\newenvironment{boxsession}
{ \begin{tcolorbox}[colframe=blue,colback=blue!5!white,notitle,size=small] \begin{pyconsole} }
{ \end{pyconsole} \end{tcolorbox} }
\begin{document}
\begin{frame}[fragile]
\frametitle{Lists}
\begin{boxsession}
foo = [1, 2, 3]
bar = foo
baz = foo[:]
foo[-1] = -99
foo
bar
baz
\end{boxsession}
\end{frame}
\end{document}
我得到:
Runaway argument?
! File ended while scanning use of \FancyVerbGetLine.
<inserted text>
\par
l.32 \end{frame}
?
我也尝试过environ
但无济于事:
\usepackage{environ}
\NewEnviron{boxsession}
{\begin{tcolorbox}[colframe=blue,colback=blue!5!white,notitle,size=small]
\begin{pyconsole}
\BODY
\end{pyconsole}
\end{tcolorbox}}
有什么想法可以解决这个错误吗?
答案1
由于您正在处理包含特殊字符的文本,因此您需要使用\VerbatimEnvironment
:
\documentclass{beamer}
\usepackage{pythontex}
\usepackage{tcolorbox}
\newenvironment{boxsession}
{\VerbatimEnvironment\begin{tcolorbox}[colframe=blue,colback=blue!5!white,notitle,size=small]\begin{pyconsole}}
{\end{pyconsole}\end{tcolorbox}}
\begin{document}
\begin{frame}[fragile]
\frametitle{Lists}
\begin{boxsession}
foo = [1, 2, 3]
bar = foo
baz = foo[:]
foo[-1] = -99
foo
bar
baz
\end{boxsession}
\end{frame}
\end{document}
更新:更改字体
pyconsole
内部使用fancyvrb
(参见 pythontex 手册第 10.4.6 节),因此您必须传递可被理解的字体设置fancyvrb
:
\documentclass{beamer}
\usepackage{pythontex}
\usepackage{tcolorbox}
\newenvironment{boxsession}[1][fontsize=\normalsize]
{\VerbatimEnvironment\begin{tcolorbox}[colframe=blue,colback=blue!5!white,notitle,size=small]\begin{pyconsole}[][#1]}
{\end{pyconsole}\end{tcolorbox}}
\begin{document}
\begin{frame}[fragile]
\frametitle{Lists}
\begin{boxsession}[fontsize=\tiny]
foo = [1, 2, 3]
bar = foo
baz = foo[:]
foo[-1] = -99
foo
bar
baz
\end{boxsession}
\end{frame}
\end{document}