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:

résultat requis

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:

annonces LaTeX exemple: Sideways addition [ « addition de côté » modifié de bits twiddling Hacks]

Était-ce utile?

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.

exemple de fantaisie LaTeX

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

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top