Package LaTeX pour la coloration syntaxique du code dans différentes langues

164

Je recherche un package LaTeX qui met en évidence la syntaxe du code. Par exemple, en ce moment, j'utilise le bloc verbatim pour écrire du code:

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

Et cela fonctionne très bien pour afficher le code sur mon document. Mais, supposons que je veuille mettre en évidence le balisage HTML comme le ferait un IDE dans le document de sortie? Existe-t-il un package qui pourrait vous aider?

J'aimerais faire de même pour différents langages tels que Java, C #, HTML, CSS, etc.

Vincent Ramdhanie
la source
4
Je ne suis pas satisfait lstlisting. Il ne met pas du tout en évidence le code XML et se trompe lors de l'utilisation de caractères Unicode étrangers. JavaScript n'est pas non plus pris en charge, comme il semble. LGrind peut-il gérer de telles choses?
webjunkie

Réponses:

157

Vous pouvez utiliser le package des listes . Il prend en charge de nombreuses langues différentes et il existe de nombreuses options pour personnaliser la sortie.

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}
ChrisN
la source
20
Est-ce que cela fait des couleurs par défaut? Je ne vois pas de sortie colorée dans mon utilisation de test, et je ne sais pas si c'est une erreur de ma part, ou tout simplement pas une fonctionnalité.
Benson
12
J'ai trouvé une réponse ici: tjansson.dk/?p=419 . Vous pouvez simplement utiliser la commande lstset pour définir toutes sortes de styles pour différentes propriétés.
Benson
144

Après avoir posé une question similaire, j'ai créé un autre package qui utilise Pygments et offre un certain nombre d'options de plus que texments. Il s'appelle mintedet est assez stable et utilisable.

Juste pour le montrer, voici un code surligné avec frappé:

Exemple de code

Konrad Rudolph
la source
C'est en fait un très bon travail. Avoir à installer Pygments pose un peu un défi, mais je suis sûr que la plupart des gens seront prêts à le faire.
Vincent Ramdhanie
1
@Vincent: Malheureusement, l'installation de Pygments sous Windows est un peu plus compliquée pour le moment (l'utilisateur doit adapter la PATHvariable et créer un script cmd). J'espère convaincre les responsables de Pygments d'expédier pygmentizeavec un .exeemballage pour faciliter cette étape.
Konrad Rudolph
1
Après avoir essayé les deux listes et frappé / Pygments, j'ai décidé que le frappé était beaucoup mieux (plus flexible). TOUTEFOIS, il faudra sauter à travers une douzaine de cerceaux, passer à MiKTeX 2.8, installer Python, installer d'autres composants, etc. La documentation fraiche est médiocre et ne prend pas en charge les longues files d'attente. Mais finalement je l'ai eu pour rendre Java / XML dans les couleurs Eclipse! jevon.org/wiki/Eclipse_Pygments_Style
jevon
@soundasleepful: La documentation rédigée est continuellement mise à jour. ;-) Je le trouve en fait assez étendu (bien sûr je suis partial) mais je suis heureux de répondre à toutes les plaintes. En l'état, la section «exigences» est certes affreuse.
Konrad Rudolph
3
mintedest installé et fonctionne à la fois sur ShareLatex et Overleaf. Épargnez-vous le mal de tête de l'installation de Pygments;)
grofte
21

Je recommande Pygments . Il accepte un morceau de code dans n'importe quel langage et génère la syntaxe du code LaTeX mis en évidence. Il utilise les packages fancyvrb et color pour produire sa sortie. Personnellement, je le préfère au package d'inscription. Je pense que fancyvrb crée des résultats beaucoup plus jolis .

reprogrammeur
la source
1
Bien que j'admire la macrologie derrière les listes, je conviens également que les pygments ont l'avantage: une mise en évidence plus agréable, une personnalisation plus facile, une certaine capacité à mélanger les syntaxes et la possibilité de générer des formats autres que Latex, tels que HTML.
Charles Stewart
Sur un beamerdocument type, c'est apparemment la seule option fonctionnelle. Ni mintedni listingscompilez correctement avec beamer.
Luís de Sousa
Oui, j'ai utilisé listingsavec beamer, mais vous devez spécifier que les cadres qui incluent des listes le sont [fragile].
Supernormal du
11

LGrind fait cela. C'est un package LaTeX mature qui existe depuis qu'Adam était un cow-boy et prend en charge de nombreux langages de programmation.

ConcernedOfTunbridgeWells
la source
10

J'utiliserais le package frappé comme mentionné par le développeur Konrad Rudolph au lieu du package de liste . Voici pourquoi:

package d'inscription

Le package de liste ne prend pas en charge les couleurs par défaut. Pour utiliser les couleurs, vous devez inclure le package de couleurs et définir vous-même les règles de couleur avec la commande \ lstset comme expliqué pour le code matlab ici .

De plus, le package de liste ne fonctionne pas bien avec unicode, mais vous pouvez résoudre ces problèmes comme expliqué ici et ici .

Le code suivant

\documentclass{article}
\usepackage{listings}

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

produit l'image suivante:

entrez la description de l'image ici

paquet frappé

Le paquet frappé prend en charge les couleurs, l'unicode et a l'air génial. Cependant, pour l'utiliser, vous devez avoir python 2.6 et pygments . Dans Ubuntu, vous pouvez vérifier votre version de python dans le terminal avec

python --version

et vous pouvez installer des pygments avec

sudo apt-get install python-pygments

Ensuite, puisque frappé fait des appels aux pygments, vous devez le compiler avec -shell-escape comme ceci

pdflatex -shell-escape yourfile.tex

Si vous utilisez un éditeur latex comme TexMaker ou autre, je vous recommande d'ajouter une commande utilisateur, afin que vous puissiez toujours le compiler dans l'éditeur.

Le code suivant

\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}

produit l'image suivante:

entrez la description de l'image ici

Adam
la source
4

J'utilise principalement les lstlistings dans les papiers, mais pour les sorties colorées (pour les diapositives), j'utilise plutôt des pygments.

Paul Biggar
la source