Pacchetto LaTeX per l'evidenziazione della sintassi del codice in varie lingue


164

Sto cercando un pacchetto LaTeX che evidenzi la sintassi sul codice. Ad esempio, in questo momento utilizzo il blocco testuale per scrivere il codice:

\begin{verbatim}
    <html>
       <head>
           <title>Hello</title>
       </head>
       <body>Hello</body>
    </html>
\end{verbatim}

E questo funziona benissimo per visualizzare il codice sul mio documento. Ma supponiamo di voler evidenziare il markup HTML come farebbe un IDE nel documento di output? C'è un pacchetto che potrebbe aiutare?

Vorrei fare lo stesso per vari linguaggi come Java, C #, HTML, CSS e così via.


4
Non sono soddisfatto lstlisting. Non evidenzia affatto il codice XML e si rovina quando si usano caratteri Unicode estranei. Anche JavaScript non è supportato, come sembra. LGrind può gestire queste cose?
webjunkie,

Risposte:


157

È possibile utilizzare il pacchetto di elenchi . Supporta molte lingue diverse e ci sono molte opzioni per personalizzare l'output.

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

20
Questo fa i colori di default? Non vedo output a colori nel mio utilizzo di test e non sono sicuro che si tratti di un errore da parte mia o semplicemente di una funzione.
Benson,

12
Ho trovato una risposta qui: tjansson.dk/?p=419 . Puoi semplicemente usare il comando lstset per impostare tutti i tipi di stili per proprietà diverse.
Benson,

144

Dopo aver posto una domanda simile, ho creato un altro pacchetto che utilizza Pygments e offre molte più opzioni di texments. Si chiama minteded è abbastanza stabile e utilizzabile.

Giusto per mostrarlo, ecco un codice evidenziato con coniato:

Codice di esempio


Questo è in realtà un ottimo lavoro. Dover installare Pygments rappresenta una sfida, ma sono sicuro che la maggior parte delle persone sarà disposta a farlo.
Vincent Ramdhanie,

1
@Vincent: Sfortunatamente, l'installazione di Pygments su Windows è al momento un po 'più complicata (l'utente deve adattare la PATHvariabile e creare uno script cmd). Spero di convincere i manutentori di Pygments a spedire pygmentizecon un .exeinvolucro per facilitare questo passaggio.
Konrad Rudolph,

1
Dopo aver provato entrambi gli elenchi e coniato / Pygments ho deciso che coniato era molto meglio (più flessibile). Tuttavia, sarà necessario saltare attraverso una dozzina di cerchi, passare a MiKTeX 2.8, installare Python, installare altri componenti e così via. La documentazione non elaborata è scarsa e non supporta l'interruzione di lunghe righe. Ma alla fine sono riuscito a renderlo Java / XML nei colori Eclipse! jevon.org/wiki/Eclipse_Pygments_Style
jevon

@soundasleepful: la documentazione coniata viene continuamente aggiornata. ;-) In realtà lo trovo piuttosto esteso (ovviamente sono di parte) ma sono felice di rispondere a qualsiasi lamentela. Allo stato attuale, la sezione "requisiti" è certamente terribile.
Konrad Rudolph,

3
mintedè installato e funziona sia su ShareLatex che su Overleaf. Salvatevi il mal di testa dell'installazione di Pygments;)
grofte

21

Raccomando Pygments . Accetta un pezzo di codice in qualsiasi lingua e genera il codice LaTeX evidenziato dalla sintassi. Usa i pacchetti fancyvrb e color per produrre il suo output. Personalmente lo preferisco al pacchetto di elenchi. Penso che fancyvrb crei risultati molto più belli .


1
Mentre ammiro la macrologia dietro gli elenchi, concordo anche sul fatto che i pigmenti hanno un vantaggio: evidenziazione più gradevole, personalizzazione più semplice, una certa capacità di mescolare le sintassi e la capacità di produrre in formati diversi dal Latex, come HTML.
Charles Stewart,

Su un beamerdocumento di tipo questa è apparentemente l'unica opzione funzionale. Né mintedlistingscompilare correttamente con beamer.
Luís de Sousa,

Sì, l'ho usato listingscon beamer, ma devi specificare che sono i frame che includono elenchi [fragile].
Supernormal


10

Vorrei usare il pacchetto coniato come menzionato dallo sviluppatore Konrad Rudolph invece del pacchetto di elenchi . Ecco perché:

pacchetto di elenchi

Il pacchetto di elenchi non supporta i colori per impostazione predefinita. Per usare i colori dovresti includere il pacchetto colori e definire tu stesso le regole dei colori con il comando \ lstset come spiegato qui per il codice matlab .

Inoltre, il pacchetto di elenchi non funziona bene con Unicode, ma puoi risolvere questi problemi come spiegato qui e qui .

Il seguente codice

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

produce la seguente immagine:

inserisci qui la descrizione dell'immagine

pacchetto coniato

Il pacchetto coniato supporta colori, unicode e sembra fantastico. Tuttavia, per usarlo, devi avere Python 2.6 e Pygments . In Ubuntu, puoi controllare la tua versione di Python nel terminale con

python --version

e puoi installare i pigmenti con

sudo apt-get install python-pygments

Quindi, poiché il conio effettua chiamate ai pigmenti, è necessario compilarlo con -shell-escape in questo modo

pdflatex -shell-escape yourfile.tex

Se usi un editor in lattice come TexMaker o qualcosa del genere, ti consiglio di aggiungere un comando utente, in modo da poterlo ancora compilare nell'editor.

Il seguente codice

\documentclass{article}
\usepackage{minted}
\begin{document}

\begin{minted}{html}
    <!DOCTYPE html>
    <html>
       <head>
           <title>Hello</title>
       </head>

       <body>Hello</body>
    </html>
\end{minted}
\end{document}

produce la seguente immagine:

inserisci qui la descrizione dell'immagine


4

Uso principalmente lstlistings nei documenti, ma per l'output a colori (per le diapositive) uso invece i pigmenti.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.