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:

resultado requerido

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:

listados ejemplo de látex: Además de lado [ “Además copas” modificado de Bit twiddling Hacks]

¿Fue útil?

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.

fantasía ejemplo látex

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

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top