如何指定代码列表的一部分透明而另一部分不透明?

如何指定代码列表的一部分透明而另一部分不透明?

假设我有如下代码段:

function foo() {
   ... // Lots of code not shown here
}

然后,假设我添加了一些我想在旧代码上突出显示的更改。

function foo() {
   ...
   // New code here
   ...
}

我希望能够使代码的某些部分“透明”,而其他部分不透明,类似于 GitHub 显示提交之间的变化的方式(没有绿色和红色)。

下面是一个小例子:我们有一个代码清单,其中 (* 和 *) 之间的所有内容都是表示“旧代码”的分隔符,或者在清单中应该透明的代码。

\begin{lstlisting}
(*
function foo() {
  ...
*)
  // New code here
(*
  ...
}
*)
\end{lstlisting}

这是一个带有代码的实际示例。我想将某个区域的一部分指定为透明,但即使escapeinside设置了字段,它也不会起作用。

\lstset{
    escapeinside={(*@}{@*)},
    language=C
}

\begin{lstlisting}
int main() {
    (*@\transparent{0.55}@*)
    return 0;
    (*@\transparent{1.0}@*)
}
\end{lstlisting}

答案1

这样就够了吗?你可以参考 listings 包的文档进行更多微调。

\documentclass{article}

\usepackage{listings}
\usepackage{transparent}
\usepackage{xcolor}

\begin{document}

\lstset{
    language=C,
    basicstyle=\ttfamily,
    keywordstyle=\color{blue},
    commentstyle=\color{green},
    stringstyle=\color{red},
    moredelim=[s][\transparent{0.5}]{(*}{*)},
}

\begin{lstlisting}
    int main() {
        (*
        // old code
        return 1;
        *)
        // new code
        return 0;
    }
\end{lstlisting}

\end{document}

在此处输入图片描述

相关内容