2010-01-05 3 views
3

J'utilise actuellement le paquet d'annonces LaTeX pour afficher un bloc de code, et un diff du fichier par rapport à une version précédente.Comment colorer les lignes dans LaTeX qui correspondent aux expressions régulières

Les deux blocs sont colorés par listes comme si elles sont le code (qu'ils sont), mais je voudrais colorer la diff de façon similaire à emacs mode diff - rouge pour les lignes correspondant à ^-, vert pour ^\+ etc.

Est-ce que quelqu'un sait s'il y a un paquet pour réaliser ceci, si les listes peuvent le faire, ou s'il est possible d'écrire une commande de LaTeX pour le faire? (Ou plutôt - où une bonne source d'information sur ce dernier se trouve?)

Merci,

Hud

Répondre

2

Si vous voulez juste des diffs sans fioritures, Pygments les supporte, donc texments (un frontal en latex pour pygments) fait ce que vous voulez.

Mais je suppose que ce que vous voulez est d'avoir coloris de diff, tout en ayant la syntaxe du code sous-jacent en surbrillance de manière appropriée. Vous ne pouvez pas effectuer correctement la procédure habituelle, car la coloration syntaxique peut dépendre de l'état de la ligne précédente et avec udiffs la ligne précédente peut être manquante ou une ligne insérée peut suivre une ligne supprimée, & c.

Pour faire la bonne chose, vous devez mettre en surbrillance l'ancienne et la nouvelle version, puis brouiller les versions en surbrillance pour obtenir la bonne sortie. Pas mal de travail, et je n'ai jamais entendu parler de quelqu'un qui a fait ça.

Vous pouvez également essayer simplement de modifier la syntaxe habituelle surligneur pour un langage, en supprimant les règles de mise en évidence qui impliquent l'état multiligne, et en insérant des règles sur les lignes de couleur avec le balisage udiff. Cf. Pygments 'Write your own lexer; ce que vous voulez de diff est plus délicat, puisque vous voulez que les couleurs soient mises en surbrillance, donc vous ne pouvez pas simplement faire les lignes dans GenericTokens; Je ne sais pas quelle est la bonne façon de faire cela.

+0

Texments & Pygments semble comme ce que je suis après, je vais essayer. La mise en évidence de la syntaxe dans le diff n'était pas vraiment dans mon esprit - mais ce serait plutôt cool aussi :) Je vais prendre la voie facile cependant. Merci de votre aide. – TheHud

0

Utilisez un outil de script comme sed, awk, Python [lang choix] pour produire le code source Latex.

+0

La génération de code est très bien, mais quel code suggérez-vous qu'il génère? – dmckee

Questions connexes