2009-08-20 8 views
27

Ho un sacco di codice in un ambiente di lstlisting. Come posso evidenziare (colore di sfondo) solo un particolare pezzo di codice all'interno dell'ambiente?Evidenziazione di un frammento di codice in un elenco di elenchi

+1

In futuro, si prega di porre domande relative a LaTeX all'indirizzo: https://tex.stackexchange.com. –

+0

@IoannisFilippidis Sarebbe stato utile sapere ... 8 anni fa. –

risposta

31

È possibile utilizzare \ colorbox e un carattere di escape all'interno del vostro elenco:

Aggiungi al preambolo

\usepackage{color} 

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

poi usarlo come questo nel documento:

\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

Grazie! Questo è esattamente ciò di cui avevo bisogno. –

+0

Ho bisogno di qualcosa in più. Sto usando il pacchetto Beamer per la mia presentazione e devo evidenziare il codice presente in lstlisting. La differenza nel mio bisogno è che non posso cambiare il codice all'interno di lstlisting, come l'escaping o la definizione di commenti speciali. Il codice è presente all'interno di un file diverso che non può essere modificato. Copiare il codice e apportare modifiche non è un'opzione in quanto ce ne sono molti. Possiamo indicare da fuori (cioè in \ begin {lstlisting}) quali linee evidenziare? – thequark

+7

Bello ma non funziona con più linee e stai perdendo l'evidenziazione della sintassi all'interno di un 'colorbox'. – Julian

0

il pacchetto di annunci fornisce backgroundcolor = \ color {} come opzione, ma sono sicuro che rende l'intero colore BG, non un pezzo.

si potrebbe dare un'occhiata a metterlo un parbox con il colore, o il pacchetto colorbox.

6

È un po 'macchinoso, ma è possibile suddividere il codice in diversi ambienti 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

Funzionerà se hai, per esempio, i numeri di riga, o verranno riavviati? – Edd

+0

@Edd: per impostazione predefinita, verrà riavviato, ma è possibile utilizzare la parola chiave 'firstnumber' per risolvere il problema. In questo esempio, dovresti usare 'firstnumber = 2' e' firstnumber = 4' nel secondo e terzo ambiente 'lstlisting', rispettivamente. L'uso di 'firstnumber = last' dovrebbe continuare la numerazione dal precedente ambiente' lstlisting', ma quando lo provo, è fuori da uno. –

+3

Si scopre che esiste una soluzione ancora migliore per il problema della numerazione: utilizzare la parola chiave 'name' (ad esempio' \ begin {lstlisting} [nome = asdf, ... '). Il nome non viene visualizzato e gli ambienti 'lstlisting' con lo stesso nome condividono un contatore di riga per impostazione predefinita. –

Problemi correlati