使用 minted 混合 Python 代码和输出

使用 minted 混合 Python 代码和输出

我用它minted来突出显示 Python 中的代码。在某些情况下,我想将代码与用户将看到的输出混合在一起。这会给我红色的语法错误框,例如:

在此处输入图片描述

有时它不会给我任何错误,但我想关闭突出显示(第二行):

在此处输入图片描述

所以我想知道是否可以关闭几行突出显示,但同时保留行号和背景等选项。

梅威瑟:

\documentclass{article}

\usepackage{minted}
\definecolor{bg}{rgb}{0.95,0.95,0.95}
\newminted{python3}{bgcolor=bg, linenos=true, tabsize=4}

\begin{document}

I want lines 2 and 4 not to be highlighted but still keep the background and line numbering.

\begin{python3code}
>>> type(3.14)
<class 'float'>
>>> print(name)
NameError: name 'name' is not defined
\end{python3code}

\end{document}

编辑:澄清一下:有些行我想突出显示,它们以 开头>>>,有些行我想突出显示,它们不以 开头>>>。还有些行我不想突出显示。因此,默认应该是突出显示该行,但我可以为某些行添加例外。

答案1

简而言之:编写一个特殊的词法分析器。但你很幸运,它已经存在,只需用作pycon语言即可。

\newminted{pycon}{bgcolor=bg, linenos=true, tabsize=4}

答案2

解决您的问题的一个非常简单的方法是预处理代码,在#每行不以 开头的行之前添加 ,这样至少看起来还不错,即使它不是 python 控制台输出的完美副本。这可以通过使用正则表达式选项或使用Unix 上的其他工具(例如)>>>在很多编辑器中完成。sed

不过,前导>>>可能仍会使 Python 词法分析器失灵。在这种情况下,您可以删除它们(您会失去对原始文本的更多保真度,但输出将看起来像注释,因此可读性会更好)。

答案3

从文档的快速浏览来看minted,该软件包似乎不支持该功能。无论如何,指定特定的行号似乎是一种非常丑陋的做法。

但它使用pygmentize作为后端和你想要的行不是忽略符合非常具体的模式,它们都以 开头>>>,因此必须易于通过编程检测和忽略它们。

看着关于编写自己的词法分析器的 pygments 文档,似乎您可以指定对于某些模式(正则表达式),您希望让另一个词法分析器处理字符串。然后,您可以处理不以 开头的行>>>,并将以 开头的行(不带>>>)传递给常规 Python 词法分析器。

相关内容