343 Stimmen

LaTeX-Quellcode-Listing wie in Fachbüchern

Wie sollte ein Latex-Quellcode-Listing aussehen, um eine Ausgabe wie in bekannten Büchern, z.B. für das Spring Framework, zu erzeugen? Ich habe es mit dem latex listings Paket versucht, aber ich konnte nichts produzieren, das so schön aussah wie das untenstehende. Ich bin also in erster Linie an den Formatierungsanweisungen interessiert, um etwas wie das folgende Beispiel zu erzeugen (aus Manning's Beispielkapitel für Frühling in Aktion ):

From Manning's Spring in Action

エディトリアル Insbesondere mit Hilfe von Tormod Fjeldskår Hier ist das komplette Snippet, um das gewünschte Aussehen zu erzeugen:

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

Verwenden Sie es mit diesem in Ihrem Dokument:

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

196voto

Tormod Fjeldskår Punkte 5894

Ich habe den Eindruck, dass Sie eigentlich nur das Aussehen der Beschriftungen anpassen wollen. Das geht am einfachsten mit der Funktion caption Paket. Eine Anleitung zur Verwendung dieses Pakets finden Sie unter das Handbuch (PDF) . Sie müssen wahrscheinlich Ihr eigenes benutzerdefiniertes Beschriftungsformat erstellen, wie in Kapitel 4 des Handbuchs beschrieben.

Editer : Getestet mit 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}

Ergebnis:

Preview

52voto

Bastien Léonard Punkte 57728

Ich bin zufrieden mit dem listings Paket:

Listing example

So konfiguriere ich es:

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

Ich verwende es so:

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

34voto

zvrba Punkte 23708

Und bitte, was auch immer Sie tun, konfigurieren Sie das Listing-Paket so, dass es eine Schrift mit fester Breite verwendet (wie in Ihrem Beispiel; Sie finden die Option in der Dokumentation). Die Standardeinstellung verwendet eine Proportionalschrift, die auf einem Raster steht, was IMHO unglaublich hässlich und unleserlich ist, wie man an den anderen Antworten mit Bildern sehen kann. Ich bin persönlich sehr irritiert, wenn ich einen Code lesen muss, der in einer Proportionalschrift gesetzt ist.

Versuchen Sie, damit eine Schrift mit fester Breite einzustellen:

\lstset{basicstyle=\ttfamily}

32voto

Hans Ott Punkte 504

Ich frage mich, warum niemand die Geprägt Paket. Es hat eine viel bessere Syntaxhervorhebung als das LaTeX-Listing-Paket. Es verwendet Pygmäen .

$ pip install Pygments

Beispiel in 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}

Daraus ergibt sich:

enter image description here

Sie müssen das Flag -shell-escape mit dem Befehl pdflatex.

Für weitere Informationen: https://www.sharelatex.com/learn/Code_Highlighting_with_minted

21voto

Markus Punkte 1742

Versuchen Sie es mal mit dem listings Paket. Hier ist ein Beispiel dafür, wie ich vor einiger Zeit ein farbiges Java-Listing erstellt habe:

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

Vielleicht möchten Sie das anpassen. Es gibt mehrere Referenzen für das Listing-Paket. Googeln Sie sie einfach.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X