创建新环境以显示框架式 Python 交互式会话

创建新环境以显示框架式 Python 交互式会话

我想在 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}

在此处输入图片描述

相关内容