Kann das Listings-Paket Quellcode automatisch einrücken?

Kann das Listings-Paket Quellcode automatisch einrücken?

Das listingsPaket hebt Schlüsselwörter im Quellcode automatisch hervor und sorgt für ein ansprechendes Aussehen. Ist es möglich, das Programm automatisch einzurücken? listingsWenn beispielsweise in der folgende Code eingegeben wird,

#include<stdio.h>
void main()
{
printf("\n Hello World");
}

Die Ausgabe sollte

#include<stdio.h>

void main()
{
    printf("\n Hello World");
}

Ist listingsdas möglich und wenn ja, wie muss ich es konfigurieren?

Antwort1

Das listingsPaket stellt diese Funktionalität bereit; siehe Abschnitt 5.6 des Handbuchs. Stellen Sie sicher, dass der Aspekt geladen ist. Dies kann entweder durch Übergabe als Paketoption an formatserfolgen ,formatslistings

\usepackage[formats]{listings}

oder mit dem \lstloadaspectsMakronachLaden des listingsPakets,

\usepackage{listings}
...
\lstloadaspects{formats}

Verwenden Sie dann das \lstdefineformatMakro, um ein „Format“ zu definieren, also Anweisungen, was listingsbeim Auftreten bestimmter Zeichen geschehen soll. Die unten gezeigte Formatdefinition stammt direkt aus dem Handbuch.

Beachten Sie, dass diese Funktion experimentell bleibt. Laut Handbuch

Die automatische Formatierung des Quellcodes ist alles andere als gut. Erstens gibt es keine allgemeinen Regeln, wie Quellcode formatiert werden soll. Daher müssen „Formatdefinitionen“ flexibel sein. Diese Flexibilität erfordert eine komplexe Schnittstelle, einen leistungsstarken „Formatdefinitionsparser“ und viele Codezeilen im Hintergrund. Derzeit sind die Formatdefinitionen nicht flexibel genug (möglicherweise nicht die Definitionen, sondern die Ergebnisse).

Ausgabe

\documentclass{article}

\usepackage[formats]{listings}

\lstdefineformat{C}
{
  \{=\newline\string\newline\indent,%
  \}=\newline\noindent\string\newline,%
  ;=[\ ]\string\space,%
}

\lstset{basicstyle=\ttfamily}

\usepackage{filecontents}
\begin{filecontents*}{sample.c}
#include<stdio.h>
void main()
{
printf("\n Hello World");
}
\end{filecontents*}

\begin{document}

\section*{``Raw'' listing}
\lstinputlisting{sample.c}

\section*{With automatic formatting}
\lstinputlisting[format=C]{sample.c}

\end{document}

verwandte Informationen