带颜色和删除线的列表

带颜色和删除线的列表

我想要显示一个代码列表,其中一些块用绿色表示(代码添加),其他块用红色和删除线表示(代码删除)。

这是我到目前为止所拥有的:

\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”程序自动生成。可以修改它们,但每次添加或删除连续语句时,总是逐行或逐代码块进行修改)。

相关内容