2009-04-12 57 views
303

Danh sách mã nguồn mủ cao su trông như thế nào để tạo ra đầu ra như trong các cuốn sách đã biết, ví dụ một cho khung công tác Spring? Tôi đã thử với các gói danh sách latex nhưng không thể sản xuất một cái gì đó trông đẹp như bên dưới. Vì vậy, tôi primarely quan tâm đến hướng dẫn định dạng để tạo ra một cái gì đó giống như mẫu dưới đây (từ Manning sample chapter cho mùa xuân trong hành động):Danh sách mã nguồn LaTeX như trong sách chuyên nghiệp

From Manning's Spring in Action

EDIT Với sự giúp đỡ đặc biệt của Tormod Fjeldskår đây là hoàn chỉnh đoạn để tạo ra cái nhìn mong muốn:

\usepackage{listings} 
    \usepackage{courier} 
\lstset{ 
     basicstyle=\footnotesize\ttfamily, % Standardschrift 
     %numbers=left,    % Ort der Zeilennummern 
     numberstyle=\tiny,   % Stil der Zeilennummern 
     %stepnumber=2,    % Abstand zwischen den Zeilennummern 
     numbersep=5pt,    % Abstand der Nummern zum Text 
     tabsize=2,     % Groesse von Tabs 
     extendedchars=true,   % 
     breaklines=true,   % Zeilen werden Umgebrochen 
     keywordstyle=\color{red}, 
      frame=b,   
%  keywordstyle=[1]\textbf, % Stil der Keywords 
%  keywordstyle=[2]\textbf, % 
%  keywordstyle=[3]\textbf, % 
%  keywordstyle=[4]\textbf, \sqrt{\sqrt{}} % 
     stringstyle=\color{white}\ttfamily, % Farbe der String 
     showspaces=false,   % Leerzeichen anzeigen ? 
     showtabs=false,    % Tabs anzeigen ? 
     xleftmargin=17pt, 
     framexleftmargin=17pt, 
     framexrightmargin=5pt, 
     framexbottommargin=4pt, 
     %backgroundcolor=\color{lightgray}, 
     showstringspaces=false  % Leerzeichen in Strings anzeigen ?   
} 
\lstloadlanguages{% Check Dokumentation for further languages ... 
     %[Visual]Basic 
     %Pascal 
     %C 
     %C++ 
     %XML 
     %HTML 
     Java 
} 
    %\DeclareCaptionFont{blue}{\color{blue}} 

    %\captionsetup[lstlisting]{singlelinecheck=false, labelfont={blue}, textfont={blue}} 
    \usepackage{caption} 
\DeclareCaptionFont{white}{\color{white}} 
\DeclareCaptionFormat{listing}{\colorbox[cmyk]{0.43, 0.35, 0.35,0.01}{\parbox{\textwidth}{\hspace{15pt}#1#2#3}}} 
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}} 

Sử dụng nó với điều này trong tài liệu của bạn:

\lstinputlisting[label=samplecode,caption=A sample]{sourceCode/HelloWorld.java} 
+0

Hãy được chính xác hơn. Với tôi danh sách tôi đăng “trông giống như trong sách chuyên nghiệp” và “trông đẹp mắt” như danh sách bạn đăng. –

+2

Vui lòng sử dụng mẫu được đăng dưới dạng ảnh chụp màn hình dưới dạng kết quả tôi muốn lưu trữ. – Mork0075

+8

Vì mục đích hoàn chỉnh, bạn có thể muốn thêm \ usepackage {color} vào thư bạn đã đăng. Đã cho tôi một chút trước khi tôi nhận thấy nó đã mất tích. –

Trả lời

179

Dường như với tôi rằng những gì bạn thực sự muốn, là để tùy chỉnh giao diện của chú thích. Điều này được thực hiện dễ dàng nhất bằng gói caption. Để được hướng dẫn cách sử dụng gói này, hãy xem the manual (PDF). Có thể bạn sẽ cần tạo định dạng chú thích tùy chỉnh của riêng mình, như được mô tả trong chương 4 trong sách hướng dẫn.

Edit: Thử nghiệm với MiKTeX:

\documentclass{report} 

\usepackage{color} 
\usepackage{xcolor} 
\usepackage{listings} 

\usepackage{caption} 
\DeclareCaptionFont{white}{\color{white}} 
\DeclareCaptionFormat{listing}{\colorbox{gray}{\parbox{\textwidth}{#1#2#3}}} 
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white} 

% This concludes the preamble 

\begin{document} 

\begin{lstlisting}[label=some-code,caption=Some Code] 
public void here() { 
    goes().the().code() 
} 
\end{lstlisting} 

\end{document} 

Kết quả:

Preview

+1

Tôi muốn xác định lại định dạng phụ đề chỉ cho những thứ trong phần \ lstinputlisting (chẳng hạn như myCaption). Bạn có gợi ý làm thế nào để làm điều đó? – Mork0075

+1

Hãy thử/captionsetup [lstlisting] {tùy chọn của bạn} –

+0

Điều này hoạt động tuyệt vời, cảm ơn bạn. Bạn đã có một ý tưởng làm thế nào để nhận ra nền màu xám phía sau chú thích (như trong bài viết đầu tiên của tôi mẫu)? Không thể tìm thấy bất kỳ thứ gì trong tài liệu. – Mork0075

9

Hãy xem algorithms gói, đặc biệt là môi trường algorithm.

+1

Cảm ơn bạn. Gói này dường như rất mạnh trong nhiều cuộc thảo luận về lý thuyết, tôi biết điều đó từ nhiều sách toán. Nhưng tôi sẽ không nhấn mạnh điều này rất nhiều (prerequsites, nếu, khác), tôi muốn có một định dạng giống như ở trên. – Mork0075

+4

Tôi chỉ nói về môi trường 'thuật toán', không phải là' thuật toán'. 'thuật toán' là một container nổi, trông khá đẹp. Bạn có thể đặt bất cứ điều gì bạn muốn bên trong, ngay cả 'liệt kê' đề cập đến elsethread. – avakar

20

Hãy thử trên gói listings. Dưới đây là ví dụ về những gì tôi đã sử dụng một thời gian trước đây để có một danh sách Java màu:

\usepackage{listings} 

[...] 

\lstset{language=Java,captionpos=b,tabsize=3,frame=lines,keywordstyle=\color{blue},commentstyle=\color{darkgreen},stringstyle=\color{red},numbers=left,numberstyle=\tiny,numbersep=5pt,breaklines=true,showstringspaces=false,basicstyle=\footnotesize,emph={label}} 

[...] 

\begin{lstlisting} 
public void here() { 
    goes().the().code() 
} 

[...] 

\end{lstlisting} 

Bạn có thể muốn tùy chỉnh điều đó. Có một số tham chiếu của gói danh sách. Chỉ cần google chúng.

+0

Cảm ơn. Tôi vẫn biết về gói danh sách, nhưng không thể định dạng giống như mẫu của tôi. Đây là câu hỏi thực sự. – Mork0075

44

Tôi hạnh phúc với listings gói:

Listing example

Dưới đây là cách tôi cấu hình nó:

\lstset{ 
language=C, 
basicstyle=\small\sffamily, 
numbers=left, 
numberstyle=\tiny, 
frame=tb, 
columns=fullflexible, 
showstringspaces=false 
} 

tôi sử dụng nó như thế này:

\begin{lstlisting}[caption=Caption example., 
    label=a_label, 
    float=t] 
// Insert the code here 
\end{lstlisting} 
+1

float = t làm gì? – lamba

+1

@lamba: nếu tôi nhớ chính xác, nó nói với Latex đặt nó ở đầu trang. –

+3

Urgh, danh sách theo phông tỷ lệ rất xấu xí.(Plus, vì lý do văn hóa, họ rất khó đọc cho một số người (ít nhất là nhiều người Nhật, cũng có thể là người châu Á khác). – mirabilos

27

Và xin vui lòng , bất kể bạn làm gì, hãy định cấu hình gói danh sách để sử dụng phông chữ cố định chiều rộng (như trong ví dụ của bạn; bạn sẽ tìm thấy tùy chọn trong tài liệu). Thiết lập mặc định sử dụng các kiểu phông chữ tỷ lệ trên một mạng lưới, tức là, IMHO, cực kỳ xấu xí và không thể đọc được, như có thể được nhìn thấy từ các câu trả lời khác với hình ảnh. Tôi cá nhân rất bị kích thích khi tôi phải đọc một số loại mã theo phông tỷ lệ. thiết lập

Hãy thử chiều rộng cố định phông chữ với điều này:

\lstset{basicstyle=\ttfamily} 
+0

Bạn có thể vui lòng nói như thế nào, không thể tìm thấy nó. – Mork0075

+4

Hãy thử với \ lstset {basicstyle = \ ttfamily} – zvrba

+3

Tôi sử dụng các cột = fullflexible với basicstyle = \ small \ sffamily, như trong ví dụ tôi đã đăng ở trên. Các ký tự không được căn chỉnh theo chiều dọc, nhưng tôi nghĩ chúng trông đẹp hơn với \ ttfamily. Bạn có tìm thấy mẫu tôi đã đăng ở trên không? –

8

Có một vài điều khác mà bạn có thể làm, chẳng hạn như chọn phông chữ mới:

\documentclass[10pt,a4paper]{article} 
% ... lots of packages e.g. babel, microtype, fontenc, inputenc &c. 
\usepackage{color} % Leave this out if you care about B/W printing, obviously. 
\usepackage{upquote} % Turns curly quotes in verbatim text into straight quotes. 
         % People who have to copy/paste code from the PDF output 
         % will love you for this. Or perhaps more accurately: 
         % They will not hate you/hate you less. 
\usepackage{beramono} % Or some other package that provides a fixed width font. q.v. 
         % http://www.tug.dk/FontCatalogue/typewriterfonts.html 
\usepackage{listings} 
\lstset {     % A rudimentary config that shows off some features. 
    language=Java, 
    basicstyle=\ttfamily, % Without beramono, we'd get cmtt, the teletype font. 
    commentstyle=\textit, % cmtt doesn't do italics. It might do slanted text though. 
    \keywordstyle=  % Nor does cmtt do bold text. 
     \color{blue}\bfseries, 
    \tabsize=4   % Or whatever you use in your editor, I suppose. 
} 
\begin{document} 
\begin{lstlisting} 
public final int ourAnswer() { return 42; /* Our final answer */ } 
\end{lstlisting} 
\end{document} 
+2

Tôi tin rằng trong \ keywordstyle và \ tabsize dấu gạch chéo ngược nên được loại bỏ vì nó sẽ không hoạt động theo cách này. Tuy nhiên rất hữu ích! – Xiphias

16

Tôi tự hỏi tại sao không ai đề cập đến gói Minted. Nó có cú pháp tô sáng tốt hơn nhiều so với gói danh sách LaTeX. Nó sử dụng Pygments.

$ pip install Pygments 

Ví dụ trong LaTeX:

\documentclass{article} 
\usepackage[utf8]{inputenc} 
\usepackage[english]{babel} 

\usepackage{minted} 

\begin{document} 
\begin{minted}{python} 
import numpy as np 

def incmatrix(genl1,genl2): 
    m = len(genl1) 
    n = len(genl2) 
    M = None #to become the incidence matrix 
    VT = np.zeros((n*m,1), int) #dummy variable 

    #compute the bitwise xor matrix 
    M1 = bitxormatrix(genl1) 
    M2 = np.triu(bitxormatrix(genl2),1) 

    for i in range(m-1): 
     for j in range(i+1, m): 
      [r,c] = np.where(M2 == M1[i,j]) 
      for k in range(len(r)): 
       VT[(i)*n + r[k]] = 1; 
       VT[(i)*n + c[k]] = 1; 
       VT[(j)*n + r[k]] = 1; 
       VT[(j)*n + c[k]] = 1; 

       if M is None: 
        M = np.copy(VT) 
       else: 
        M = np.concatenate((M, VT), 1) 

       VT = np.zeros((n*m,1), int) 

    return M 
\end{minted} 
\end{document} 

mà kết quả trong:

enter image description here

Bạn cần phải sử dụng cờ -shell-escape với lệnh pdflatex.

Để biết thêm thông tin: https://www.sharelatex.com/learn/Code_Highlighting_with_minted

+2

+1. Minted là gói để sắp xếp mã nguồn trong LaTeX. Không chỉ dễ sử dụng, giàu tính năng và tài liệu tốt, nhưng nó cũng không có vấn đề gì với các ký tự Unicode trong mã nguồn (không giống như 'danh sách'). – ScumCoder

2

Đối với mã R tôi sử dụng

\usepackage{listings} 
\lstset{ 
language=R, 
basicstyle=\scriptsize\ttfamily, 
commentstyle=\ttfamily\color{gray}, 
numbers=left, 
numberstyle=\ttfamily\color{gray}\footnotesize, 
stepnumber=1, 
numbersep=5pt, 
backgroundcolor=\color{white}, 
showspaces=false, 
showstringspaces=false, 
showtabs=false, 
frame=single, 
tabsize=2, 
captionpos=b, 
breaklines=true, 
breakatwhitespace=false, 
title=\lstname, 
escapeinside={}, 
keywordstyle={}, 
morekeywords={} 
} 

Và nó trông giống hệt như thế này

enter image description here

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