Usando acuñado con código y salida Python mixtos

Usando acuñado con código y salida Python mixtos

Estoy usando mintedpara resaltar código en Python. En algunos casos, quiero mezclar código con resultados que verá el usuario. Esto me da los cuadros de error de sintaxis rojos, por ejemplo así:

ingrese la descripción de la imagen aquí

Y a veces no me da ningún error pero me gustaría desactivar el resaltado (segunda línea):

ingrese la descripción de la imagen aquí

Entonces, me gustaría saber si es posible desactivar el resaltado de algunas líneas pero al mismo tiempo mantener opciones como la numeración de líneas y el fondo.

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}

Editar:Para aclarar: hay líneas que quiero resaltar que comienzan con >>>y hay líneas que quiero resaltar que no comienzan con >>>. También hay líneas que no quiero resaltar. Entonces, el valor predeterminado debería ser resaltar la línea, pero puedo agregar una excepción a algunas líneas.

Respuesta1

Lo breve y lo largo de esto es: escribir un léxer especial. Pero estás de suerte, ya existe, solo úsalo pyconcomo idioma.

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

Respuesta2

Una solución muy simple a su problema es preprocesar el código agregando a #antes de cada línea que no comience con a >>>, lo que al menos se verá bien aunque no sea una copia perfecta de la salida de la consola de Python. Esto se puede hacer con muchos editores usando la opción regex o usando otras herramientas ( sedpor ejemplo) en Unix.

Sin embargo, el líder >>>aún podría desviar el lexer de Python. En cuyo caso, podría eliminarlos (pierde más fidelidad al original, pero será legible ya que el resultado se verá como comentarios).

Respuesta3

De un vistazo rápido a mintedla documentación de, no parece que el paquete admita esa característica. De cualquier manera, especificar números de línea particulares parece una forma realmente fea de hacerlo.

Pero se utiliza pygmentizecomo back-end y las líneas que deseasnoignore se ajustan a un patrón muy específico, todos comienzan con >>>y, por lo tanto, debe ser fácil detectarlos e ignorarlos mediante programación.

Mirando ala documentación de pigmentos sobre cómo escribir su propio lexer, parece que puede especificar que para algunos patrones (regex) desea permitir que otro lexer maneje la cadena. Luego, podría manejar las líneas que no comienzan con >>>y pasar las que sí lo hacen (sin >>>) al lexer de Python normal.

información relacionada