Lo que he aprendido: añadir código con sintaxis resaltada en Latex

Como os he comentado en otras ocasiones, le dije adiós a Word hace tiempo y escribo en Latex. A veces uso Libre Office Writer para cosas puntuales, pero muy poquito. Latex tiene lo malo de que cuesta aprenderlo, pero lo bueno es que te permite hacer cualquier cosa. Hoy traigo una de esas cosas: añadir código con sintaxis resaltada en un documento. Para ello utilizo el paquete listings.

Escribo esto en la cabecera:


\usepackage{listings}
\usepackage{color}
\usepackage{textcomp}
\lstset{
        tabsize=4,
        rulecolor=,
        basicstyle=\scriptsize,
        upquote=true,
        aboveskip={1.5\baselineskip},
        columns=fixed,
        showstringspaces=false,
        extendedchars=true,
        breaklines=true,
        prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}},
        showtabs=false,
        showspaces=false,
        showstringspaces=false,
        identifierstyle=\ttfamily,
        keywordstyle=\color[rgb]{0,0,1},
        commentstyle=\color[rgb]{0.133,0.545,0.133},
        stringstyle=\color[rgb]{0.627,0.126,0.941},
}

Uso esas opciones que adapté de aquí a mis gustos, pero si miráis en el manual encontraréis un montón de opciones de personalización.

A la hora de escribir el código hay dos opciones:

1) Pegar el código en el archivo .tex:


\begin{lstlisting}[language=matlab]
% El código (en este caso de Matlab) iría aquí
\end{lstlisting}

2) Importar el archivo con el código dando la ruta:


\lstinputlisting{../Matlab/cod.m}

También existe la opción de usar el paquete minted que se basa en un coloreador de sintaxis llamado Pygments que está escrito en Python. Tiene buena pinta pero no lo he probado, si queréis echarle un vistacillo aquí tenéis el manual.

Hasta aquí el post de hoy, espero que os resulte tan útil como a mí.

Anuncios

4 pensamientos en “Lo que he aprendido: añadir código con sintaxis resaltada en Latex

  1. Pingback: Lo que he aprendido: Markdown + pandoc para la ciencia | Onda Hostil

  2. Pedro Jorge De Los Santos

    Hola,

    Nada más comentar que también es posible definir entornos para un lenguaje específico y poder tener más de un lenguaje con diferente resaltado de sintaxis y esas cosas. Por ejemplo:

    \definecolor{dkgreen}{rgb}{0,0.6,0}
    \definecolor{gray}{rgb}{0.5,0.5,0.5}
    \definecolor{blue}{rgb}{0,0,1}
    \definecolor{mauve}{rgb}{0.58,0,0.82}
    \lstnewenvironment{matlab}{\lstset{frame=none,
    language=Matlab,
    aboveskip=3mm,
    belowskip=3mm,
    showstringspaces=false,
    columns=flexible,
    basicstyle={\small\ttfamily},
    numbers=none,
    numberstyle=\tiny\color{gray},
    keywordstyle=\color{blue},
    commentstyle=\color{dkgreen},
    stringstyle=\color{mauve},
    breaklines=true,
    breakatwhitespace=true,
    tabsize=3
    }}{}

    Y ya en el texto utilizar:

    \begin{matlab}
    % …
    \end{matlab}

    Pero bueno, tal como lo mencionas, existen varias opciones de configuración y uso de listings.

    Por lo que veo que te gusta probar diversas formas de procesar texto, lo cual es bueno. Si estás familiarizada con el ambiente Python puedes experimentar con Sphinx para generar documentos en HTML o PDF (pasando por LaTeX), a partir de texto plano estilizado con reStructuredText (algo parecido a Markdown).

    Saludos.

    Responder
  3. Ondiz Autor de la entrada

    ¡Hola!

    Gracias por pasarte por el blog y sobre todo por comentar.

    Me parece muy interesante lo que comentas de los diferentes resaltados según lenguaje, lo probaré. Sphinx también es un tema pendiente que tengo, lo conocía por el libro Aprende Haskell por el bien común, que está hecho así. ¡Cuando lo pruebe lo verás por aquí!

    Saludos

    Ondiz

    Responder
  4. Pingback: Lo que he aprendido: código en un documento con pandoc | Onda Hostil

¡Opina sin miedo! (Puedes usar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s