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:

Required result

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:

LaTeX listings example: Sideways addition

179
demandé sur Community 2009-12-27 20:07:54

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.

fancy LaTeX example

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

encore une fois, merci à Norman pour m'avoir motivé à produire ce package.

321
répondu Konrad Rudolph 2014-09-29 12:28:43

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.

5
répondu Norman Ramsey 2009-12-29 03:42:42

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.

2
répondu homerj 2015-05-18 17:49:00