PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \lstinputlisting zentriert?



sensemann
12-02-2006, 13:30
Also ich weiß auch nicht, was genau ich falsch mache, aber ich bekomme mein inputlisting nicht zentriert. Auch nicht, wenn ich es so mache:


\begin{center}
\lstinputlisting[language=XML, ..., linewidth=8cm]{xml.txt}
\end{center}

Das ist nur ein kleiner Auszug, sollte aber reichen. Manche meiner Listings sind nicht sehr breit, deshalb würde ich sie gerne zentrieren... aber wie?

countbela666
12-02-2006, 14:01
Hallo sensemann,

eine lstlisting- bzw. lstinputlisting-Umgebung zu zentrieren ist gar nicht so einfach, weil sie per default die ganze Seitenbreite einnehmen, egal wie breit der Text in ihnen ist. Lösen könntest du dein Problem nur durch Anpassen der Breite des Listings von Hand; dazu kannst du entweder die Parameter zur Randanpassung des listings-Pakets oder einfach eine minipage nutzen:

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[caption=Zentrieren mit margin,
frame=single,
xrightmargin=.3\textwidth,
xleftmargin=.3\textwidth]
for i:=maxint to 0 do
begin
j:=square(root(i));
end;
\end{lstlisting}
\begin{center}
\begin{minipage}{.4\textwidth}
\begin{lstlisting}[caption=Zentrieren mit minipage,
frame=single]
for i:=maxint to 0 do
begin
j:=square(root(i));
end;
\end{lstlisting}
\end{minipage}
\end{center}
\end{document}Grüße,
Marcel

sensemann
12-02-2006, 16:55
Das mit der minipage funktioniert super, allerdings wird die Caption darunter dann auch umgebrochen, da sie mit auf die Breite beschränkt wird. Das ist natürlich extrem unschön... also werd ich wohl auf die Zentrierung verzichten müssen :(

countbela666
12-02-2006, 17:37
allerdings wird die Caption darunter dann auch umgebrochen, da sie mit auf die Breite beschränkt wird.Das Problem hast du nicht, wenn du die erste Methode anwendest.

sensemann
12-02-2006, 18:09
Ich hab nen extra Befehl, der mir das lstlisting erstellt. Ein Parameter davon ist die Breite (der 4.)

Bisher hatte ich da also einfach stehen: linewidth={#4}

Wenn ich die margin-Optionen nutze, dann würde ich also gerne sowas ausdrücken wie leftmargin = rightmargin = (textbreite - listingbreite)/2.

Wie mach ich das LaTeX? Ich hab's jetzt mal völlig ahnungslos so probiert:



..
xrightmargin=(\textwidth-#4)/2,
xleftmargin=(\textwidth-#4)/2,
label=lst:#2,
...


Das funktioniert aber natürlich nicht...

countbela666
12-02-2006, 20:18
Für solche Berechnungen gibt's das Paket calc. Du könntest dir eine neue Längenvariable für die Randbreite anlegen, diese je nach Parameter vor einem Listing berechnen und xleftmargin und xrightmargin übergeben. Hier mal ein MB (musst du nur noch an deinen selbstgebastelten Befehl anpassen):

\documentclass{article}
\usepackage{listings,calc}
\newlength{\lstmarginwd}
\begin{document}
\setlength{\lstmarginwd}{(\textwidth - 8cm) * \real{.5}}
\begin{lstlisting}[caption=Zentrieren mit margin,
frame=single,
xrightmargin=\lstmarginwd,
xleftmargin=\lstmarginwd]
for i:=maxint to 0 do
begin
j:=square(root(i));
end;
\end{lstlisting}
\end{document}Grüße,
Marcel

sensemann
13-02-2006, 07:10
Funktioniert ganz wunderbar.

Vielen vielen Dank!!