假设我有如下代码段:
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}