在一个列表中突出显示一大块代码

时间:2009-08-20 06:32:22

标签: latex listings pdftex

我在一个lstlisting环境中有一堆代码。如何突出(颜色背景)环境中的特定代码块?

5 个答案:

答案 0 :(得分:34)

您可以在商家信息中使用\ colorbox和转义字符:

添加到您的序言中

  \usepackage{color}

  \definecolor{light-gray}{gray}{0.80}

然后在您的文档中使用它:

  \begin{lstlisting}[escapechar=!]
  def mult(m: Matrix[Int], n: Matrix[Int]) {
    val p = !\colorbox{light-gray}{new MatrixInt}!(m.rows, n.cols)
  }
  \end{lstlisting}

答案 1 :(得分:6)

这有点麻烦,但您可以将代码分解为几个lstlisting环境。

\begin{lstlisting}
line
\end{lstlisting}
\vspace{-\baselineskip}
\begin{lstlisting}[backgroundcolor=\color{pink}]
very
interesting
\end{lstlisting}
\vspace{-\baselineskip}
\begin{lstlisting}
line
line
\end{lstlisting}

答案 2 :(得分:1)

有一个名为SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article GROUP BY s2.article) ORDER BY article; 的{​​{3}}

lstlinebgrd

你会得到

package

但是,它仍然没有进行优化,您必须手动调整突出显示栏的左右边缘,并且设置多行以突出显示很麻烦。

答案 3 :(得分:1)

这是使用 tikz 突出显示(部分)单个行的解决方案:

\documentclass[pdftex,11pt,a4paper]{article}

\usepackage{listings}

\usepackage{tikz}
\usetikzlibrary{tikzmark}

% Command to place a TikZ anchor at the current position
\newcommand{\mytikzmark}[1]{%
  \tikz[overlay,remember picture,baseline] \coordinate (#1) at (0,0) {};}

\newcommand{\highlight}[2]{%
  \draw[yellow,line width=14pt,opacity=0.3]%
    ([yshift=4pt]#1) -- ([yshift=4pt]#2);%
}

\begin{document}
    \begin{lstlisting}[escapechar=@, language=C]
@\mytikzmark{hl1Start}@struct@\mytikzmark{hl1End}@ S {
    double @\mytikzmark{hl2Start}@salary_@\mytikzmark{hl2End}@;
};
    \end{lstlisting}
        
    \begin{tikzpicture}[remember picture, overlay]
        \highlight{hl1Start}{hl1End}
        \highlight{hl2Start}{hl2End}
    \end{tikzpicture}   
        
\end{document}

然后你得到

enter image description here

因此保留了 lstlisting 的语法突出显示。

答案 4 :(得分:0)

列表包提供backgroundcolor = \ color {}作为选项,但我确信它会产生整个BG颜色,而不是块。

你可以看一下用彩色包装盒或彩盒包装。