2010-07-04 85 views
273

Làm cách nào để chèn mã vào tài liệu latex? Có điều gì đó như:Viết mã bằng tài liệu latex

\begin{code} 
... 
\end{code} 

Điều duy nhất tôi thực sự cần là thụt lề và phông chữ cố định chiều rộng. Làm nổi bật cú pháp có thể là tốt đẹp mặc dù nó chắc chắn là không cần thiết.

+0

Không trùng lặp chính xác, nhưng câu trả lời nằm trên cùng một mặt đất: xem http://stackoverflow.com/questions/741985/latex-source-code-listing-like-in-professional-books –

+0

Tôi cũng có theo dõi lên câu hỏi ở đây: http://stackoverflow.com/questions/3408996/insert-code-into-a-latex-doc-without-leading-tabs – sixtyfootersdude

Trả lời

450

Sử dụng gói Listings.

cấu hình đơn giản cho tiêu đề LaTeX (trước \begin{document}):

\usepackage{listings} 
\usepackage{color} 

\definecolor{dkgreen}{rgb}{0,0.6,0} 
\definecolor{gray}{rgb}{0.5,0.5,0.5} 
\definecolor{mauve}{rgb}{0.58,0,0.82} 

\lstset{frame=tb, 
    language=Java, 
    aboveskip=3mm, 
    belowskip=3mm, 
    showstringspaces=false, 
    columns=flexible, 
    basicstyle={\small\ttfamily}, 
    numbers=none, 
    numberstyle=\tiny\color{gray}, 
    keywordstyle=\color{blue}, 
    commentstyle=\color{dkgreen}, 
    stringstyle=\color{mauve}, 
    breaklines=true, 
    breakatwhitespace=true, 
    tabsize=3 
} 

Bạn có thể thay đổi ngôn ngữ mặc định ở giữa tài liệu với \lstset{language=Java}.

Ví dụ về việc sử dụng trong tài liệu:

\begin{lstlisting} 
// Hello.java 
import javax.swing.JApplet; 
import java.awt.Graphics; 

public class Hello extends JApplet { 
    public void paintComponent(Graphics g) { 
     g.drawString("Hello, world!", 65, 95); 
    }  
} 
\end{lstlisting} 

Dưới đây là kết quả:

Example image

+2

Tôi có một câu hỏi tiếp theo liên quan đến mã của bạn. Có một cái nhìn nếu bạn có cơ hội: http://stackoverflow.com/questions/3408996/insert-code-into-a-latex-doc-without-leading-tabs – sixtyfootersdude

+0

Lưu ý rằng url đến hình ảnh kết quả bị hỏng. Tôi đoán tốt hơn là tải hình ảnh trực tiếp lên stackoverflow thay vì các trang web của bên thứ ba. –

+1

Có cách nào để giảm không gian giữa các dòng mã không? – sukhvir

89

Bạn cũng có thể sử dụng môi trường verbatim

\begin{verbatim} 
your 
code 
example 
\end{verbatim} 
+1

Tôi đã thử điều này nhưng nó không bảo tồn thụt lề mã. – sixtyfootersdude

+34

Có vấn đề với việc sử dụng các tab bên trong môi trường nguyên văn. Nếu các tab được chuyển thành "không gian" thì sự cố sẽ biến mất. – midtiby

+0

Điều này rất phù hợp để hiển thị nội dung tệp văn bản ví dụ (ví dụ: dữ liệu văn bản được đọc/xử lý bởi chương trình). – nalyd88

27

Các gói chuyên biệt như minted, dựa trên Pygments để thực hiện định dạng, cung cấp các lợi thế khác nhau so với gói listings. Để trích dẫn từ hướng dẫn sử dụng minted,

Pygments cung cấp đánh dấu cú pháp vượt trội hơn nhiều so với gói thông thường. Ví dụ: danh sách về cơ bản chỉ làm nổi bật chuỗi, nhận xét và từ khóa. Pygments, mặt khác, có thể được tùy chỉnh hoàn toàn để làm nổi bật bất kỳ loại mã thông báo nào mà ngôn ngữ nguồn có thể hỗ trợ. Điều này có thể bao gồm các chuỗi định dạng đặc biệt bên trong chuỗi, số, các loại định danh khác nhau và các cấu trúc kỳ lạ như các thẻ HTML.

+0

Tôi đã thử đúc, tài liệu hướng dẫn khá thẳng về phía trước. Kiểu mặc định là thoát tốt. – user2262504

+2

Đây có thể là giải pháp không đạt yêu cầu đối với nhiều người dùng, vì cuộc gọi bên ngoài được yêu cầu đến Pygmentsic. Đặc biệt, yêu cầu gọi latex với chỉ thị '-shell-escape' là tốt nhất, một sửa đổi nhỏ đối với các hệ thống xây dựng hiện có và tối thiểu, không tương thích với các tùy chọn bảo mật của một số người dùng. – KDN

66

Đây là câu hỏi cũ, nhưng tôi nhận thấy không ai nói cách thêm mã nội tuyến.

Bạn có thể thêm mã nội tuyến với {\tt code } hoặc \texttt{ code }. Nếu bạn muốn định dạng mã nội tuyến, sau đó nó sẽ là tốt nhất để thực hiện lệnh của riêng bạn

\newcommand{\code}[1]{\texttt{#1}} 

Ngoài ra, lưu ý rằng khối mã có thể được nạp từ các tập tin khác với

\lstinputlisting[breaklines]{source.c} 

breaklines không phải là bắt buộc, nhưng tôi thấy nó hữu ích. Xin lưu ý rằng bạn sẽ phải chỉ định \usepackage{listings} cho mục này.

7

Sử dụng Minted.

Đó là gói tạo điều kiện làm nổi bật cú pháp biểu cảm trong LaTeX bằng cách sử dụng thư viện mạnh mẽ Pygments. Gói này cũng cung cấp các tùy chọn để tùy chỉnh đầu ra mã nguồn được đánh dấu bằng cách sử dụng fancyvrb.

Phát triển và tùy biến hơn nhiều so với bất kỳ gói nào khác!

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