2009-08-20 34 views
27

Tôi có một loạt mã trong môi trường lstlisting. Làm thế nào tôi có thể làm nổi bật (nền màu) chỉ là một đoạn mã cụ thể trong môi trường?Làm nổi bật một đoạn mã trong một lstlisting

+1

Trong tương lai, vui lòng hỏi các câu hỏi liên quan đến LaTeX tại: https://tex.stackexchange.com. –

+0

@IoannisFilippidis Điều đó sẽ hữu ích khi biết ... 8 năm trước. –

Trả lời

31

Bạn có thể sử dụng \ hộp thuốc vẽ và một nhân vật chạy thoát trong danh sách của bạn:

Thêm vào lời mở đầu của bạn

\usepackage{color} 

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

sau đó sử dụng nó như thế này trong tài liệu của bạn:

\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

Cảm ơn! Điều này ix chính xác những gì tôi cần. –

+0

Tôi cần thêm thứ gì đó. Tôi đang sử dụng gói Beamer cho bản trình bày của mình và tôi phải làm nổi bật mã hiện tại trong danh sách lstlisting. Sự khác biệt trong nhu cầu của tôi là tôi không thể thay đổi mã bên trong lstlisting, như thoát hoặc có định nghĩa nhận xét đặc biệt. Mã hiện diện bên trong một tệp khác không thể thay đổi được. Sao chép mã và thực hiện sửa đổi không phải là một tùy chọn vì có nhiều tùy chọn. Chúng tôi có thể chỉ ra từ bên ngoài (tức là trong \ begin {lstlisting}) dòng nào cần đánh dấu? – thequark

+7

Đẹp nhưng nó không hoạt động với nhiều dòng và bạn đang mất cú pháp tô sáng bên trong một 'hộp màu'. – Julian

0

gói danh sách cung cấp backgroundcolor = \ color {} như một tùy chọn, nhưng tôi chắc chắn rằng làm cho toàn bộ màu BG, không phải là một đoạn.

bạn có thể xem xét đặt ô trống có màu hoặc gói hộp màu.

6

Hơi cồng kềnh, nhưng bạn có thể chia mã thành nhiều môi trường 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

Điều này có hiệu quả nếu bạn có, ví dụ, số dòng hoặc chúng sẽ được khởi động lại không? – Edd

+0

@Edd: Theo mặc định, chúng sẽ được khởi động lại, nhưng bạn có thể sử dụng từ khóa 'firstnumber' để sửa lỗi đó. Trong ví dụ này, bạn sẽ sử dụng 'firstnumber = 2' và' firstnumber = 4' trong môi trường 'lstlisting' thứ hai và thứ ba, tương ứng. Sử dụng 'firstnumber = last' được cho là sẽ tiếp tục đánh số từ môi trường' lstlisting' trước đó, nhưng khi tôi thử nó, nó sẽ bị tắt bởi một. –

+3

Hóa ra còn có một giải pháp tốt hơn cho vấn đề đánh số: sử dụng từ khóa 'name' (ví dụ:' \ begin {lstlisting} [name = asdf, ... '). Tên không được hiển thị và các môi trường 'lstlisting' có cùng tên chia sẻ một bộ đếm dòng theo mặc định. –

Các vấn đề liên quan