我用它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 词法分析器。