
Estoy usando minted
para 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í:
Y a veces no me da ningún error pero me gustaría desactivar el resaltado (segunda línea):
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 pycon
como 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 ( sed
por 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 minted
la 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 pygmentize
como 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.