Mise en évidence du code Source dans LaTeX
je dois mettre en surbrillance le code source dans LaTeX. Le package listings
semble être le meilleur choix pour la plupart des cas d'utilisation et pour moi, c'était, jusqu'à maintenant.
cependant, maintenant j'ai besoin de plus de flexibilité. En général, ce que je cherche est un real lexer. En particulier, j'ai besoin (pour une définition de langage) de définir et de mettre en valeur!) propres styles de nombres. listings
ne permet pas de mettre en évidence les nombres dans le code. Cependant, j'ai besoin de produire quelque chose comme ceci:
listings
ne peut pas non plus faire face à des délimiteurs arbitraires pour les chaînes. Considérons le code Ruby valide suivant:
s = %q!this is a string.!
Ici, !
peut être remplacé par presque tout délimiteur.
(que listings
ne peut pas gérer Unicode est aussi assez vexant, mais c'est un autre problème.)
idéalement, je suis à la recherche d'une extension de listings
qui me permet de fournir des règles de lexing plus complexes. Mais à défaut, je suis aussi à la recherche d'alternatives viables.
autres fils ont suggéré d'utiliser Pygments qui peuvent produire la production de 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 des lignes de code source et à la possibilité d'intégrer LaTeX dans le code source (options texcl
et mathescape
dans listings
).
à titre d'exemple, voici un code source dactylographié avec listings
qui montre certaines des choses qu'un remplacement devrait également fournir:
3 réponses
prenant à cœur les conseils de Norman, j'ai hacké une solution qui utilisait (un patched ) Pygments pour mettre en évidence et enfoncer autant de caractéristiques que possible sans éclatement ; -)
j'ai aussi créé un paquet LateX, une fois mon patch Pygments sorti dans version 1.2 ...
Présentation frappées
minted est un paquet qui utilise Pygments pour fournir une mise en évidence syntaxique de premier ordre en 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 pourrait 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 dactylographié en utilisant la commande suivante:
xelatex -shell-escape test.tex
(mais minted fonctionne aussi avec latex
et pdflatex
...)
minted.sty
fonctionne comme texments.sty
mais permet des caractéristiques supplémentaires.
comment l'obtenir
-
documentation est bien sûr inclus.
-
minted est maintenant maintenu par Geoffrey Poore. La version de développement, y compris la dernière
.sty
fichier , est disponible à github.com/gpoore/minted , et peut être cloné à partir de là.
encore une fois, merci à Norman pour m'avoir motivé à produire ce package.
TeX est (célèbre) Turing-complet, mais je suis sûr que vous allez avoir à écrire cette extension de vous-même. La documentation indique clairement que l'auteur original de listings
orphelins en 2004, et qu'il n'a pas été mis à jour depuis 2006. Le paquet n'a pas été conçu pour outrepasser le formatage des littérales numériques, mais vous pourriez être en mesure de le modifier en changeant la définition de \lst@ProcessDigit
. Si cela ne fonctionne pas, vous devrez comprendre en détail comment les options "style d'identification" fonctionnent, et vous devrez dupliquer cette machine pour vos littérales numériques.
Je ne comprends pas tout à fait pourquoi vous êtes si réticent à introduire un outil externe dans votre chaîne d'outils, mais parce que vous êtes, vous aurez à faire un travail supplémentaire. Après un regard sur le code source, je m'attends à ce que la modification de listings
soit possible, mais je choisirais personnellement de pré-traiter mon LaTeX à la place.
ce est un paquet qui convertit le code source en Tex et LaTeX avec mise en évidence de la syntaxe. Il est possible d'ajouter des langage de programmation définitions facilement.
en surbrillance prend en charge 100 langages de programmation et comprend 50 thèmes en couleur. Il comporte le reformatage du code et l'indentation.
Je ne l'ai pas utilisé pour savoir comment il fonctionne, mais quelqu'un d'autre que je connais a dit qu'il a fonctionné assez bien. Si je reçois une chance, je vais l'essayer moi-même et de voir.