PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Rahmen bei zweispaltiger Java-Einbindung



sg123
22-05-2013, 10:38
Hallo zusammen,

schon mal vorne weg, vielen Dank für eure Hilfe.

Ich will in mein Dokument zwei kleine Java Programme zum direkten Vergleich nebeneinander einbinden. Zum Erstellen des Java-Codes verwende ich lstlisting und für die zwei Spalten arbeite ich mit multicols. An sich funktioniert das ganz gut, allerdings habe ich das Problem, dass die Zeilennummerierung des rechten Codes im Rahmen des linken Codes hängt. Leider habe ich keine Idee, wie ich das ändern könnte.

Hier ein Beispiel:


\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{multicol}
\usepackage{listings}
\usepackage{pst-pdf}
\usepackage{color}


\begin{document}

\lstset{language=Java, %Setzt die Sprache
basicstyle=\scriptsize, %Setzt den Standardstil und Schriftgröße
keywordstyle=\color{blue!80!black!100}, %Setzt den Stil für Schlüsselwörter
identifierstyle=, % Identifier bekommen keine gesonderte formatierung
commentstyle=\color{green!50!black!100},% Stil für Kommentare
stringstyle=\ttfamily,% Stil für Strings (gekennzeichnet mit "String")
breaklines=true,% Zeilen werden umgebrochen
numbers=left,% Zeilennummern links
% numberstyle=\small,% Stil für die Seitennummern oder auch \tiny
frame=single,% Rahmen
backgroundcolor=\color{blue!5}, % Hintergrundfarbe
showstringspaces=false,
literate={Ö}{{\"O}}1 {Ä}{{\"A}}1 {Ü}{{\"U}}1 {ß}{{\ss}}2 {ü}{{\"u}}1 {ä}{{\"a}}1 {ö}{{\"o}}1 {µ}{\textmu}1,
tabsize=4
}

\begin{multicols}{2}

\begin{lstlisting}[caption={Methode \textit{run()}}, captionpos=t]
public void run() {
addElements();
defineActionListener();
setGetSize();
setVisible(true);
}
\end{lstlisting}

\columnbreak

\lstset{language=Java}
\begin{lstlisting}[caption={Klasse \texttt{Main}}, captionpos=t]
public class Main {
public static void main(String[] args){
Initialisation start = new Initialisation();
start.run();
start.setLocation(50, 50);
}
}
\end{lstlisting}

\end{multicols}

\end{document}


Vielen Dank,
sg

CollmDante
22-05-2013, 10:53
Der Abstand wischen den Spalten heißt \columnsep und kann daher mit:

\setlength{\columnsep}{<Abstand>}verändert werden.
Zum Beispiel:

\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{multicol}
\usepackage{listings}
\usepackage{pst-pdf}
\usepackage{color}


\begin{document}

\lstset{language=Java, %Setzt die Sprache
basicstyle=\scriptsize, %Setzt den Standardstil und Schriftgröße
keywordstyle=\color{blue!80!black!100}, %Setzt den Stil für Schlüsselwörter
identifierstyle=, % Identifier bekommen keine gesonderte formatierung
commentstyle=\color{green!50!black!100},% Stil für Kommentare
stringstyle=\ttfamily,% Stil für Strings (gekennzeichnet mit "String")
breaklines=true,% Zeilen werden umgebrochen
numbers=left,% Zeilennummern links
% numberstyle=\small,% Stil für die Seitennummern oder auch \tiny
frame=single,% Rahmen
backgroundcolor=\color{blue!5}, % Hintergrundfarbe
showstringspaces=false,
literate={Ö}{{\"O}}1 {Ä}{{\"A}}1 {Ü}{{\"U}}1 {ß}{{\ss}}2 {ü}{{\"u}}1 {ä}{{\"a}}1 {ö}{{\"o}}1 {µ}{\textmu}1,
tabsize=4
}
\setlength{\columnsep}{2em}
\begin{multicols}{2}

\begin{lstlisting}[caption={Methode \textit{run()}}, captionpos=t]
public void run() {
addElements();
defineActionListener();
setGetSize();
setVisible(true);
}
\end{lstlisting}

\columnbreak

\lstset{language=Java}
\begin{lstlisting}[caption={Klasse \texttt{Main}}, captionpos=t]
public class Main {
public static void main(String[] args){
Initialisation start = new Initialisation();
start.run();
start.setLocation(50, 50);
}
}
\end{lstlisting}

\end{multicols}

\end{document}

sg123
22-05-2013, 11:04
vielen Dank für deine schnelle und gute Antwort :)

klops
22-05-2013, 12:21
Bei der Verwendung von multicols für diesen Zweck kann es übrigens zu Problemen kommen, wenn das erste Listing nicht mehr komplett auf die Seite passt:
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{multicol}
\usepackage{listings}
%\usepackage{pst-pdf}
\usepackage{xcolor}% Damit kann man sich pst-pdf für die Farbeinstellung sparen.
\usepackage{lipsum}

\begin{document}

\lstset{language=Java, %Setzt die Sprache
basicstyle=\scriptsize, %Setzt den Standardstil und Schriftgröße
keywordstyle=\color{blue!80!black!100}, %Setzt den Stil für Schlüsselwörter
identifierstyle=, % Identifier bekommen keine gesonderte formatierung
commentstyle=\color{green!50!black!100},% Stil für Kommentare
stringstyle=\ttfamily,% Stil für Strings (gekennzeichnet mit "String")
breaklines=true,% Zeilen werden umgebrochen
numbers=left,% Zeilennummern links
% numberstyle=\small,% Stil für die Seitennummern oder auch \tiny
frame=single,% Rahmen
backgroundcolor=\color{blue!5}, % Hintergrundfarbe
showstringspaces=false,
literate={Ö}{{\"O}}1 {Ä}{{\"A}}1 {Ü}{{\"U}}1 {ß}{{\ss}}2 {ü}{{\"u}}1 {ä}{{\"a}}1 {ö}{{\"o}}1 {µ}{\textmu}1,
tabsize=4
}

\lipsum[1-5]

\setlength{\columnsep}{2em}
\begin{multicols}{2}

\begin{lstlisting}[caption={Methode \textit{run()}}, captionpos=t]
public void run() {
addElements();
defineActionListener();
setGetSize();
setVisible(true);
}
\end{lstlisting}

\columnbreak

\lstset{language=Java}
\begin{lstlisting}[caption={Klasse \texttt{Main}}, captionpos=t]
public class Main {
public static void main(String[] args){
Initialisation start = new Initialisation();
start.run();
start.setLocation(50, 50);
}
}
\end{lstlisting}

\end{multicols}

\end{document}
Durch Verwendung einer zusätzlichen minipage oder von zwei minipages an Stelle von multicol kann man in diesem Fall wenigstens den falschen Umbruch vermeiden:
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{lipsum}

\begin{document}

\lstset{language=Java, %Setzt die Sprache
basicstyle=\scriptsize, %Setzt den Standardstil und Schriftgröße
keywordstyle=\color{blue!80!black!100}, %Setzt den Stil für Schlüsselwörter
identifierstyle=, % Identifier bekommen keine gesonderte formatierung
commentstyle=\color{green!50!black!100},% Stil für Kommentare
stringstyle=\ttfamily,% Stil für Strings (gekennzeichnet mit "String")
breaklines=true,% Zeilen werden umgebrochen
numbers=left,% Zeilennummern links
% numberstyle=\small,% Stil für die Seitennummern oder auch \tiny
frame=single,% Rahmen
backgroundcolor=\color{blue!5}, % Hintergrundfarbe
showstringspaces=false,
literate={Ö}{{\"O}}1 {Ä}{{\"A}}1 {Ü}{{\"U}}1 {ß}{{\ss}}2 {ü}{{\"u}}1 {ä}{{\"a}}1 {ö}{{\"o}}1 {µ}{\textmu}1,
tabsize=4
}

\lipsum[1-5]

\noindent
\begin{minipage}[t]{.45\textwidth}% Ohne [t] für vertikale Zentrierung
\begin{lstlisting}[caption={Methode \textit{run()}}, captionpos=t]
public void run() {
addElements();
defineActionListener();
setGetSize();
setVisible(true);
}
\end{lstlisting}
\end{minipage}\hfill
\begin{minipage}[t]{.45\textwidth}% Ohne [t] für vertikale Zentrierung
\lstset{language=Java}
\begin{lstlisting}[caption={Klasse \texttt{Main}}, captionpos=t]
public class Main {
public static void main(String[] args){
Initialisation start = new Initialisation();
start.run();
start.setLocation(50, 50);
}
}
\end{lstlisting}
\end{minipage}

\end{document}
Einen optimalen Umbruch erhält man damit allerdings auch nicht automatisch, so dass es vielleicht ein Verbesserung darstellt, vielleicht auch nicht. Ich wollte es lediglich als mögliche Alternative erwähnen.