PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Listing immer auf neue Seite packen



toob
18-08-2006, 12:19
Heyho.

Es gibt da ein Problem, mit dem ich maximal überfordert bin. Ich muss ein leider ziemlich langes Listing (knapp eine Seite) innerhalb meines Textes anzeigen. Aufgrund der Länge des Listings würde ich mir wünschen, dass es immer auf einer neuen Seite beginnt. Allerdings möchte ich nicht, dass auf der Seite davor eine große Lücke entsteht, stattdessen soll sich das Listing immer an die Stelle schieben, die eine gefüllte vorhergehende Seite gewährleistet. Wenn ich das jetzt so lese, dann hoffe ich, mich ein wenig verständlich ausgedrückt zu haben. Selbstverständlich könnte ich das immer alles mit Hand zurechtbasteln, da aber am Text immer wieder Änderungen vorgenommen werden, wäre eine "dynamische" Lösung weitaus besser. Für das Listing benutze ich (wahrscheinlich wenig überraschend) das Paket "listings".

Besten Dank vorab und Gruß aus HB,

Toob

sofa-surfer
18-08-2006, 12:21
Hallo,
kannst du das Listing nicht einfach in eine Gleitumgebung packen und das dann auf einer Page of Floats platzieren?

Matthias

toob
18-08-2006, 12:24
Hallo,
kannst du das Listing nicht einfach in eine Gleitumgebung packen und das dann auf einer Page of Floats platzieren?

Matthias

Das weiß ich noch nicht, da ich all diese Begriffe gerade zum ersten Mal gehört/gelesen habe. Ich werde gleich mal recherchieren gehen, da Gleitumgebung bezüglich meiner Frage ziemlich passend klingt.

Danke Dir schon mal,

Toob

toob
18-08-2006, 12:39
Tatsächlich gibt es für das listings-Paket die Option "float", die wie andere Gleitumgebungen mit den entsprechenden Werten htbp belegt werden kann. Nun kriege ich zwar immer eine Warnung, dass das Listing nicht an die gewünschte Stelle passt, dafür stimmt aber das Ergebnis.

Sehr cool, allerbesten Dank mal wieder,

Toob

toob
18-08-2006, 14:23
... leider funktioniert es doch noch nicht wie gewünscht. Ich versuche mich mal an einem Minimalbeispiel:



\documentclass[pdftex,a4paper,12pt]{scrreprt}
\usepackage[latin1]{inputenc}
\usepackage{listings}

\begin{document}
\lstset{
commentstyle=\textit,
basicstyle=\small,
frame=b,
numbers=left,
numberstyle=\tiny,
aboveskip=30pt,
belowskip=30pt,
xleftmargin=40pt,
xrightmargin=40pt,
lineskip=-2pt,
captionpos=b,
tabsize=4
}

\chapter{Kapitelüberschrift}
Hier steht zunächst eine ganze Menge Text, zumindest aber soviel,
dass das nachfolgende (hier aber gekürzte) Listing bei einer Länge
von knapp einer Seite nicht mehr komplett auf diese Seite passt.\\
\lstset{language=XML}
\begin{lstlisting}[float=ht,
caption={Einfaches \gloss{xml}-Schema für eine Rechnung},
label={lst:xsdexample}
]{}
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
(...)
</xs:schema>
\end{lstlisting}
Hier nun der nachfolgende Text, der auf der ersten Seite (und
damit vor dem Listing) auftauchen soll.


Soweit funktioniert das auch, das Listing wird zunächst an den Beginn der nächsten Seite geschoben. Schreibe ich hinter dem Listing aber sehr viel weiter, taucht der Text trotzdem noch vor dem Listing auf, welches dann eben irgendwann auf die dritte Seite (usw) geschoben wird. Eigentlich hatte ich mir gewünscht, dass es an der ersten Stelle, an die es hinpasst, stehen bleibt und der nachfolgende Text dann eben auch nach dem Listing auftaucht. Wo liegt denn mein Fehler?

RedCloud
18-08-2006, 14:36
... leider funktioniert es doch noch nicht wie gewünscht. Ich versuche mich mal an einem Minimalbeispiel:

Soweit funktioniert das auch, das Listing wird zunächst an den Beginn der nächsten Seite geschoben. Schreibe ich hinter dem Listing aber sehr viel weiter, taucht der Text trotzdem noch vor dem Listing auf, welches dann eben irgendwann auf die dritte Seite (usw) geschoben wird. Eigentlich hatte ich mir gewünscht, dass es an der ersten Stelle, an die es hinpasst, stehen bleibt und der nachfolgende Text dann eben auch nach dem Listing auftaucht. Wo liegt denn mein Fehler?

na du hast doch extra in deinem ersten Posting angegeben, dass die Seite davor aufgefüllt werden soll ????
Wenn du das nicht willst, dann nimm kein GLEITobjekt, sondern mach einfach

\clearpage
\begin{lstlisting}
....

_ohne_ die float option.

Abgesehen davon solltest du \\ nur in Ausnahmefällen benutzen. In deinem Beispiel ist es jedenfalls fehl am Platze ...

rc

toob
18-08-2006, 14:45
Jetzt verstehe ich leider gar nichts mehr. Ein \clearpage scheint in meinem Fall zu bewirken, dass an der entsprechenden Stelle ein Seitenumbruch stattfindet. Dann wird der leere Platz vor dem Listing aber nicht aufgefüllt. Mit der float-Angabe wird dieser Platz zwar ausgefüllt, aber das Listing scheint komplett aus dem Text herausgenommen und immer weiter nach hinten geschoben zu werden. Was ich eigentlich bräuchte wäre aber ein Verschieben auf die nächste freie Seite, die vorhergehende sollte bis zum Ende aufgefüllt werden, nachfolgender Text dann aber nach dem Listing fortgeführt werden. Oje, mir fehlt da ganz klar die LaTeX-Erfahrung.


PS: Wie erreiche ich denn einen Absatz im Text? \\ ist bisher der einzige mir bekannte Weg.

Edit: Rechtschreibung.

sofa-surfer
18-08-2006, 14:47
\\ --> Zeilenumbruch

Leerzeile in der .tex-Datei --> Absatz
\par --> Absatz

generell sinnvoll (?) --> einführende Doku lesen

RedCloud
18-08-2006, 15:19
Jetzt verstehe ich leider gar nichts mehr. Ein \clearpage scheint in meinem Fall zu bewirken, dass an der entsprechenden Stelle ein Seitenumbruch stattfindet. Dann wird der leere Platz vor dem Listing aber nicht aufgefüllt. Mit der float-Angabe wird dieser Platz zwar ausgefüllt, aber das Listing scheint komplett aus dem Text herausgenommen und immer weiter nach hinten geschoben zu werden. Was ich eigentlich bräuchte wäre aber ein Verschieben auf die nächste freie Seite, die vorhergehende sollte bis zum Ende aufgefüllt werden, nachfolgender Text dann aber nach dem Listing fortgeführt werden. Oje, mir fehlt da ganz klar die LaTeX-Erfahrung.


wenn du float=p machst, kommt es garantiert auf die nächste Seite! Es sei denn und hier liegt wohl das Problem, das listing ist länger als eine Seite, dann wandert es automatisch an das Ende des Kapitels. Und länger als eine Seite ist es schon, wenn es nur 1pt ist (einschließlich der Über/Unterschrift.

rc

toob
18-08-2006, 15:23
wenn du float=p machst, kommt es garantiert auf die nächste Seite! Es sei denn und hier liegt wohl das Problem, das listing ist länger als eine Seite, dann wandert es automatisch an das Ende des Kapitels. Und länger als eine Seite ist es schon, wenn es nur 1pt ist (einschließlich der Über/Unterschrift.

rc

Aah, das scheint tatsächlich der Fall zu sein. Die oben angesprochene Warnung besagt tatsächlich, dass der/die/das Float zu groß für eine Seite ist. Ich dachte, das bezog sich auf die erste Seite und nicht bereits auf die Zielseite. Dann muss ich mal schauen, ob sich da nicht was kürzen lässt.

Vielen Dank Euch allen, mit der Bitte um Verzeihung für etwas ungenaue Auskünfte meinerseits und ein schönes Wochenende,

Toob

RedCloud
18-08-2006, 15:25
Aah, das scheint tatsächlich der Fall zu sein. Die oben angesprochene Warnung besagt tatsächlich, dass der/die/das Float zu groß für eine Seite ist. Ich dachte, das bezog sich auf die erste Seite und nicht bereits auf die Zielseite. Dann muss ich mal schauen, ob sich da nicht was kürzen lässt.


du kannst den Zeilenabstand im listing etwas verringern -> doku

rc

toob
18-08-2006, 15:32
Ich habe jetzt einfach \aboveskip und \belowskip im \lstset etwas verringert. Und alles ist gut. Danke nochmals.