Paquete LaTeX para resaltar sintaxis de código en varios idiomas


164

Estoy buscando un paquete LaTeX que resalte la sintaxis en el código. Por ejemplo, ahora mismo uso el bloque literal para escribir código:

\begin{verbatim}
    <html>
       <head>
           <title>Hello</title>
       </head>
       <body>Hello</body>
    </html>
\end{verbatim}

Y esto funciona bien para mostrar el código en mi documento. Pero, ¿y si quisiera resaltar el marcado HTML como lo haría un IDE en el documento de salida? ¿Hay algún paquete que pueda ayudar?

Me gustaría hacer lo mismo para varios lenguajes como Java, C #, HTML, CSS, etc.


44
No estoy satisfecho con lstlisting. No resalta el código XML en absoluto y se arruina cuando se usan caracteres Unicode externos. JavaScript no es compatible, como parece. ¿Puede LGrind manejar tales cosas?
webjunkie

Respuestas:


157

Puede usar el paquete de listados . Admite muchos idiomas diferentes y hay muchas opciones para personalizar la salida.

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

20
¿Esto hace colores por defecto? No veo resultados en color en mi uso de prueba, y no estoy seguro de si eso es un error de mi parte, o simplemente no es una característica.
Benson el

12
Encontré una respuesta aquí: tjansson.dk/?p=419 . Simplemente puede usar el comando lstset para establecer todo tipo de estilos para diferentes propiedades.
Benson el

144

Después de hacer una pregunta similar , he creado otro paquete que usa Pygments y ofrece muchas más opciones que texments. Se llama mintedy es bastante estable y utilizable.

Solo para mostrarlo, aquí hay un código resaltado con acuñado:

Código de ejemplo


Este es realmente un buen trabajo. Tener que instalar Pygments plantea un pequeño desafío, pero estoy seguro de que la mayoría de las personas estarán dispuestas a hacerlo.
Vincent Ramdhanie

1
@Vincent: Desafortunadamente, instalar Pygments en Windows es bastante más complicado en este momento (el usuario tiene que adaptar la PATHvariable y crear un script cmd). Espero convencer a los encargados de Pygments de que envíen pygmentizeun .exeenvoltorio para facilitar este paso.
Konrad Rudolph el

1
Después de probar ambos listados y MENTED / Pygments, decidí que MENTEDED era mucho mejor (más flexible). SIN EMBARGO requerirá saltar a través de una docena de aros, actualizar a MiKTeX 2.8, instalar Python, instalar otros componentes, etc. La documentación acuñada es deficiente y no admite romper largas colas. ¡Pero finalmente lo conseguí para representar Java / XML en colores Eclipse! jevon.org/wiki/Eclipse_Pygments_Style
jevon

@soundasleepful: la documentación acuñada se actualiza continuamente. ;-) De hecho, lo encuentro bastante extenso (por supuesto que soy parcial) pero estoy feliz de atender cualquier queja. Tal como está, la sección de "requisitos" es ciertamente horrible.
Konrad Rudolph

3
mintedestá instalado y funciona en ShareLatex y Overleaf. Ahórrese el dolor de cabeza de instalar Pygments;)
grofte

21

Recomiendo Pygments . Acepta un fragmento de código en cualquier idioma y genera sintaxis resaltada en código LaTeX. Utiliza paquetes fancyvrb y color para producir su salida. Personalmente lo prefiero al paquete de listado. Creo que fancyvrb crea resultados mucho más bonitos.


1
Si bien admiro la macrología detrás de los listados, también estoy de acuerdo en que los pigmentos tienen la ventaja: un resaltado más agradable, una personalización más fácil, cierta capacidad de mezclar sintaxis y la capacidad de salida a formatos que no sean Latex, como HTML.
Charles Stewart

En un beamerdocumento tipo, aparentemente esta es la única opción funcional. Ni mintedni listingscompilar correctamente con beamer.
Luís de Sousa

Sí, he utilizado listingscon beamer, pero hay que especificar que los marcos que incluyen listados son [fragile].
Supernormal


10

Me gustaría utilizar el paquete acuñada como se mencionó desde el desarrollador Konrad Rudolph en lugar del paquete de lista . Aquí es por qué:

paquete de listado

El paquete de listado no admite colores por defecto. Para usar colores, debe incluir el paquete de colores y definir las reglas de color usted mismo con el comando \ lstset como se explica aquí para el código matlab .

Además, el paquete de listado no funciona bien con Unicode, pero puede solucionar esos problemas como se explica aquí y aquí .

El siguiente código

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

produce la siguiente imagen:

ingrese la descripción de la imagen aquí

paquete acuñado

El paquete acuñado admite colores, unicode y se ve increíble. Sin embargo, para usarlo, debe tener python 2.6 y pygments . En Ubuntu, puede verificar su versión de Python en la terminal con

python --version

y puedes instalar pigmentos con

sudo apt-get install python-pygments

Luego, dado que minted hace llamadas a pigmeos, debe compilarlo con -shell-escape de esta manera

pdflatex -shell-escape yourfile.tex

Si usa un editor de látex como TexMaker o algo así, recomendaría agregar un comando de usuario, para que aún pueda compilarlo en el editor.

El siguiente código

\documentclass{article}
\usepackage{minted}
\begin{document}

\begin{minted}{html}
    <!DOCTYPE html>
    <html>
       <head>
           <title>Hello</title>
       </head>

       <body>Hello</body>
    </html>
\end{minted}
\end{document}

produce la siguiente imagen:

ingrese la descripción de la imagen aquí


4

Principalmente utilizo listas en papeles, pero para la salida en color (para diapositivas) utilizo pigmentos en su lugar.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.