Le code source en soulignant LATEX
-
21-09-2019 - |
Question
Je dois souligner le code source en LaTeX. Le listings
paquet semble être le meilleur choix pour la plupart des cas d'utilisation et pour moi il était, jusqu'à présent.
Cependant, maintenant je besoin de plus de flexibilité. En général, ce que je suis à la recherche est un real lexer. En particulier, j'ai besoin (pour une définition propre de la langue) pour définir (et mettre en valeur!) Propres styles de nombre. listings
ne permet pas mettre en évidence les numéros dans le code. Cependant, je dois produire quelque chose comme ceci:
listings
aussi ne peut pas faire face à délimiteurs pour les chaînes. Considérons le code valide Ruby suivant:
s = %q!this is a string.!
Ici, !
peut être remplacé par presque tout delimiter .
(Ce listings
ne peut pas gérer Unicode est également tout à fait frustrant, mais c'est une autre question.)
Idéalement, je suis à la recherche d'une extension de listings
qui me permet de fournir des règles de Lexing plus complexes. Mais sauf que, je cherche aussi des alternatives viables.
autres fils ont suggéré d'utiliser Pygments qui peut produire une sortie de latex. Il y a même un paquet - texments
- pour faciliter la transition.
Cependant, cela manque cruellement de fonctionnalités. En particulier, je suis intéressé par la numérotation des lignes de style listings
, les références de ligne de code source, et la possibilité d'intégrer dans le code LaTeX source (les options texcl
et mathescape
dans listings
).
À titre d'exemple, voici un code source avec listings
qui typeset montre quelques-unes des choses que le remplacement doit également fournir:
[ « addition de côté » modifié de bits twiddling Hacks]
La solution
Prendre des conseils de Norman à cœur, je l'ai piraté ensemble une solution qui a utilisé ( patché ) Pygments pour mettre en évidence et poussé en autant de fonctionnalités que possible sans éclater; -)
J'ai aussi créé un paquet LaTeX, une fois que mon correctif Pygments a été publié en ...
Présentation monnayé
monnayé est un package qui utilise Pygments pour fournir la syntaxe haut de gamme en mettant en lumière LATEX. Par exemple, il permet à la sortie suivante.
Voici un fichier minimal pour reproduire le code ci-dessus (notez que comprenant des 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ěe en utilisant la commande suivante:
xelatex -shell-escape test.tex
(mais monnayé fonctionne aussi avec latex
et pdflatex
...)
minted.sty
fonctionne similaire à texments.sty
mais permet des fonctionnalités supplémentaires.
Comment obtenir
-
monnayé est une liste sur de CTAN ( )
-
Documentation est bien sûr inclus.
-
monnayé est maintenant maintenu par Geoffrey Poore. La version de développement, y compris la dernière fichier
.sty
, est disponible à github.com/gpoore/minted , et peut être cloné à partir de là.
Encore une fois, grâce à Norman pour me motiver à produire ce paquet.
Autres conseils
TeX est (célèbre) Turing-complet, mais je suis sûr que vous allez avoir à écrire cette extension vous-même. La documentation montre clairement que l'auteur original de listings
devenus orphelins en 2004, et qu'il n'a pas été mis à jour depuis 2006. Le package n'a pas été conçu pour remplacer la mise en forme de littéraux 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 devez comprendre en détail comment les options « de style » identifiant de travail, et vous devrez dupliquer cette machine pour vos littéraux numériques.
Je ne comprends pas très bien pourquoi vous êtes si réticents à introduire un outil externe dans votre toolchain, mais parce que vous êtes, vous aurez à faire un travail supplémentaire. Après un coup d'oeil au code source, je pense que la modification listings
devrait être possible, mais je personnellement choisir de prétraiter ma place LATEX.
Cette est un paquet qui convertit le code source pour TeX et LaTeX avec la coloration syntaxique. Il est possible d'ajouter des définitions de langage de programmation personnalisé facilement.
Mise en valeur prend en charge les 100 langages de programmation et comprend 50 thèmes de couleurs. Il dispose d'un reformatage de code et indenter.
Je ne l'ai pas utilisé pour savoir comment il fonctionne, mais quelqu'un d'autre je sais que cela a fonctionné dit assez bien. Si je reçois une chance, je vais l'essayer moi-même et voir.