Gói LaTeX để đánh dấu cú pháp mã bằng nhiều ngôn ngữ khác nhau


164

Tôi đang tìm kiếm một gói LaTeX làm nổi bật cú pháp trên mã. Ví dụ, ngay bây giờ tôi sử dụng khối nguyên văn để viết mã:

\begin{verbatim}
    <html>
       <head>
           <title>Hello</title>
       </head>
       <body>Hello</body>
    </html>
\end{verbatim}

Và điều này hoạt động tốt để hiển thị mã trên tài liệu của tôi. Nhưng, giả sử tôi muốn làm nổi bật đánh dấu HTML theo cách IDE sẽ làm trong tài liệu đầu ra? Có một gói có thể giúp đỡ?

Tôi muốn làm tương tự cho các ngôn ngữ khác nhau như Java, C #, HTML, CSS, v.v.


4
Tôi không hài lòng với lstlisting. Nó hoàn toàn không làm nổi bật mã XML và làm hỏng khi sử dụng các ký tự Unicode nước ngoài. JavaScript cũng không được hỗ trợ. LGrind có thể xử lý những việc như vậy không?
webjunkie

Câu trả lời:


157

Bạn có thể sử dụng gói danh sách . Nó hỗ trợ nhiều ngôn ngữ khác nhau và có rất nhiều tùy chọn để tùy chỉnh đầu ra.

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

20
Điều này làm màu sắc theo mặc định? Tôi không thấy đầu ra màu trong quá trình sử dụng thử nghiệm của mình và tôi không chắc đó có phải là lỗi từ phía tôi hay không, hoặc đơn giản không phải là một tính năng.
Benson

12
Tôi tìm thấy một câu trả lời ở đây: tjansson.dk/?p=419 . Bạn chỉ có thể sử dụng lệnh lstset để đặt tất cả các kiểu cho các thuộc tính khác nhau.
Benson

144

Sau khi hỏi một câu hỏi tương tự, tôi đã tạo ra một gói khác sử dụng Pygments và cung cấp khá nhiều tùy chọn hơn texments. Nó được gọi mintedvà khá ổn định và có thể sử dụng.

Chỉ cần thể hiện nó ra, đây là một đoạn mã được tô sáng bằng:

Mã ví dụ


Đây thực sự là một công việc khá tốt. Việc phải cài đặt Pygments có một chút thách thức nhưng tôi chắc chắn rằng hầu hết mọi người sẽ sẵn sàng làm điều đó.
Vincent Ramdhanie

1
@Vincent: Thật không may, việc cài đặt Pygments trên Windows hiện tại khá phức tạp hơn một chút (người dùng phải điều chỉnh PATHbiến và tạo tập lệnh cmd). Tôi hy vọng sẽ thuyết phục được những người bảo trì Pygments giao hàng pygmentizevới một .exetrình bao bọc để làm cho bước này dễ dàng hơn.
Konrad Rudolph

1
Sau khi thử cả danh sách và đúc / Pygments, tôi quyết định đúc tiền tốt hơn nhiều (linh hoạt hơn). TUY NHIÊN nó sẽ yêu cầu nhảy qua hàng tá vòng, nâng cấp lên MiKTeX 2.8, cài đặt Python, cài đặt các thành phần khác, v.v. Tài liệu Minted là kém và nó không hỗ trợ phá vỡ dòng dài. Nhưng cuối cùng tôi đã nhận được nó để kết xuất Java / XML bằng màu Eclipse! jevon.org/wiki/Eclipse_Pygments_Style
jevon

@soundas ngủful: Tài liệu đúc được cập nhật liên tục. ;-) Tôi thực sự thấy nó khá rộng rãi (tất nhiên tôi thiên vị) nhưng tôi rất vui khi giải quyết mọi khiếu nại. Như hiện tại, phần yêu cầu của người Viking được thừa nhận là khủng khiếp.
Konrad Rudolph

3
mintedđược cài đặt và hoạt động trên cả ShareLatex và Overleaf. Hãy tự cứu mình khỏi việc cài đặt Pygments;)
grofte

21

Tôi khuyên bạn nên Pygments . Nó chấp nhận một đoạn mã bằng bất kỳ ngôn ngữ nào và cú pháp đầu ra được tô sáng mã LaTeX. Nó sử dụng gói FancyConnbmàu sắc để tạo đầu ra của nó. Cá nhân tôi thích nó cho gói niêm yết. Tôi nghĩ rằng FancyConnb tạo ra kết quả đẹp hơn nhiều.


1
Mặc dù tôi ngưỡng mộ vĩ mô đằng sau danh sách, tôi cũng đồng ý rằng pygments có lợi thế: làm nổi bật đẹp hơn, tùy chỉnh dễ dàng hơn, một số khả năng trộn cú pháp và khả năng xuất ra các định dạng khác ngoài latex, chẳng hạn như HTML.
Charles Stewart

Trên một beamerloại tài liệu, đây rõ ràng là tùy chọn chức năng duy nhất. Không mintedphải cũng không listingsbiên dịch chính xác với beamer.
Luís de Sousa

Vâng, tôi đã sử dụng listings với beamer, nhưng bạn phải xác định rằng các khung có chứa danh sách [fragile].
Siêu thường

11

LGrind làm điều này. Đó là gói LaTeX trưởng thành đã xuất hiện từ khi adam là một chàng cao bồi và hỗ trợ nhiều ngôn ngữ lập trình.


10

Tôi sẽ sử dụng gói đúc như được đề cập từ nhà phát triển Konrad Rudolph thay vì gói niêm yết . Đây là lý do tại sao:

gói niêm yết

Gói danh sách không hỗ trợ màu theo mặc định. Để sử dụng màu sắc, bạn cần bao gồm gói màu và tự xác định quy tắc màu bằng lệnh \ lstset như được giải thích cho mã MATLAB tại đây .

Ngoài ra, gói danh sách không hoạt động tốt với unicode, nhưng bạn có thể khắc phục những vấn đề đó như được giải thích ở đâyđây .

Đoạn mã sau

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

tạo ra hình ảnh sau đây:

nhập mô tả hình ảnh ở đây

gói đúc

Gói minted hỗ trợ màu sắc, unicode và trông tuyệt vời. Tuy nhiên, để sử dụng nó, bạn cần phải có python 2.6 và pygments . Trong Ubuntu, bạn có thể kiểm tra phiên bản python của mình trong thiết bị đầu cuối với

python --version

và bạn có thể cài đặt pygments với

sudo apt-get install python-pygments

Sau đó, vì minted thực hiện các cuộc gọi đến pygments, bạn cần biên dịch nó với -shell-esc như thế này

pdflatex -shell-escape yourfile.tex

Nếu bạn sử dụng trình soạn thảo latex như TexMaker hoặc một cái gì đó, tôi khuyên bạn nên thêm lệnh người dùng, để bạn vẫn có thể biên dịch nó trong trình chỉnh sửa.

Đoạn mã sau

\documentclass{article}
\usepackage{minted}
\begin{document}

\begin{minted}{html}
    <!DOCTYPE html>
    <html>
       <head>
           <title>Hello</title>
       </head>

       <body>Hello</body>
    </html>
\end{minted}
\end{document}

tạo ra hình ảnh sau đây:

nhập mô tả hình ảnh ở đây


4

Tôi chủ yếu sử dụng lstlistings trong các bài báo, nhưng đối với đầu ra màu (cho các slide) tôi sử dụng pygments thay thế.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.