Je dois mettre en évidence le code source dans LaTeX. Le paquetage listings
semble être le meilleur choix pour la plupart des cas d'utilisation et pour moi il l'était jusqu'à présent.
Cependant, j'ai maintenant besoin de plus de flexibilité. Généralement, ce que je recherche, c’est un lexer real. En particulier, j'ai besoin (pour une définition de langage propre) de définir (et de mettre en évidence!) Les styles de numéro propres. listings
n'autorise pas la mise en évidence de nombres dans le code. Cependant, je dois produire quelque chose comme ceci:
listings
ne peut pas non plus gérer les délimiteurs arbitraires des chaînes. Considérez le code Ruby) valide suivant:
s = %q!this is a string.!
Ici, !
_ peut être remplacé par presque any délimiteur.
(listings
ne peut pas gérer Unicode est aussi très frustrant, mais c’est un autre problème.)
Idéalement, je recherche une extension de listings
qui me permette de fournir des règles de lexing plus complexes. Mais à part cela, je cherche aussi des alternatives viables.
Autres discussions ont suggéré d'utiliser Pygments qui peut produire une sortie LaTeX. Il y a même un paquet - texments
- pour faciliter la transition.
Cependant, cela manque cruellement de fonctionnalités. En particulier, je m'intéresse à la numérotation des lignes de style listings
-, aux références aux lignes du code source et à la possibilité d'incorporer LaTeX dans le code source (options texcl
et mathescape
dans listings
).
À titre d’exemple, voici un code source composé avec listings
qui montre certaines des choses qu’un remplacement devrait également fournir:
[“Ajout latéral” modifié de Bit Twiddling Hacks]
Prenant à cœur les conseils de Norman, j’ai mis au point une solution qui utilisait (un corrigé ) Pygments pour mettre en évidence et intégrer autant de fonctionnalités que possible sans éclater ;-)
J’ai également créé un paquet LateX, une fois mon correctif Pygments publié dans version 1.2 …
minted est un paquet qui utilise Pygments pour fournir une mise en évidence de la syntaxe de qualité supérieure dans LaTeX. . Par exemple, il permet la sortie suivante.
Voici un fichier minimal pour reproduire le code ci-dessus (notez que l’inclusion de caractères Unicode peut nécessiter XeTeX)!
\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage{minted}
\setsansfont{Calibri}
\setmonofont{Consolas}
\begin{document}
\renewcommand{\theFancyVerbLine}{
\sffamily\textcolor[rgb]{0.5,0.5,0.5}{\scriptsize\arabic{FancyVerbLine}}}
\begin{minted}[mathescape,
linenos,
numbersep=5pt,
gobble=2,
frame=lines,
framesep=2mm]{csharp}
string title = "This is a Unicode π in the sky"
/*
Defined as $\pi=\lim_{n\to\infty}\frac{P_n}{d}$ where $P$ is the perimeter
of an $n$-sided regular polygon circumscribing a
circle of diameter $d$.
*/
const double pi = 3.1415926535
\end{minted}
\end{document}
Cela peut être composé en utilisant la commande suivante:
xelatex -Shell-escape test.tex
(Mais frappée fonctionne également avec latex
et pdflatex
…)
minted.sty
fonctionne de manière similaire à texments.sty
mais permet des fonctionnalités supplémentaires.
minted est listé sur CTAN ( informations sur le paquet )
La documentation est bien entendu incluse.
frappés est maintenant mis à jour par Geoffrey Poore. La version de développement, y compris la dernière version .sty
_ fichier , est disponible à l’adresse suivante: github.com/gpoore/minted , et peut être cloné à partir de cet emplacement.
Encore une fois, merci à Norman de m'avoir motivée à produire ce package.
TeX est (célèbre) Turing-complete, mais je suis sûr que vous allez devoir écrire cette extension vous-même. La documentation indique clairement que l'auteur original de listings
l'a orphelin en 2004 et qu'il n'a pas été mis à jour depuis 2006. Le paquet n'a pas été conçu pour remplacer le formatage des littéraux numériques, mais vous pourriez peut-être pour le modifier en changeant la définition de \lst@ProcessDigit
. Si cela ne fonctionne pas, vous devrez comprendre en détail comment fonctionnent les options de "style d'identificateur", et vous devrez dupliquer cette machine pour vos littéraux numériques.
Je ne comprends pas très bien pourquoi vous êtes si réticent à introduire un outil externe dans votre chaîne d'outils, mais comme vous l'êtes, vous devrez faire un travail supplémentaire. Après avoir examiné le code source, je pense que la modification de listings
devrait être possible, mais je choisirais personnellement de prétraiter mon LaTeX.
This est un paquet qui convertit le code source en TeX et LaTeX avec la coloration syntaxique. Il est possible d'ajouter facilement des définitions de langage de programmation personnalisées.
Highlight prend en charge 100 langages de programmation et inclut 50 thèmes de couleurs. Il comporte le reformatage et l'indentation de code.
Je ne l'ai pas utilisé pour savoir comment BIEN fonctionne, mais quelqu'un d'autre que je connais a dit que cela fonctionnait plutôt bien. Si j'en ai l'occasion, je vais essayer moi-même et voir.