我想要显示一个代码列表,其中一些块用绿色表示(代码添加),其他块用红色和删除线表示(代码删除)。
这是我到目前为止所拥有的:
\documentclass{article}
\usepackage{listings} % Include the listings-package
\usepackage{xcolor}
\usepackage{ulem}
\newcommand{\add}{\makebox[0pt]{\color{green}\rule[-1ex]{\paperwidth}{4ex}}}
\newcommand{\del}{\makebox[0pt]{\color{red}\rule[-1ex]{\paperwidth}{4ex}}}
\lstset{ %
language=Python, % the language of the code
escapechar=|
}
\begin{document}
\begin{lstlisting}
#!/usr/bin/env python
import sys
import os
class Foo:
def __init__(self):
x = 0
|\add| x = 11
|\add| x = 12
|\del| x = 21
|\del| x = 22
x = 40
x = 41
\end{lstlisting}
\end{document}
结果如下:
使用这种方法,没有找到删除线的方法。
在列表配置中使用moredelim
而不是:escapechar
\documentclass{article}
\usepackage{listings} % Include the listings-package
\usepackage{xcolor}
\usepackage{ulem}
\newcommand{\add}[1]{\colorbox{green}{\strut#1}}
\newcommand{\del}[1]{\colorbox{red}{\strut\sout{#1}}}
\lstset{ %
language=Python, % the language of the code
moredelim = [is][\add]{>+>}{<+<},
moredelim = [is][\del]{>->}{<-<}
}
\begin{document}
\begin{lstlisting}
#!/usr/bin/env python
import sys
import os
class Foo:
def __init__(self):
x = 0
>+> x = 11<+<
>-> x = 21<-<
x = 40
x = 41
\end{lstlisting}
\end{document}
给出以下结果:
其中删除线在文字中是断开的而不是连续的(并且绿色/红色背景没有填满整行)。
有什么建议可以通过删除线来获得第一个结果(或类似的结果)吗?
(注意:标记|\add|
,,>+>
...,由“diff”程序自动生成。可以修改它们,但每次添加或删除连续语句时,总是逐行或逐代码块进行修改)。