tags:

views:

186

answers:

2

I'm currently using the LaTeX listings package to display a block of code, and a diff of the file against a previous version.

Both blocks are coloured by listings as if they are code (which they are) but I would like to colour the diff similarly to emacs diff-mode - red for lines matching ^-, green for ^\+ etc.

Does anyone know if there is a package to achieve this, whether listings can do it, or whether it is possible to write a LaTeX command to do it? (or rather - where a good source of information on the latter can be found?)

Thanks,

Hud

A: 

Use a scripting tool such as sed, awk, Python [lang of choice]to produce the Latex source code.

Hamish Grubijan
Code generation is all well and good, but just what code do you suggest that he generates?
dmckee
+2  A: 

If you just want unadorned diffs, Pygments supports them, so texments (a latex front-end for pygments) does what you want.

But I guess that what you want is to have diff's coloured, while having the syntax of the underlying code highlighted appropriately. This you can't do properly the usual way, in general, because syntax highlighting may depend on the state from the previous line, and with udiffs the previous line may be missing, or an inserted line might follow a deleted line, &c.

To do the right thing, you'd need to syntax highlight the old and new versions, and then scramble the highlighted versions together to get the right output. Quite a bit of work, and I've not heard of anyone who's done that.

You could also try simply modifying the usual syntax highlighter for a language, removing highlighting rules that involve multiline state, and inserting rules to colour lines with udiff markup. Cf. Pygments' Write your own lexer; what you want from diff is trickier, since you want what is coloured to be highlighted, so you can't just make the lines into GenericTokens; I don't know what the right way to do this is.

Charles Stewart
TheHud