Insérer des listings dans un fichier LaTeX en UTF-8

Depuis bien longtemps, j’utilise le package listings pour insérer du code source dans des fichiers LaTeX (notamment pour le poly d’algorithmique et Programmation des L2 à Valence). Hélas, ce package pose bien des problèmes en particulier si vous utilisez un encodage UTF-8.

En fait, les problèmes surviendront si, dans le source à inclure, vous avez des caractères accentués. Cela ne semble pas insurmontable pour un informaticien « old school », mais, de nos jour, avec la multilinguïsation d’internet, il est assez courant de travailler avec du code source contenant des caractères UTF-8. C’est mon cas… Tous mes projets sont en UTF-8 et le fait que j’utilise Java (+ maven) me simplifie bien la vie pour cela.

De plus, si comme moi vous utilisez les commentaires pour expliquer des choses à vos étudiants francophone, la probabilité d’avoir un caractère accentué est grande…

Avec le package listings

Jusqu’à maintenant, j’utilisais le package listings. Pour cela, mes fichiers LaTeX étaient sauvées en iso-latin1 et j’utilisais des contournements pour permettre un bon rendu des accents.

Avantages : Ca marche sur toutes les bonnes installations LaTeX, c’est inclus dans les texlive.

Inconvénients : Utiliser iso-latin-1 me déplait fondamentalement… Et si je veux commenter en français un code qui contient du japonais ?

Des alternatives : minted/verbments

En regardant comment basculer sur XeLaTeX mes différents documents, j’ai cherché une alternative au package listings et je suis tombé sur minted (et une extension: verbments).

Ces packages sont capable d’insérer du code avec coloration de syntaxe pour des documents en UTF-8. L’inconvénient est qu’ils peuvent le faire car l’analyse lexicale du code à insérer est déléguée à un programme externe écrit en python.

Aussi, cette solution nécessite que soit installé python et Pygments sur la machine. De plus, il faut passer l’option -shell-escape au moteur latex (XeLaTeX ou pdfLaTeX).

Configurer son environnement: Sublime Texte + LatexTools

Python est déjà installé sur mon Mac, donc aucun pb… Pour installer Pygments:

sudo easy_install Pygments

Ca suffit pour les pré-requis. Il faut maintenant lancer la commande de compilation latex avec le bon paramètre. Dans mon cas, ce n’est pas trivial car je lance la compilation via LatexTools sous Sublime Text 3. Pour pouvoir passer le bon paramètre, il m’a fallut corriger les code du plugin en créant un « builder » customisé.

Pour cela, aller dans le dossier des packages et créer un dossier « builders » dans « User ». Y coller le fichier python suivant (simple adaptation du traditional builder): fichier python.

Puis modifiez les préférences de LatexTools pour invoquer ce builder.

Enfin, sur la première ligne du fichier, il vous faut indiquer l’option, en plus du moteur:

%!TEX program = xelatex -shell-escape

Voilà…