Necesito resaltar el código fuente en LaTeX. El paquetelistings
parece 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 idioma propia) definir (¡y resaltar!) Estilos de números propios. listings
no permite resaltar números en el código. Sin embargo, necesito producir algo como esto:
listings
tampoco puede 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.
(Eso listings
no puede manejar Unicode también es bastante molesto, pero ese es otro problema).
Idealmente, estoy buscando una extensión listings
que me permita proporcionar reglas de lexing más complejas. Pero salvo eso, también estoy buscando alternativas viables.
Otros hilos han sugerido usar Pygments que pueden producir resultados de LaTeX. Incluso hay un paquete texments
para facilitar la transición.
Sin embargo, esto carece de características. En particular, estoy interesado en la listings
numeración de líneas de estilo, referencias de línea de código fuente y la posibilidad de incrustar LaTeX en el código fuente (opciones texcl
y mathescape
en listings
).
Como ejemplo, aquí hay un tipo de código fuente con el listings
que se muestran algunas de las cosas que un reemplazo también debe proporcionar:
["Adición lateral" modificada de Bit Twiddling Hacks]
fuente
Respuestas:
Tomando en serio el consejo de Norman, he pirateado una solución que usó Pygments ( parcheados ) para resaltar e introduje la mayor cantidad de características posibles sin reventar ;-)
También he creado un paquete LateX, una vez que mi parche Pygments fue lanzado en la versión 1.2 ...
Presentación acuñada
Minted es un paquete que utiliza Pygments para proporcionar sintaxis de primera categoría destacando 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 puede requerir XeTeX)!
Esto se puede componer usando el siguiente comando:
(Pero acuñado también funciona con
latex
ypdflatex
...)minted.sty
funciona de manera similartexments.sty
pero permite características adicionales.Cómo conseguirlo
Minted se enumeran en CTAN ( información del paquete )
Por supuesto, la documentación está incluida.
acuñado ahora es mantenido por Geoffrey Poore. La versión de desarrollo, incluido el último
.sty
archivo , está disponible en github.com/gpoore/minted , y se puede clonar desde allí.Una vez más, gracias a Norman por motivarme a producir este paquete.
fuente
easy_install
) el proceso nunca será muy suave.TeX es (famoso) Turing completo, pero estoy bastante seguro de que tendrá que escribir esta extensión usted mismo. La documentación deja en claro que el autor original lo
listings
dejó huérfano en 2004 y que no se actualizó desde 2006. El paquete no fue diseñado para anular el formato de los literales numéricos, pero es posible que pueda modificarlo cambiando el definicion de\lst@ProcessDigit
. Si eso no funciona, deberá comprender en detalle cómo funcionan las opciones de "estilo de 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 debido a que lo eres, tendrás que hacer un trabajo adicional. Después de echar un vistazo al código fuente, espero que la modificación
listings
sea posible, pero personalmente elegiría procesar mi LaTeX en su lugar.fuente
\label
s dentro del código.listings
, ya he echado un vistazo a su origen, y desafortunadamente, no lo entiendo en absoluto. Mis habilidades de TeX no están cerca de ese nivel. Hasta ahora, solo he usado el subconjunto LaTeX de TeX de todos modos.minted
mediante el proceso de publicación LNCS de Springer.Este es un paquete que convierte el código fuente a TeX y LaTeX con resaltado de sintaxis. Es posible agregar fácilmente definiciones de lenguaje de programación personalizadas.
Highlight admite 100 lenguajes de programación e incluye 50 temas de colores. Cuenta con reformateo y sangría de código.
No lo he usado para saber cómo funciona BIEN, pero alguien más que conozco dijo que funcionó bastante bien. Si tengo la oportunidad, lo probaré yo mismo y veré.
fuente
highlight
Sin embargo, comparte todos los problemas de Pygments. En particular, no es un paquete LaTeX , a pesar de lo que dice su descripción. Es simplemente un programa independiente. El problema, al igual que con Pygments, es cómo usarlo significativamente desde LaTeX y proporcionar todas las cosas buenas quelistings
tiene.