पेशेवर पुस्तकों की तरह LaTeX स्रोत कोड लिस्टिंग


329

एक लेटेक्स स्रोत कोड लिस्टिंग को ज्ञात पुस्तकों में आउटपुट का उत्पादन करने के लिए कैसा दिखना चाहिए, उदाहरण के लिए स्प्रिंग फ्रेमवर्क के लिए एक? मैंने लेटेक्स लिस्टिंग पैकेज के साथ कोशिश की है, लेकिन कुछ ऐसा नहीं कर पाया है जो नीचे के रूप में अच्छा लगे। तो मैं मुख्य रूप से नीचे दिए गए नमूने की तरह कुछ बनाने के लिए प्रारूपण निर्देशों में दिलचस्पी लेता हूं ( स्प्रिंग इन एक्शन के लिए मैनिंग के नमूना अध्याय से ):

मैनिंग स्प्रिंग इन एक्शन

EDIT विशेष रूप से Tormod Fjeldskår की मदद से यहां पूरा स्निपेट वांछित लुक तैयार करने के लिए है:

\usepackage{listings}
\usepackage{courier}
\lstset{
    basicstyle=\footnotesize\ttfamily, % Default font
    % numbers=left,              % Location of line numbers
    numberstyle=\tiny,          % Style of line numbers
    % stepnumber=2,              % Margin between line numbers
    numbersep=5pt,              % Margin between line numbers and text
    tabsize=2,                  % Size of tabs
    extendedchars=true,
    breaklines=true,            % Lines will be wrapped
    keywordstyle=\color{red},
    frame=b,
    % keywordstyle=[1]\textbf,
    % keywordstyle=[2]\textbf,
    % keywordstyle=[3]\textbf,
    % keywordstyle=[4]\textbf,   \sqrt{\sqrt{}}
    stringstyle=\color{white}\ttfamily, % Color of strings
    showspaces=false,
    showtabs=false,
    xleftmargin=17pt,
    framexleftmargin=17pt,
    framexrightmargin=5pt,
    framexbottommargin=4pt,
    % backgroundcolor=\color{lightgray},
    showstringspaces=false
}
\lstloadlanguages{ % Check documentation 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}}

इसे अपने दस्तावेज़ में इसके साथ प्रयोग करें:

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

कृपया अधिक सटीक रहें। मुझे सूचीबद्ध करने के लिए मैंने "पेशेवर पुस्तकों की तरह दिखता है" और "आपके पोस्ट के अनुसार अच्छा लगता है"।
बैस्टियन लेओनार्ड

2
कृपया स्क्रीनशॉट के रूप में पोस्ट किए गए नमूने का उपयोग करें, जिसके परिणामस्वरूप मैं संग्रह करना चाहता हूं।
Mork0075

8
संपूर्णता के लिए आप अपने द्वारा पोस्ट किए गए टेक्स में \ usepackage {color} जोड़ना चाह सकते हैं। इससे पहले कि मुझे पता चला कि यह गायब था मुझे एक क्षण में ले लिया।
राबर्ट मासायोली

1
अच्छा कार्य! हालाँकि मुझे \ usepackage {caption} और \ usepackage {ग्राफ़िक्स} को जोड़ना था और यह एकल उद्धरणों को रूपांतरित करता है।
हकुनिन

हाय मॉर्क मुझे स्रोत फ़ाइल कहां रखनी है? अपने उदाहरण में Hello.java
RoflcoptrException

जवाबों:


186

यह मुझे लगता है कि आप वास्तव में क्या चाहते हैं, कैप्शन के रूप को अनुकूलित करना है। यह captionपैकेज का उपयोग करके सबसे आसानी से किया जाता है । इस पैकेज का उपयोग करने के निर्देशों के लिए, मैनुअल (पीडीएफ) देखें । आपको संभवतः अपने स्वयं के कस्टम कैप्शन प्रारूप बनाने की आवश्यकता होगी, जैसा कि मैनुअल में अध्याय 4 में वर्णित है।

संपादित करें: 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}

परिणाम:

पूर्वावलोकन


1
मैं केवल \ lstinputlisting अनुभाग (myCaption की तरह कुछ) में चीजों के लिए कैप्शन प्रारूप को फिर से परिभाषित करना चाहूंगा। क्या आपको कोई संकेत मिला है कि कैसे करें?
Mork0075

1
कोशिश करें / कैप्शनसेटअप [lstlisting] {आपके विकल्प}
Tormod Fjeldskår

यह बहुत अच्छा काम करता है, धन्यवाद। क्या आपको अंदाजा है कि कैप्शन के पीछे ग्रे बैकग्राउंड को कैसे महसूस किया जाए (जैसे मेरे शुरुआती पोस्ट्स सैंपल में)? कठबोली प्रलेखन में कुछ भी मिल सकता है।
Mork0075

मुझे लगता है कि \ colorbox {ग्रे} {\ parbox {\ textwidth} {\ textcolor {white} {टेक्स्ट यहां जाता है}}} आपके प्रारंभिक पोस्ट नमूने के पास कहीं होगा।
टॉरमॉड फजेल्द्स्क

2
यह अच्छा लग रहा है, लेकिन मेरा कैप्शन बॉक्स इंडेंट हो जाता है (टेक्स्ट नहीं, बॉक्स ही)। मुझे नहीं पता कि लिस्टिंग के बाद से इंडेंट नहीं किया गया है।
जोहान

49

मैं listingsपैकेज से खुश हूं :

सूचीबद्ध उदाहरण

यहां बताया गया है कि मैं इसे कैसे कॉन्फ़िगर करता हूं:

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

मैं इसे इस तरह से उपयोग करता हूं:

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

1
@ लैम्बा: अगर मुझे सही याद है, तो यह लेटेक्स को पृष्ठ के शीर्ष पर रखने के लिए कहता है।
बैस्टियन लेओनार्ड

7
उरुग, आनुपातिक फ़ॉन्ट में लिस्टिंग इतने बड़े पैमाने पर बदसूरत हैं। (प्लस, सांस्कृतिक कारणों से, वे कुछ के लिए पढ़ना मुश्किल हैं (कम से कम कई जापानी, शायद अन्य एशियाई भी) लोग।)
मिराबिलोस

1
@mirabilos: हाँ, मुझे लगता है कि मैंने इसे बाद में बदल दिया। यह इस लिस्टिंग पर ठीक लग रहा था लेकिन अधिक इंडेंटेशन / नेस्टिंग के साथ दूसरों पर बिल्कुल नहीं।
बैस्टियन लेओनार्ड

32

और कृपया, जो कुछ भी आप करते हैं, निश्चित-चौड़ाई के फ़ॉन्ट का उपयोग करने के लिए लिस्टिंग पैकेज को कॉन्फ़िगर करें (जैसा कि आपके उदाहरण में; आपको दस्तावेज़ में विकल्प मिलेगा)। डिफ़ॉल्ट सेटिंग एक ग्रिड पर आनुपातिक फ़ॉन्ट टाइपसेट का उपयोग करती है, जो कि, IMHO, अविश्वसनीय रूप से बदसूरत और अपठनीय है, जैसा कि चित्रों के साथ अन्य उत्तरों से देखा जा सकता है। मैं व्यक्तिगत रूप से कर रहा हूँ बहुत चिढ़ जब मैं एक आनुपातिक फ़ॉन्ट में कुछ कोड टाइपसेट अवश्य पढ़ें।

इसके साथ निश्चित-चौड़ाई का फ़ॉन्ट सेट करने का प्रयास करें:

\lstset{basicstyle=\ttfamily}

3
मैं व्यक्तिगत रूप से स्तंभों का उपयोग करता हूं = मूलस्टाइल के साथ पूर्णरूपेण = \ small \ sffamily, जैसा कि मैंने ऊपर पोस्ट किया है उदाहरण में। अक्षर लंबवत रूप से संरेखित नहीं हैं, लेकिन मुझे लगता है कि वे \ ttfamily से बेहतर दिखते हैं। क्या आपको वह नमूना मिला जो मैंने बदसूरत से ऊपर पोस्ट किया था?
बैस्टियन लेओनार्ड

आपका विशेष उदाहरण ठीक लग रहा है। हालाँकि, मैं इसे नेस्टेड कंपाउंड स्टेटमेंट से नफरत करता हूँ जहाँ एक कंपाउंड स्टेटमेंट ({} ब्लॉक) की सीमा को देखने के लिए एक उचित इंडेंटेशन (कॉलम संरेखण) एक बड़ी मदद है।
zvrba

मैं एक ही बात सोच रहा था, लेकिन अभी तक मेरी सभी लिस्टिंग अच्छी लग रही थी।
बैस्टियन लेओनार्ड

ठीक है, आपने मुझे आश्वस्त किया है, मैं एक बार आपके सेटअप की कोशिश करूँगा :-)
zvrba

1
नेस्टेड कंपाउंड स्टेटमेंट एक रेड हेरिंग हैं। चूंकि इंडेंटेशन में रिक्त स्थान होते हैं, इसलिए इंडेंटेशन अन्य वर्णों की चौड़ाई की परवाह किए बिना पंक्तिबद्ध होंगे।
jwg

27

मुझे आश्चर्य है कि किसी ने मिंटेड पैकेज का उल्लेख क्यों नहीं किया । इसमें LaTeX लिस्टिंग पैकेज की तुलना में कहीं बेहतर सिंटैक्स हाइलाइटिंग है। यह प्यूऐशंस का उपयोग करता है ।

$ pip install Pygments

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}

जिसके परिणामस्वरूप:

यहां छवि विवरण दर्ज करें

आपको -shell-escapepdflatex कमांड के साथ ध्वज का उपयोग करने की आवश्यकता है ।

अधिक जानकारी के लिए: https://www.sharelatex.com/learn/Code_Highlighting_with_minted


2
+1। टकसाल LaTeX में स्रोत कोड टाइप करने के लिए पैकेज है। न केवल इसका उपयोग करना आसान है, सुविधा-संपन्न और अच्छी तरह से प्रलेखित है, लेकिन इसे यूनिकोड वर्णों के साथ सोर्स कोड (इसके विपरीत listings) में कोई समस्या नहीं है ।
ScumCoder

हे भगवान! बहुत बेहतर! सुझाव के लिए बहुत-बहुत धन्यवाद।
दिमित्री ज़ोटिकोव

21

listingsपैकेज पर एक कोशिश है । यहाँ एक उदाहरण है कि मैंने कुछ समय पहले रंगीन जावा लिस्टिंग के लिए क्या उपयोग किया था:

\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}

आप इसे अनुकूलित करना चाह सकते हैं। लिस्टिंग पैकेज के कई संदर्भ हैं। बस उन्हें गूगल करें।


धन्यवाद। मैं अभी भी लिस्टिंग पैकेज के बारे में जानता हूँ, लेकिन मेरे नमूने की तरह प्रारूपित करने में सक्षम नहीं हूँ। यह असली सवाल है।
Mork0075

9

algorithmsपैकेज, विशेषकर algorithmपर्यावरण पर एक नज़र डालें ।


1
धन्यवाद। यह पैकेज अधिक सैद्धांतिक रूप से चर्चा में बहुत मजबूत प्रतीत होता है, मैं इसे कई गणित पुस्तकों से जानता हूं। लेकिन मैं इस पर इतना जोर नहीं दूंगा (अगर, किसी और चीज पर), तो मैं ऊपर दिए गए फॉर्मेट को पसंद करूंगा।
Mork0075

4
मैं केवल algorithmपर्यावरण की बात कर रहा था , नहीं algorithmicalgorithmएक फ्लोटिंग कंटेनर है, जो बहुत अच्छा दिखता है। आप जो कुछ भी अंदर चाहते हैं, यहां तक ​​कि listingउल्लेखित elsethread डाल सकते हैं ।
अवकर

8

कई अन्य चीजें हैं जो आप कर सकते हैं, जैसे कि नए फोंट का चयन करना:

\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
मेरा मानना ​​है कि बैकस्लैश में \ keywordstyle और \ tabsize को हटा दिया जाना चाहिए क्योंकि यह इस तरह से काम नहीं करेगा। फिर भी बहुत मददगार!
15

2

आर कोड के लिए मैं का उपयोग करें

\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={}
}

और यह बिल्कुल ऐसा दिखता है

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.