2009-08-20 15 views
27

J'ai un tas de code dans un environnement lstlisting. Comment puis-je mettre en évidence (arrière-plan de couleur) juste un morceau particulier de code dans l'environnement?Mettre en surbrillance un morceau de code dans un lstlisting

+1

À l'avenir, s'il vous plaît poser des questions liées à LaTeX à: https://tex.stackexchange.com. –

+0

@IoannisFilippidis Cela aurait été utile de savoir ... il y a 8 ans. –

Répondre

31

Vous pouvez utiliser \ colorbox et un caractère d'échappement dans votre annonce:

Ajouter à votre préambule

\usepackage{color} 

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

utiliser ensuite comme ceci dans votre document:

\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

Merci! C'est exactement ce dont j'avais besoin. –

+0

J'ai besoin de quelque chose en plus. J'utilise le paquet Beamer pour ma présentation et je dois mettre en évidence le code présent dans lstlisting. La différence dans mon besoin est que je ne peux pas changer le code dans lstlisting, comme échapper ou avoir une définition de commentaire spécial. Le code est présent dans un fichier différent qui ne peut pas être modifié. Copier le code et apporter des modifications n'est pas une option car il y en a beaucoup. Pouvons-nous indiquer de l'extérieur (c'est-à-dire dans \ begin {lstlisting}) quelles lignes mettre en surbrillance? – thequark

+7

Sympa mais ça ne marche pas avec plusieurs lignes et vous perdez la coloration syntaxique dans un 'colorbox'. – Julian

0

le paquet fournit des listes backgroundcolor = \ color {} comme une option, mais je suis sûr que la couleur fait tout BG, pas un morceau.

vous pourriez jeter un coup d'oeil à la mise en boîte par couleur, ou le paquet de colorbox.

6

Il est un peu lourd, mais vous pouvez casser le code dans plusieurs environnements 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} 
+1

Cela fonctionnera-t-il si vous avez, par exemple, des numéros de ligne, ou seront-ils redémarrés? – Edd

+0

@Edd: Par défaut, ils seront redémarrés, mais vous pouvez utiliser le mot-clé 'firstnumber' pour corriger cela. Dans cet exemple, vous utiliserez 'firstnumber = 2' et' firstnumber = 4' dans les deuxième et troisième environnements 'lstlisting', respectivement. Utiliser 'firstnumber = last' est supposé continuer la numérotation de l'environnement' lstlisting' précédent, mais quand je l'essaie, il est désactivé par un. –

+3

Il s'avère qu'il existe une solution encore meilleure au problème de numérotation: utilisez le mot-clé 'name' (par exemple' \ begin {lstlisting} [name = asdf, ... '). Le nom ne s'affiche pas et les environnements 'lstlisting' avec le même nom partagent un compteur de lignes par défaut. –

Questions connexes