El código fuente destacando en LaTeX
-
21-09-2019 - |
Pregunta
necesito código fuente destacado en LaTeX. El paquete de listings
parece ser la mejor opción para la mayoría de los casos de uso y para mi era, hasta ahora.
Sin embargo, ahora necesito más flexibilidad. En general, lo que estoy buscando es un real lexer. En particular, necesito (para una definición propia lengua) para definir (y mejor!) Propios estilos de número. listings
no permite poner de relieve los números de código. Sin embargo, necesito para producir algo como esto:
listings
también no puede hacer frente con delimitadores arbitrarios para cuerdas. Considere el siguiente código Ruby válida:
s = %q!this is a string.!
A continuación, !
puede ser reemplazado por casi cualquier delimitador.
(Eso listings
no puede manejar Unicode es también bastante irritante, pero eso es otro tema.)
Lo ideal es que estoy buscando una extensión de listings
que me permite establecer normas Lexing más complejas. Pero salvo eso, también estoy buscando alternativas viables.
Otros hilos Pygments que puede producir una salida de LaTeX. Incluso hay un paquete - texments
- para facilitar la transición.
Sin embargo, esto carece de muy características. En particular, estoy interesado en la numeración de estilo listings
línea, las referencias de líneas de código fuente, y la posibilidad de incrustar en el código fuente de LaTeX (opciones texcl
y mathescape
en listings
).
A modo de ejemplo, he aquí una composición tipográfica código fuente con listings
la que muestra algunas de las cosas que un reemplazo deberían también contener:
[ “Además copas” modificado de Bit twiddling Hacks]
Solución
Siguiendo el consejo de Norman para el corazón, he hackeado juntos una solución que utiliza (un parcheado ) Pygments para resaltar y empujado en tantas características como sea posible sin estallar; -)
También he creado un paquete de látex, una vez que mi parche Pygments fue lanzado en versión 1.2 ...
Presentación Minted
Minted es un paquete que utiliza Pygments para proporcionar sintaxis de primera categoría destacando en LaTeX. Por ejemplo, se permite la siguiente salida.
Aquí hay un archivo mínimo para reproducir el código anterior (aviso de que la inclusión de caracteres Unicode puede 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 puede ser escritas usando el siguiente comando:
xelatex -shell-escape test.tex
(Pero Minted también funciona con latex
y pdflatex
...)
funciona de forma similar a minted.sty
texments.sty
pero permite funciones adicionales.
¿Cómo conseguirlo
-
Minted es enumeran en CTAN ( paquete de información )
-
documentación es, por supuesto, incluido.
-
Minted ahora es mantenido por Geoffrey Poore. La versión de desarrollo, incluyendo la última
.sty
archivo , está disponible en github.com/gpoore/minted , y puede ser clonado a partir de ahí.
Una vez más, gracias a Norman por motivarme para producir este paquete.
Otros consejos
TeX es (famoso) Turing completo, pero estoy bastante seguro de que vamos a tener que escribir esta extensión usted mismo. La documentación deja claro que el autor original de listings
huérfano que en 2004, y que no ha sido actualizado desde 2006. El paquete no fue diseñado para reemplazar el formato de los literales numéricos, pero que podría ser capaz de modificarla cambiando la definición de \lst@ProcessDigit
. Si esto no funciona, usted tiene que entender en detalle cómo las opciones de "estilo" identificador de trabajo, y vas a tener que duplicar esa maquinaria para sus literales numéricos.
Yo no entiendo muy bien por qué estás tan reacios a introducir una herramienta externa en su cadena de herramientas, sino porque es usted, usted tendrá que hacer trabajo extra. Después de un vistazo al código fuente, espero que la modificación de listings
debería ser posible, pero yo personalmente elegiría para preprocesar mi látex en su lugar.
Este es un paquete que convierte el código fuente para TeX y LaTeX con resaltado de sintaxis. Es posible añadir encargo programación definiciones de la lengua con facilidad.
Resalte soporta 100 lenguajes de programación e incluye 50 temas de color. Cuenta con cambio de formato de código y sangría.
No lo han utilizado para saber qué tan bien funciona, pero alguien que conozco dicho funcionó bastante bien. Si me da la oportunidad de, voy a tratar yo mismo y ver.