Использование 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. Это можно сделать во многих редакторах с помощью опции regex или с помощью других инструментов ( sedнапример) в Unix.

Хотя лидирование >>>все еще может сбить лексер Python. В этом случае вы можете удалить их (вы потеряете больше точности к оригиналу, но он будет читаемым, поскольку вывод будет выглядеть как комментарии).

решение3

Из беглого взгляда на mintedдокументацию, похоже, что пакет не поддерживает эту функцию. В любом случае указание конкретных номеров строк кажется действительно уродливым способом сделать это.

Но он использует pygmentizeкак бэкэнд и строки, которые вы хотитенетигнорировать соответствует очень специфическому шаблону, все они начинаются с >>>, и поэтому их должно быть легко обнаружить и игнорировать программно.

Смотря надокументация pygments о написании собственного лексера, похоже, можно указать, что для некоторых шаблонов (регулярных выражений) вы хотите, чтобы другой лексер обрабатывал строку. Затем вы могли бы обработать строки, которые не начинаются с , >>>и передать те, которые начинаются (без >>>), обычному лексеру Python.

Связанный контент