Formatierung für lstlisting temporär ausschalten? Thema ist als GELÖST markiert

Schriftbild, Absätze und Auflistungen einstellen


Felrpi

Formatierung für lstlisting temporär ausschalten?

Beitrag von Felrpi »

Hey, da ich einige Quellcodeausschnitte in meinem Dokument habe, habe ich eine automatische Formatierung für lstlistings eingerichtet.

Dabei wird unter anderem bei einer öffnenden geschweiften Klammer ein Zeilenumbruch gemacht.
Bei Methoden und Schleifen etc. ist das auch gut, allerdings möchte ich das bei Array-Initialisierungen vermeiden.
Deshalb habe ich versucht die automatische Formatierung auszuschalten durch das 'Überschreiben' der Settings mittels \lstdefineformat, allerdings hat das keine Wirkung.

Hier ein Minimalbeispiel:
\documentclass{scrbook}

\usepackage[formats]{listings}
\usepackage{color}

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

\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,
	format=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
}


\begin{document}

%Hier soll automatisch formatiert werden
\begin{lstlisting}[frame=single]  
for(int i = 0; i < 10; i++){System.out.println(Math.pow(i, i))}
\end{lstlisting}

\lstdefineformat{Java}{%
	\{=,%
	\}=[;],%
	\};=,%
	;=[\ ]}
%Hier soll die bei dem int-Array kein Zeilenumbruch stattfinden (Formatierung ganz ausschalten???)
\begin{lstlisting}[frame=single]
	int[] array = new int[]{1, 2, 3, 4, 5};
\end{lstlisting}

\end{document}
Hoffe mir kann da jemand sagen, wie man die automatische Formatierung temporär deaktivieren kann.

Danke und schöne Grüße

Gast

Beitrag von Gast »

Um den Umbruch los zu werden, musst du doch nur breaklines=false bei den Optionen von lstlisting angeben. Genauso kannst Du auch andere Einstellungen lokal ändern.

Schöner finde ich übrigens, gleich für Java eine neue Umgebung zu definieren (siehe [d]listings[/d]-Anleitung) und nur in dieser die dafür gewünschten Einstellungen vorzunehmen. Dann kann man auch gleich unterschiedliche Umgebungen für unterschiedliche Zwecke definieren.

Felrpi

Beitrag von Felrpi »

Hey, mit der Option habe ich es mal probiert:
\begin{lstlisting}[frame=single]   
for(int i = 0; i < 10; i++){System.out.println(Math.pow(i, i))} 
\end{lstlisting} 

\begin{lstlisting}[breaklines=false, frame=single] 
   int[] array = new int[]{1, 2, 3, 4, 5}; 
\end{lstlisting}  
Leider ist der Umbruch immer noch da:
Bild

Die zweite Sache mit der eigenen Umgebung werde ich mir auch nochmal angucken.

Gast

Beitrag von Gast »

Das Format neu zu definieren genügt nicht. Man muss es auch neu anwenden:
\documentclass{scrbook}

\usepackage[formats]{listings}
\usepackage{color}

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

\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,
   format=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,
}


\begin{document}

%Hier soll automatisch formatiert werden
\begin{lstlisting}[frame=single]  
for(int i = 0; i < 10; i++){System.out.println(Math.pow(i, i))}
\end{lstlisting}

\lstdefineformat{Java}{%
   \{=,%
   \}=[;],%
   \};=,%
   ;=[\ ]}
%Hier soll die bei dem int-Array kein Zeilenumbruch stattfinden (Formatierung ganz ausschalten???)
\begin{lstlisting}[frame=single,format=Java]
   int[] array = new int[]{1, 2, 3, 4, 5};
\end{lstlisting}

\end{document}
Ich würde da schlicht in der Dokumentpräambel zwei verschiedene Formate definieren. Dann kann man einfach im Dokument per format-Option zwischen den beiden umschalten.

Felrpi

Beitrag von Felrpi »

Danke, mit den zwei Formaten klappts nun gut :)


Felrpi

Beitrag von Felrpi »

Das müsste dann wohl ein Moderator übernehmen, als Gast geht das leider nicht.

Danke nochmal und schönes Wochenende ;)

Gast

Beitrag von Gast »

Doch, als Gast geht das, während man einen Kommentar schreibt. Wenn Du also einen Danke-Kommentar schreibst, kannst Du auch gleich den Status anpassen.

Antworten