我在一个lstlisting环境中有一堆代码。如何突出(颜色背景)环境中的特定代码块?
答案 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
你会得到
但是,它仍然没有进行优化,您必须手动调整突出显示栏的左右边缘,并且设置多行以突出显示很麻烦。
答案 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}
然后你得到
因此保留了 lstlisting
的语法突出显示。
答案 4 :(得分:0)
列表包提供backgroundcolor = \ color {}作为选项,但我确信它会产生整个BG颜色,而不是块。
你可以看一下用彩色包装盒或彩盒包装。