2009-08-20 2 views
27

У меня есть куча кода в среде lstlisting. Как я могу выделить (цветной фон) только определенный фрагмент кода в среде?Выделение фрагмента кода в lstlisting

+1

В будущем, пожалуйста, задайте вопросы, связанные с LaTeX, по адресу: https://tex.stackexchange.com. –

+0

@IoannisFilippidis Это было бы полезно узнать ... 8 лет назад. –

ответ

31

Вы можете использовать \ 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} 
+0

Спасибо! Это именно то, что мне нужно. –

+0

Мне нужно что-то дополнительное. Я использую пакет Beamer для своей презентации, и мне нужно выделить код, присутствующий в lstlisting. Разница в моей потребности заключается в том, что я не могу изменить код внутри lstlisting, например, экранирование или определение специального комментария. Код присутствует внутри другого файла, который нельзя изменить. Копирование кода и внесение изменений не является вариантом, так как их много. Можем ли мы указать извне (т. Е. В \ begin {lstlisting}), какие строки выделить? – thequark

+7

Приятный, но он не работает с несколькими строками, и вы теряете подсветку синтаксиса внутри 'colorbox'. – Julian

0

Пакет с перечислением предоставляет backgroundcolor = \ color {} в качестве опции, но я уверен, что делает весь цвет BG, а не куском.

Вы могли бы взглянуть на то, чтобы поместить его в паршок с цветом или пакет цветной коробки.

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} 
+1

Будет ли это работать, если у вас есть, например, номера строк, или они будут перезапущены? – Edd

+0

@Edd: по умолчанию они будут перезапущены, но вы можете использовать ключевое слово 'firstnumber', чтобы исправить это. В этом примере вы должны использовать 'firstnumber = 2' и' firstnumber = 4' во второй и третьей средах 'lstlisting', соответственно. Использование 'firstnumber = last' должно продолжать нумерацию из предыдущей среды' lstlisting', но когда я ее пробую, она отключается на единицу. –

+3

Оказалось, что существует еще лучшее решение проблемы с нумерацией: используйте ключевое слово 'name' (например,' \ begin {lstlisting} [name = asdf, ... '). Имя не отображается, а в средах 'lstlisting' с таким же именем по умолчанию используется счетчик строк. –

Смежные вопросы