\brokenpenalty unterschiedlich auf ungeraden Seiten

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Gast

\brokenpenalty unterschiedlich auf ungeraden Seiten

Beitrag von Gast »

Moin Moin,

ich möchte in meinem zweiseitigen Dokument einstellen, dass auf rechten, also ungeraden Seiten ein brokenpenalty von 9999 gilt und auf linken Seiten der Standardwert. Damit sollen dann Worttrennungen, bei denen man umblättern muss, weitestgehend verhindert werden. Auf sich gegenüberliegenden Seiten finde ich das nicht so schlimm. Besonders weil sonst der Seitenumbruch oft nicht gut ist.

Zu diesem Zweck habe ich den folgenden Code im Netz gefunden:

https://tex.stackexchange.com/questions ... -page-only

Code: Alles auswählen

\usepackage{everypage}
\AddEverypageHook{%
    \ifodd\c@page%
      \global\brokenpenalty=110%
    \else%
      \global\brokenpenalty=10000%
    \fi%
}
Das scheint auch zu funktionieren. Meine Frage ist jetzt allerdings weshalb:

Da steht doch im Prinzip: Wenn der Seitencounter eine ungerade Zahl enthält, dann ist die Strafe bei 110, ansonsten bei 10000. Das wäre doch aber gerade verkehrtherum, oder nicht?

Danke für eure Hilfe!

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4036
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Der Code wird am Ende der Seite ausgeführt, betrifft also die nächste Seite.

Gast

Beitrag von Gast »

Übrigens verhindert \brokenpenalty nicht, dass an der Stelle, an der optimaler Weise ein Seitenumbruch erfolgen würde, eine Trennung erfolgt. Stattdessen verhindert es, dass an der Stelle, an der eine Trennung erfolgt, ein Seitenumbruch gemacht wird. TeX versucht dann also eine Zeile früher oder später den Seitenumbruch zu machen. Wenn man dann gleichzeitig auch noch Schusterjungen absolut verhindert und ggf. weiteres Umbruchhürden aufhäuft, kann das schnell zu einer Verschlechterung des Seitenumbruchs führen, weil TeX irgendwann zu ggf. unschönen Notlösungen greift. Man sollte sich dessen zumindest bewusst sein oder ggf. einen Wert wählen, den TeX nicht als unendlich interpretiert.

Gast

Beitrag von Gast »

Danke für die Antworten.

Ich habe meinen code jetzt wie folgt eingestellt:

Code: Alles auswählen

\clubpenalty = 10000 
\widowpenalty = 10000
\displaywidowpenalty = 10000

\usepackage{everypage}
\makeatletter
\AddEverypageHook{%
    \ifodd\c@page%
      \global\brokenpenalty=110%
    \else%
      \global\brokenpenalty=9999%
    \fi%
}
\makeatother
Ich weiß, dass man eigentlich die penalties nicht auf 10000 stellen soll. Aber selbst bei 9999 bekomme ich sehr ungünstige Schusterjungen und Hurenkinder. Leider haben \enlargethispage*{\baselineskip}, \enlargethispage{\baselineskip}, \looseness=-1 keinen wirklich nennenswerten Effekt. Und wenn doch, dann sieht der Seitenumbruch meist noch schlimmer aus.

Leider weiß ich ansonsten nicht, wie ich den Seitenumbruch noch verbessern könnte... Gibt es eigentlich irgend einen Haken an der odd-even-Unterscheidung von \brokepenalty=9999 oder der Art der Umsetzung?

Danke!

Gast

Beitrag von Gast »

Anonymous hat geschrieben:Gibt es eigentlich irgend einen Haken an der odd-even-Unterscheidung von \brokepenalty=9999 oder der Art der Umsetzung?
Haken ist, dass in Extremfällen, die falsche Entscheidung getroffen werden kann. Die Fälle dürften allerdings sehr selten sein, da in der Realität kaum Absätze vorkommen, die über mehr als zwei Seitenumbrüche gehen (jedenfalls, wenn man sich von Unfug wie \\ im Text fern hält).

Antworten