使用 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

#解決問題的一個非常簡單的解決方案是透過在不以 a 開頭的每行之前添加 來預處理程式碼>>>,這至少看起來不錯,即使它不是 python 控制台輸出的完美副本。這可以透過許多編輯器透過使用 regex 選項或使用sedUnix 上的其他工具(例如)來完成。

不過,前導>>>可能還是會讓 Python 詞法分析器失望。在這種情況下,您可以刪除這些內容(您會失去原始內容的更多保真度,但它是可讀的,因為輸出看起來像註釋)。

答案3

快速瀏覽一下minted的文檔,該包似乎不支援該功能。無論哪種方式指定特定的行號似乎都是一種非常醜陋的方式。

但它用作pygmentize後端和您想要的線路不是忽略適合一個非常特定的模式,它們都以 開頭>>>,因此必須易於以程式方式檢測和忽略它們。

看著關於編寫自己的詞法分析器的 pygments 文檔,似乎您可以指定對於某些模式(正規表示式)您想要讓另一個詞法分析器處理字串。然後,您可以處理不以 開頭的行>>>,並將那些以 開頭的行(不帶>>>)傳遞給常規 Python 詞法分析器。

相關內容