Printable diffs
February 3, 2017
At Oxford we submit almost all of our practical assignments on paper, which usually means printing out the diff of the work that we’ve done. Generally most people just generate the diff with git
and send it to the printer with lpr
, but I’m yet to succeed at getting output that I like with this approach.
Therefore I am now generating the diff, saving it to a file, and then using the LaTeX listings
package to produce line-wrapped, coloured output.
Firstly, I generate the diff file itself:
git diff ORIGINAL_COMMIT_HASH -- > all.diff
Then I generate a PDF via xelatex diff.tex
from the following LaTeX
file:
\documentclass[11pt,]{article}
\usepackage[margin=1in]{geometry}
\usepackage{listings}
\usepackage{parskip}
\usepackage[rgb,dvipsnames]{xcolor}
\definecolor{mygreen}{rgb}{0.1,0.25,0.01}
\definecolor{myred}{rgb}{0.25,0.1,0.01}
\definecolor{mymagenta}{rgb}{0.5,0.05,0.25}
\lstdefinelanguage{diff}{
morecomment=[f][\color{blue}]{@@}, % group identifier
morecomment=[f][\color{myred}]-, % deleted lines
morecomment=[f][\color{mygreen}]+, % added lines
morecomment=[f][\color{mymagenta}]{---}, % Diff header lines (must appear after +,-)
morecomment=[f][\color{mymagenta}]{+++},
}
\lstset{
basicstyle=\ttfamily,
numberstyle=\footnotesize,
stepnumber=1,
numbersep=5pt,
backgroundcolor=\color[RGB]{255,255,255},
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2,
captionpos=b,
breaklines=true,
breakatwhitespace=true,
breakautoindent=true,
escapeinside={\%*}{*)},
linewidth=\textwidth,
basewidth=0.5em,
}
\begin{document}
\lstinputlisting{all.diff}
\end{document}
♦