Einfügen von Code in dieses LaTeX-Dokument mit Einzug


425

Wie füge ich Code in ein LaTeX-Dokument ein? Gibt es so etwas wie:

\begin{code}## Heading ##
...
\end{code}

Das einzige, was ich wirklich brauche, ist Einrückung und eine Schriftart mit fester Breite. Syntaxhervorhebung könnte nett sein, obwohl es definitiv nicht erforderlich ist.


Kein genaues Duplikat, aber die Antworten decken denselben Grund ab: siehe stackoverflow.com/questions/741985/…
Charles Stewart

Ich habe auch eine Folgefrage hier: stackoverflow.com/questions/3408996/…
sixtyfootersdude

Antworten:


629

Verwenden listingsPaket.

Einfache Konfiguration für den LaTeX-Header (vorher \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
}

Sie können die Standardsprache in der Mitte des Dokuments mit ändern \lstset{language=Java}.

Anwendungsbeispiel im Dokument:

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

Hier ist das Ergebnis:

Beispielbild


3
Ich habe eine Folgefrage zu Ihrem Code. Werfen
sixtyfootersdude

1
Gibt es eine Möglichkeit, den Abstand zwischen Codezeilen zu verringern?
Sukhvir

Ist es möglich, kleinen Text unter das Code-Snippet einzufügen, ähnlich dem Text, der unter einer Figur in Latex geschrieben ist?
Brian J

@ Brian Ich bin mir dessen nicht bewusst. Vielleicht könnte der Code in einem figureden Effekt erzielen.
Cloudanger

Ich habe gehört, dieses Paket ist jetzt veraltet!
xxx ---

165

Sie können auch die wörtliche Umgebung verwenden

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

57
Es gibt ein Problem bei der Verwendung von Registerkarten in der wörtlichen Umgebung. Wenn Registerkarten in "Leerzeichen" konvertiert werden, verschwindet das Problem.
Midtiby

1
Dies ist gut geeignet, um den Inhalt von Beispieltextdateien anzuzeigen (z. B. Textdaten, die von einem Programm gelesen / verarbeitet werden sollen).
Nalyd88

Bei zweispaltigen Artikeln werden die Ränder nicht gut behandelt.
Sazzad Hissain Khan

115

So fügen Sie Inline-Code hinzu:

Sie können Inline-Code mit {\tt code }oder hinzufügen \texttt{ code }. Wenn Sie den Inline-Code formatieren möchten, erstellen Sie am besten einen eigenen Befehl

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

Beachten Sie außerdem, dass Codeblöcke aus anderen Dateien mit geladen werden können

\lstinputlisting[breaklines]{source.c}

breaklinesist nicht erforderlich, aber ich finde es nützlich. Beachten Sie, dass Sie Einträge angeben müssen\usepackage{ } für diese .

Update: Das Listings-Paket enthält auch den \lstinlineBefehl, der über dieselben Syntaxhervorhebungsfunktionen wie die Befehle \lstlistingund verfügt \lstinputlisting(Konfigurationsdetails finden Sie in der Antwort von Cloudanger). Wie in einigen anderen Antworten erwähnt, gibt es auch das geprägte Paket, das den \mintinlineBefehl bereitstellt . Wie \lstinline, \mintinlinebietet die gleiche Syntax wie ein regulären Geprägt Codeblock hervorheben:

\documentclass{article}

\usepackage{minted}

\begin{document}
  This is a sentence with \mintinline{python}{def inlineCode(a="ipsum)}
\end{document}

1
Gibt es einen besseren Weg für Inline-Code, der Keyword-Farben usw. aktiviert?
Nano

Ja. Ich habe meine Antwort aktualisiert, um sie zu diskutieren.
Alan

Wie füge ich Abstände / Tabulatoren ein, damit es besser lesbar aussieht?
Charlie Parker

32

Spezielle Pakete wie minted, die sich bei der Formatierung auf Pylements stützen, bieten verschiedene Vorteile gegenüber dem listingsPaket. Um aus dem mintedHandbuch zu zitieren ,

Pylements bietet im Vergleich zu herkömmlichen Paketen eine weitaus bessere Syntaxhervorhebung. In Listen werden beispielsweise nur Zeichenfolgen, Kommentare und Schlüsselwörter hervorgehoben. Pygements hingegen können vollständig angepasst werden, um alle Token hervorzuheben, die von der Ausgangssprache unterstützt werden. Dies kann spezielle Formatierungssequenzen in Zeichenfolgen, Zahlen, verschiedenen Arten von Bezeichnern und exotischen Konstrukten wie HTML-Tags umfassen.


1
Ich habe geprägt, die Dokumentation ist ganz einfach. Der Standardstil ist sehr gut.
user2262504

5
Dies kann für viele Benutzer eine unbefriedigende Lösung sein, da Pylementsic einen externen Anruf benötigt. Insbesondere die Anforderung, Latex mit der -shell-escapeDirektive aufzurufen, ist bestenfalls eine geringfügige Änderung bestehender Build-Systeme und im schlimmsten Fall nicht mit den Sicherheitspräferenzen einiger Benutzer kompatibel.
KDN

12

Verwenden Sie Minted .

Es ist ein Paket, das die Hervorhebung der ausdrucksstarken Syntax in LaTeX mithilfe der leistungsstarken Pylements- Bibliothek erleichtert . Das Paket bietet auch Optionen zum Anpassen der hervorgehobenen Quellcode-Ausgabe mit fascvrb .

Es ist viel weiterentwickelt und anpassbar als jedes andere Paket!


Wie bereits in einer ähnlichen Antwort erwähnt, -shell-escapekönnte dies jedoch für manche Menschen zum Kotzen sein.
Egor Hans

8

Geprägt workes in Overleaf , TeX Live und MiKTeX.

Beispiel:

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

\begin{minted}[mathescape, linenos]{python}

# Note: $\pi=\lim_{n\to\infty}\frac{P_n}{d}$
title = "Hello World"

sum = 0
for i in range(10):
 sum += i

\end{minted}

\end{document}

Ausgabe:

Geben Sie hier die Bildbeschreibung ein


6

Da es hier noch nicht erwähnt wurde, kann es sinnvoll sein, eine weitere Option hinzuzufügen, das Paket spverbatim(keine Syntaxhervorhebung):

\documentclass{article}
\usepackage{spverbatim}

\begin{document}

\begin{spverbatim}
  Your code here
\end{spverbatim}

\end{document}

Wenn keine Syntaxhervorhebung erforderlich ist, verpacken Sie Folgendes alltt:

\documentclass{article}
\usepackage{alltt}

\begin{document}

\begin{alltt}
  Your code here
\end{alltt}

\end{document}

1
Dies ist mehr oder weniger das, was ich will, aber ich kann nicht mit Tabulatoren einrücken. Wie rücken Sie ein / gibt es ein ähnliches Paket, das ein einfacheres Einrücken ermöglicht?
Darokrithia

1
@Darokrithia Ich habe meine Antwort bearbeitet: Kannst du Einrückungen überprüfen / konfrontieren? :)
MattAllegro

1
Es scheint nicht zu funktionieren. Ich kann Ihnen den von mir verwendeten Code senden, aber die Formatierung wird in Kommentaren zerstört. Übrigens habe ich eine andere Antwort verwendet und es hat gut funktioniert, aber ich denke, dies sollte für zukünftige Leser noch behoben werden.
Darokrithia

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.