Pythonコードと出力を混ぜてmintedを使用する

Pythonコードと出力を混ぜてmintedを使用する

Python でコードを強調表示するために使用していますminted。場合によっては、ユーザーに表示される出力とコードを混在させたいことがあります。これにより、次のような赤い構文エラー ボックスが表示されます。

ここに画像の説明を入力してください

また、エラーが発生しない場合もありますが、ハイライト表示をオフにしたい場合があります (2 行目)。

ここに画像の説明を入力してください

そこで私が知りたいのは、行番号や背景などのオプションを維持しながら、いくつかの行のハイライトをオフにすることが可能かどうかということです。

MWE:

\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しかし、バックエンドとして使用し、必要な行はないignore は非常に特殊なパターンに適合しており、すべて で始まる>>>ため、プログラムで簡単に検出して無視できるはずです。

見つめている独自のレキサーを書くための Pygments ドキュメント、一部のパターン (正規表現) に対して、別のレクサーで文字列を処理できるように指定できるようです。 で始まらない行を処理し>>>、 で始まる行 ( なし>>>) を通常の Python レクサーに渡すことができます。

関連情報