Trennlinien automatisch entfernen

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


Rolli
Forum-Guru
Forum-Guru
Beiträge: 382
Registriert: Mi 15. Feb 2017, 08:50
Wohnort: Mittelfranken

Trennlinien automatisch entfernen

Beitrag von Rolli »

Hallo,

ich habe im Dokument eine größere Anzahl von kleinen "Schnipseln" unterschiedlicher Höhe, die durch eine horizontale Linie voneinander getrennt sind.
Nun passiert es sowohl, dass die Trennlinie ganz unten auf der Seite dargestellt wird, als auch, dass die Trennlinie als erstes oben auf der nächsten Seite steht (im untenstehenden Beispiel ist das die rote Linie auf Seite 2 oben).

Ich finde, das schaut "blöd" aus, wenn zwei Linien direkt aufeinander folgen - meine Trennlinie, und die Kopf-/Fußzeilen-Trennlinie.

Also suche ich nach einer Möglichkeit, um meine "Schnipsel-Trennlinie" dann nicht zu setzen, wenn diese auf der Seite entweder ganz oben oder ganz unten gesetzt würde.

Gibt es einen Zähler, der irgendwo tief im TeX-Kernel vergraben ist, dessen Wert man auslesen kann, und der einem sagt, bei wieviel pt oder mm oder inch gemessen vom oberen oder unteren Seitenrand die Linie gesetzt würde? Habe beim "googeln" nichts gefunden.

Oder hat jemand eine andere Idee?
\documentclass [fontsize=8pt,paper=a5,parskip=half]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{scrlayer-scrpage}
\usepackage{xcolor}

\pagestyle{scrheadings}
\setheadsepline{3pt} % Zur Verdeutlichung übertrieben dick
\setfootsepline{3pt} % Zur Verdeutlichung übertrieben dick

\newcommand{\MyEntry} [1]{Irgend ein Bla Bla\par #1 \par Irgend ein Bla Bla \par \rule{\textwidth}{0.2pt}}
\newcommand{\MyEntryR}[1]{Irgend ein Bla Bla\par #1 \par Irgend ein Bla Bla \par {\color{red} \rule{\textwidth}{0.2pt}}}

\begin{document}

\MyEntry{Nummer 1}
\MyEntry{Nummer 2}
\MyEntry{Nummer 3}
\MyEntry{Nummer 4}
\MyEntry{Nummer 5}
\MyEntry{Nummer 6}
\MyEntry{Nummer 7}
\MyEntryR{Nummer 8}
\MyEntry{Nummer 9}
\MyEntry{Nummer 10}

\end{document}
Gruß vom Rolli

Gast

Beitrag von Gast »

Und wie soll man das dann von dem Fall unterscheiden, dass der Umbruch mitten im Text erfolgt? Wie soll man also erkennen, dass der Block endet, wenn die zugehörige Linie, die das Ende markiert, fehlt?

BTW: Mit einem \nopagebreak kannst Du verhindern, dass Blockende und Linie sich voneinander trennen, falls Du Dich das stört.

Merke: Linien werfen häufig Probleme auf. Meist ist es eine gute Idee, sie extrem sparsam einzusetzen.

Ansonsten: Zwischen Absätzen gibt es \pagegoal und \pagetotal. Das ist aber Low-Level-TeX, weit unterhalb von LaTeX. Näheres dazu erfährt man im TeXbook oder in TeX by Topic. Keinesfalls sollte man sich auf die Werte innerhalb eines Absatzes oder gar innerhalb einer Umgebung (auch auf keinen Fall innerhalb einer multicols-Umgebung) verlassen. Das Paket needspace arbeitet übrigens auch damit.

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Re: Trennlinien automatisch entfernen

Beitrag von Bartman »

\setheadsepline{3pt} % Zur Verdeutlichung übertrieben dick
\setfootsepline{3pt} % Zur Verdeutlichung übertrieben dick
Berücksichtige die zugehörige Warnung in Deiner Log-Datei.

Rolli
Forum-Guru
Forum-Guru
Beiträge: 382
Registriert: Mi 15. Feb 2017, 08:50
Wohnort: Mittelfranken

Trennlinien automatisch entfernen

Beitrag von Rolli »

Boooah ey,

Danke für die superschnelle Antwort. \pagetotal hab ich gesucht und nicht "er-googelt" :oops: :oops:
Und needspace kannte ich auch noch nicht.

Also kriege ich die Linie oben weg, wenn ich abfrage, ob \pagetotal = 0 ist. In diesem Fall darf keine Linie gesetzt werden.

Unten ist das deutlich schwieriger. Die Linie darf nicht gesetzt werden, wenn

- entweder \pagegoal minus \pagetotal kleiner ist als der "Umbruchbereich", d.h. die Toleranz, die TeX für die Entscheidung "Umbruch ja oder nein" verwendet, oder

- der nächste "Schnipsel" nicht mehr auf die Seite passen würde.

Ersteres ist vermutlich einfach. Ich muss nur verstehen, wie TeX das macht - also herab in die Low Level Gefilde?! Oder den needspace Code genau analysieren und verstehen, der macht ja prinzipiell etwas sehr ähnliches.

Letzteres ist vermutlich nur in einem Zwei-Pass-Algorithmus mit einer temporären Datei zu erreichen. Außerdem muss natürlich auch noch \raggedbottom bzw \flushbottom berücksichtigt werden ...

... Ich glaube, ich stelle das mal etwas zurück. Vom Schreiben eines eigenen Pakets bin ich skillmäßig gefühlte hundert Lichtjahre weg ...

Ich bastele jetzt mal, dass die Linie nicht gesetzt wird, wenn sie - sagen wir mal 15 mm - vom \pagegoal entfernt gesetzt würde. Die (hoffentlich wenigen) Fehler dann halt manuell beseitigen.

Oder gibt es eine bessere Idee?

Gruß vom Rolli

P.S.: Seitenumbruch mitten im Text wäre nach meinem skizzierten Algorithmus doch kein Problem?

Rolli
Forum-Guru
Forum-Guru
Beiträge: 382
Registriert: Mi 15. Feb 2017, 08:50
Wohnort: Mittelfranken

Trennlinien automatisch entfernen

Beitrag von Rolli »

@Bartman: So besser?
Keinesfalls sollte man sich auf die Werte innerhalb eines Absatzes oder gar innerhalb einer Umgebung (auch auf keinen Fall innerhalb einer multicols-Umgebung) verlassen.
Ok - dann verlasse ich mich darauf, dass meine u.a. "Quick-and-Dirty-" Lösung "fast" immer funktioniert - da ich ja ein \par drin habe -.
\documentclass [DIV=9,fontsize=8pt,paper=a5,parskip=half]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[headsepline=3pt, footsepline=3pt]{scrlayer-scrpage}
\usepackage{xcolor}

\pagestyle{scrheadings}

\newcommand{\MyEntry} [1]
   {Irgend ein Bla Bla \the\pagetotal\par 
   #1 \the\pagetotal \par 
   Irgend ein Bla Bla \the\pagetotal\par
   \ifdim\pagetotal<356pt
      \rule{\textwidth}{0.2pt}
   \fi
}

\begin{document}

\MyEntry{Nummer 1}
\MyEntry{Nummer 2}
\MyEntry{Nummer 3}
\MyEntry{Nummer 4}
\MyEntry{Nummer 5}
\MyEntry{Nummer 6}
\MyEntry{Nummer 7}
\MyEntry{Nummer 8}
\MyEntry{Nummer 9}
\MyEntry{Nummer 10}

\end{document}
Gruß vom Rolli

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

Beitrag von u_fischer »


Rolli
Forum-Guru
Forum-Guru
Beiträge: 382
Registriert: Mi 15. Feb 2017, 08:50
Wohnort: Mittelfranken

Beitrag von Rolli »

Danke Ulrike, wie findet man so etwas?

Allerdings verstehe ich nicht, wie das überhaupt funktioniert, und das geht in meinem (großen) Dokument auch nicht zuverlässig, d.h. einige Linien sind weg, andere Linien sind noch da.
Aber \nointerlineskip kannte ich noch nicht, das beseitigt immerhin einen weiteren unschönen Effekt.

Gruß vom Rolli

Antworten