2010-07-04 72 views
273

¿Cómo inserto el código en un documento de látex? ¿Hay algo como:Escribir código en el documento de látex

\begin{code} 
... 
\end{code} 

Lo único que realmente necesito es una sangría y una fuente de ancho fijo. El resaltado de sintaxis podría ser bueno, aunque definitivamente no es obligatorio.

+0

No es un duplicado exacto, pero las respuestas cubren el mismo terreno: ver http://stackoverflow.com/questions/741985/latex-source-code-listing-like-in-professional-books –

+0

También tengo un seguimiento aquí la pregunta: http://stackoverflow.com/questions/3408996/insert-code-into-a-latex-doc-without-leading-tabs – sixtyfootersdude

Respuesta

450

Utilice Listings paquete.

Configuración sencilla para la cabecera de látex (antes \begin{document}):

\usepackage{listings} 
\usepackage{color} 

\definecolor{dkgreen}{rgb}{0,0.6,0} 
\definecolor{gray}{rgb}{0.5,0.5,0.5} 
\definecolor{mauve}{rgb}{0.58,0,0.82} 

\lstset{frame=tb, 
    language=Java, 
    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 
} 

Usted puede cambiar el idioma predeterminado en el medio del documento con \lstset{language=Java}.

Ejemplo de uso en el documento:

\begin{lstlisting} 
// Hello.java 
import javax.swing.JApplet; 
import java.awt.Graphics; 

public class Hello extends JApplet { 
    public void paintComponent(Graphics g) { 
     g.drawString("Hello, world!", 65, 95); 
    }  
} 
\end{lstlisting} 

Aquí está el resultado:

Example image

+2

Tengo una pregunta de seguimiento relacionada con su código. Eche un vistazo si tiene la oportunidad: http://stackoverflow.com/questions/3408996/insert-code-into-a-latex-doc-without-leading-tabs – sixtyfootersdude

+0

Tenga en cuenta que la url de la imagen resultante está rota. Supongo que es mejor subir la imagen directamente a stackoverflow en lugar de sitios web de terceros. –

+1

¿Hay alguna manera de reducir el espacio entre líneas de código? – sukhvir

89

También podría utilizar el entorno verbatim

\begin{verbatim} 
your 
code 
example 
\end{verbatim} 
+1

Intenté esto pero no preserva la sangría del código. – sixtyfootersdude

+34

Existe un problema con el uso de pestañas dentro del entorno literario. Si las pestañas se convierten en "espacio", el problema desaparece. – midtiby

+0

Esto es bueno para mostrar el contenido del archivo de texto de ejemplo (por ejemplo, datos de texto para ser leídos/procesados ​​por un programa). – nalyd88

27

Paquetes especializados como minted, que se basa en Pygments para hacer el formateo, ofrecen varias ventajas sobre el paquete listings. Para citar el manual minted,

Pygments ofrece un resaltado de sintaxis muy superior en comparación con los paquetes convencionales. Por ejemplo, las listas básicamente solo resaltan cadenas, comentarios y palabras clave. Pygments, por otro lado, se puede personalizar completamente para resaltar cualquier tipo de token que el lenguaje de origen pueda soportar. Esto podría incluir secuencias de formato especiales dentro de cadenas, números, diferentes tipos de identificadores y construcciones exóticas como etiquetas HTML.

+0

He intentado acuñado, la documentación es bastante directa. El estilo predeterminado es bueno. – user2262504

+2

Esto puede ser una solución insatisfactoria para muchos usuarios, debido a la llamada externa requerida por Pygmentsic. En particular, el requisito de llamar al látex con la directiva '-shell-escape' es, en el mejor de los casos, una pequeña modificación de los sistemas de compilación existentes y, en el peor, incompatible con las preferencias de seguridad de algunos usuarios. – KDN

66

Esta es una vieja pregunta, pero noté que nadie dijo cómo agregar el código en línea.

Puede agregar el código en línea con {\tt code } o \texttt{ code }. Si desea formatear el código en línea, entonces sería mejor para hacer su propio comando

\newcommand{\code}[1]{\texttt{#1}} 

Además, tenga en cuenta que los bloques de código se pueden cargar desde otros archivos con

\lstinputlisting[breaklines]{source.c} 

breaklines no es requerido, pero me parece útil. Tenga en cuenta que deberá especificar \usepackage{listings} para este.

7

Use Minted.

Es un paquete que facilita el resaltado de sintaxis expresiva en LaTeX utilizando la poderosa biblioteca Pygments. El paquete también proporciona opciones para personalizar la salida del código fuente resaltado usando fancyvrb.

¡Es mucho más evolucionado y personalizable que cualquier otro paquete!

Cuestiones relacionadas