Seite 1 von 1

Formatierung für lstlisting temporär ausschalten?

Verfasst: Do 9. Feb 2017, 16:53
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

Verfasst: Do 9. Feb 2017, 17:52
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.

Verfasst: Do 9. Feb 2017, 19:20
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.

Verfasst: Fr 10. Feb 2017, 08:01
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.

Verfasst: Fr 10. Feb 2017, 10:41
von Felrpi
Danke, mit den zwei Formaten klappts nun gut :)

Verfasst: Fr 10. Feb 2017, 13:17
von Gast

Verfasst: Fr 10. Feb 2017, 13:22
von Felrpi
Das müsste dann wohl ein Moderator übernehmen, als Gast geht das leider nicht.

Danke nochmal und schönes Wochenende ;)

Verfasst: Fr 10. Feb 2017, 14:53
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.