pasar - Destacando el código fuente en LaTeX
paquete listings latex (3)
TeX es (famoso) Turing-completo, pero estoy bastante seguro de que vas a tener que escribir esta extensión tú mismo. La documentación deja en claro que el autor original de los listings
dejó huérfano en 2004, y que no se ha actualizado desde 2006. El paquete no fue diseñado para anular el formato de los literales numéricos, pero es posible que pueda modificarlo cambiando la definición de /lst@ProcessDigit
. Si eso no funciona, deberá comprender en detalle cómo funcionan las opciones de "estilo identificador", y deberá duplicar esa maquinaria para sus literales numéricos.
No entiendo por qué eres tan reacio a introducir una herramienta externa en tu cadena de herramientas, pero como lo eres, tendrás que hacer un trabajo extra. Después de ver el código fuente, espero que sea posible modificar los listings
, pero personalmente preferiría preprocesar mi LaTeX.
Necesito resaltar el código fuente en LaTeX. Los listings
paquetes parecen ser la mejor opción para la mayoría de los casos de uso y para mí lo era, hasta ahora.
Sin embargo, ahora necesito más flexibilidad. En general, lo que estoy buscando es un verdadero lexer. En particular, necesito (para una definición de lenguaje propio) definir (¡y resaltar!) Los propios estilos de números. listings
no permite resaltar números en el código. Sin embargo, necesito producir algo como esto:
listings
tampoco pueden hacer frente a delimitadores arbitrarios para cadenas. Considere el siguiente código válido de Ruby:
s = %q!this is a string.!
Aquí !
puede ser reemplazado por casi cualquier delimitador.
(Que los listings
no pueden manejar Unicode también es bastante molesto, pero ese es otro problema).
Idealmente, estoy buscando una extensión de listings
que me permita proporcionar reglas de lexing más complejas. Pero salvo eso, también estoy buscando alternativas viables.
Otros hilos han sugerido utilizar Pygments que pueden producir salida LaTeX. Incluso hay un paquete, texments
, para facilitar la transición.
Sin embargo, esto carece de características. En particular, estoy interesado en los listings
numeración de líneas de estilo, referencias de líneas de código fuente y la posibilidad de incrustar LaTeX en el código fuente (opciones texcl
y mathescape
en los listings
).
Como ejemplo, aquí hay un tipo de código fuente con listings
que muestra algunas de las cosas que un reemplazo también debería proporcionar:
["Adición lateral" modificada de Bit Twiddling Hacks]
Tomando en serio el consejo de Norman, he pirateado una solución que usaba (un patched ) Pygments para resaltar e introducir tantas características como fuera posible sin estallar ;-)
También creé un paquete LateX, una vez que mi parche Pygments fue lanzado en la versión 1.2 ...
Presentando acuñado
minted es un paquete que utiliza Pygments para proporcionar resaltado de sintaxis de primera en LaTeX. Por ejemplo, permite la siguiente salida.
Aquí hay un archivo mínimo para reproducir el código anterior (¡tenga en cuenta que incluir caracteres Unicode podría requerir XeTeX)!
/documentclass[a4paper]{article}
/usepackage{fontspec}
/usepackage{minted}
/setsansfont{Calibri}
/setmonofont{Consolas}
/begin{document}
/renewcommand{/theFancyVerbLine}{
/sffamily/textcolor[rgb]{0.5,0.5,0.5}{/scriptsize/arabic{FancyVerbLine}}}
/begin{minted}[mathescape,
linenos,
numbersep=5pt,
gobble=2,
frame=lines,
framesep=2mm]{csharp}
string title = "This is a Unicode π in the sky"
/*
Defined as $/pi=/lim_{n/to/infty}/frac{P_n}{d}$ where $P$ is the perimeter
of an $n$-sided regular polygon circumscribing a
circle of diameter $d$.
*/
const double pi = 3.1415926535
/end{minted}
/end{document}
Esto se puede componer usando el siguiente comando:
xelatex -shell-escape test.tex
(Pero acuñado también funciona con latex
y pdflatex
...)
minted.sty
funciona de forma similar a texments.sty
pero permite funciones adicionales.
Cómo conseguirlo
acuñado minted ( información del paquete )
la documentación está, por supuesto, incluida.
acuñado ahora es mantenido por Geoffrey Poore. La versión de desarrollo, incluido el último archivo
.sty
, está disponible en github.com/gpoore/minted , y puede clonarse desde allí.
Una vez más, gracias a Norman por motivarme a producir este paquete.
This es un paquete que convierte el código fuente en TeX y LaTeX con resaltado de sintaxis. Es posible agregar definiciones de lenguaje de programación personalizadas fácilmente.
Highlight admite 100 lenguajes de programación e incluye 50 temas de color. Presenta reformateo y sangría de código.
No lo he usado para saber cuán bien funciona, pero alguien más que conozco dijo que funcionó bastante bien. Si tengo la oportunidad, lo probaré yo mismo y lo veré.