2010-07-04 17 views
273

Come si inserisce il codice in un documento in lattice? C'è qualcosa di simile:Scrittura del codice nel documento in lattice

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

L'unica cosa di cui ho veramente bisogno è il rientro e un carattere a larghezza fissa. L'evidenziazione della sintassi potrebbe essere piacevole sebbene non sia assolutamente necessaria.

+0

Non un duplicato esatto, ma le risposte coprono la stessa base: consultare http://stackoverflow.com/questions/741985/latex-source-code-listing-like-in-professional-books –

+0

Ho anche un seguito domanda qui: http://stackoverflow.com/questions/3408996/insert-code-into-a-latex-doc-without-leading-tabs – sixtyfootersdude

risposta

450

Utilizzare il pacchetto Listings.

Configurazione semplice per l'intestazione LaTeX (prima \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 
} 

È possibile cambiare la lingua di default nel mezzo del documento con \lstset{language=Java}.

Esempio di utilizzo del 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} 

Ecco il risultato:

Example image

+2

Ho una domanda di follow-up relativa al tuo codice. Dai un'occhiata se hai una possibilità: http://stackoverflow.com/questions/3408996/insert-code-into-a-latex-doc-without-leading-tabs – sixtyfootersdude

+0

Nota che l'url per l'immagine del risultato è rotta. Immagino sia meglio caricare l'immagine direttamente su StackOverflow anziché su siti Web di terzi. –

+1

C'è un modo per ridurre lo spazio tra le righe di codice? – sukhvir

89

Si potrebbe anche usare l'ambiente verbatim

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

Ho provato questo ma non conserva il rientro del codice. – sixtyfootersdude

+34

C'è un problema con l'utilizzo di tabulazioni all'interno dell'ambiente verbatim. Se le schede vengono convertite in "spazio", il problema scompare. – midtiby

+0

Questo è utile per mostrare il contenuto del file di testo di esempio (ad es. Dati testuali da leggere/elaborare da un programma). – nalyd88

27

I pacchetti specializzati come minted, che si basa su Pygments per eseguire la formattazione, offrono diversi vantaggi rispetto al pacchetto listings. Per citare il manuale minted,

Pygments offre un'evidenziazione della sintassi di gran lunga superiore rispetto ai pacchetti convenzionali. Ad esempio, le schede evidenziano solo stringhe, commenti e parole chiave. I pygments, d'altra parte, possono essere completamente personalizzati per evidenziare qualsiasi tipo di token che la lingua di partenza potrebbe supportare. Questo potrebbe includere speciali sequenze di formattazione all'interno di stringhe, numeri, diversi tipi di identificatori e costrutti esotici come i tag HTML.

+0

Ho provato conio, la documentazione è abbastanza semplice. Lo stile predefinito è smesso. – user2262504

+2

Questa potrebbe essere una soluzione insoddisfacente per molti utenti, a causa della chiamata esterna richiesta a Pygmentsic. In particolare, l'obbligo di chiamare il latex con la direttiva '-shell-escape' è, nella migliore delle ipotesi, una modifica minore ai sistemi di generazione esistenti e, nel peggiore dei casi, incompatibile con le preferenze di sicurezza di alcuni utenti. – KDN

66

Questa è una vecchia domanda, ma ho notato che nessuno ha detto come aggiungere codice in linea.

È possibile aggiungere il codice inline con {\tt code } o \texttt{ code }. Se si desidera formattare il codice inline, allora sarebbe meglio per rendere il proprio comando

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

Si noti inoltre che blocchi di codice possono essere caricati da altri file con

\lstinputlisting[breaklines]{source.c} 

breaklines non è richiesto, ma lo trovo utile Tieni presente che dovrai specificare \usepackage{listings} per questo.

7

Utilizzare Minted.

È un pacchetto che facilita l'evidenziazione della sintassi espressiva in LaTeX utilizzando la potente libreria Pygments. Il pacchetto fornisce anche opzioni per personalizzare l'output del codice sorgente evidenziato usando fancyvrb.

È molto più evoluto e personalizzabile di qualsiasi altro pacchetto!

Problemi correlati