2009-08-20 6 views
27

Ich habe eine Reihe von Code in einer lstlisting-Umgebung. Wie kann ich nur einen bestimmten Codeabschnitt in der Umgebung hervorheben (farbiger Hintergrund)?Hervorhebung eines Chunks von Code innerhalb einer lstlisting

+1

Bitte stellen Sie LaTeX-Fragen in Zukunft unter https://tex.stackexchange.com. –

+0

@IoannisFilippidis Das wäre nützlich zu wissen ... vor 8 Jahren. –

Antwort

31

Sie \ colorbox und ein Escape-Zeichen in Ihrem Eintrag verwenden können:

wie diese

in Ihre Präambel

\usepackage{color} 

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

dann verwenden Sie es in Ihrem Dokument:

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

Danke! Genau das habe ich gebraucht. –

+0

Ich brauche etwas extra. Ich benutze Beamer-Paket für meine Präsentation und ich muss Code in lstlisting hervorheben. Der Unterschied in meiner Notwendigkeit ist, dass ich den Code in lstlisting nicht ändern kann. Der Code ist in einer anderen Datei vorhanden, die nicht geändert werden kann. Das Kopieren des Codes und das Vornehmen von Änderungen ist keine Option, da es viele davon gibt. Können wir von außen angeben (d. H. In \ begin {lstlisting}), welche Zeilen hervorgehoben werden sollen? – thequark

+7

Schön, aber es funktioniert nicht mit mehreren Zeilen und Sie verlieren die Syntax Highlighting innerhalb einer 'colorbox'. – Julian

0

Das Listing-Paket bietet Hintergrundfarbe = \ color {} als Option, aber ich bin mir sicher, dass das die gesamte BG-Farbe macht, kein Brocken.

können Sie eine parbox mit Farbe oder das colorbox-Paket betrachten.

6

Es ist ein wenig umständlich, aber Sie können den Code in mehrere lstlisting Umgebungen brechen.

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

Funktioniert das, wenn Sie z. B. Zeilennummern haben, oder werden sie neu gestartet? – Edd

+0

@Edd: Standardmäßig werden sie neu gestartet, aber Sie können das 'firstnumber' Schlüsselwort verwenden, um das zu beheben. In diesem Beispiel würden Sie "firstnumber = 2" und "firstnumber = 4" in der zweiten bzw. dritten "lstlisting" -Umgebung verwenden. Die Verwendung von 'firstnumber = last 'soll die Nummerierung von der vorherigen' lstlisting'-Umgebung fortsetzen, aber wenn ich es versuche, ist es um eins deaktiviert. –

+3

Es stellt sich heraus, dass es eine noch bessere Lösung für das Nummerierungsproblem gibt: Verwenden Sie das Schlüsselwort 'name' (zB' \ begin {lstlisting} [name = asdf, ... '). Der Name wird nicht angezeigt und "lstlisting" -Umgebungen mit demselben Namen verwenden standardmäßig einen Zeilenzähler. –