Position der Letzten Zeile einer Seite mit Seitenumbruch

Layout von Seiten, Rändern, Fusszeilen, usw, modifizieren


scribus
Forum-Newbie
Forum-Newbie
Beiträge: 3
Registriert: Di 26. Jan 2010, 12:06

Position der Letzten Zeile einer Seite mit Seitenumbruch

Beitrag von scribus »

Wertes Forum,

seit einiger zeit suche ich eine Lösung für folgendes Problem:

Ich möchte in Höhe der letzten Zeile einer Seite mit Seitenumbruch ein weiteres Zeichen setzen.
Das ganze soll unabhängig vom Textinhalt, insbesondere nicht manuell im Text, geschehen.

Für eine Seite ohne \footnote{} ist das kein Problem.
Mit \flushbottom und flexiblem \parskip ist die Position der letzten Zeile über den Satzspiegel definiert.

Wenn ich aber eine Fußnote im Text habe wird die letzte Zeile nach oben verschoben.
Dieser Versatz ist variabel, und ich weiß nicht, wie ich auf den aktuellen Wert des Versatzes komme.
\footnoteheight oder was ähnliches habe ich nicht gefunden.

Weiß jemand einen Rat :?:

Ich verwende KOMA-Script
\documentclass[11pt,twoside=false]{scrartcl}

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Das geht vermutlich nur, wenn man in die output-Routine von LaTeX eingreift, was natürlich immer kritisch ist, weil die Funktion dann davon abhängt, ob man noch andere Pakete verwendet, die ebenfalls in die output-Routine eingreifen.

Ansatzpunkt wäre vermutlich \@makecol. Dabei müsste man sowohl den Fall, dass die Box \footins void ist (also keine Fußnoten existieren) als auch den Fall, dass dies nicht der Fall ist, abändern. Im zweiten Fall müsste man vor \vskip \skip\footins die entsprechend positionierte Ausgabe des Zeichens einfügen.

Nur so als Idee ...

scribus
Forum-Newbie
Forum-Newbie
Beiträge: 3
Registriert: Di 26. Jan 2010, 12:06

Beitrag von scribus »

Jep,

das wäre ein super Paket, wenn es das gäbe. Einfach das Zeichen via LR-Box oder Kommando in die letzte Zeile platzieren.

Aber nomen est omen, ich bin Newbie was das Entwickeln von LaTeX Applikationen betrifft.
An die Output Routine trau ich mich (noch) nicht ran, wüsste auch nicht, wo ich da anfangen soll. (Kann aber noch kommen.)

Außerdem möchte ich mich an Standard Latex Distributionen halten.
Das soll später den Pflegeaufwand niedrig halten.

Deshalb platziere ich momentan das Zeichen mit dem {eso-pic}-package.
Dafür brauche ich aber die Fußnotenhöhe.
Kann man die irgendwie ermitteln, ohne in die Output-Routine einzugreifen?
Werte lesen dürfte nicht schaden, oder?
Ich weiß nur nicht welche, oder wo ich da nachschauen müsste.

Alternativ habe ich versucht über
\renewcommand{\footnoterule}
das Zeichen einzufügen.
Habe aber das Problem, dass ich aus dem Fußnotenbereich nicht vertikal nach oben ausbrechen kann.
Ist das überhaupt möglich?

Vielen Dank Markus

Gruß

Martin

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Die Höhe des verwendeten Fußnotenbereichs ist erst in der output-Routine bekannt, weil erst dann bekannt ist, welche Fußnoten auf welcher Seite landen, wobei erschwerden hinzu kommt, dass Fußnoten auch auf mehrere Seiten umbrochen werden können.

Nach oben aus der Fußnotenlinie auszubrechen ist hingegen tatsächlich möglich (\kern mit negativem Wert, vertikales Material, \kern mit positivem Wert). Allerdings wird die Linie nur gesetzt, wenn es tatsächlich Fußnoten gibt. Ob das der Fall ist, erfährst Du wieder erst entweder wenn die Linie gesetzt wird oder eben in der output-Routine. Vielleicht, vielleicht, vielleicht geht es so:
\newif\ifseitehatfussnote
\renewcommand*{\footnoterule}{%
  \kern -3\p@\kern-\skip\footins\smash{Text}\kern\skip\footins
  \global\let\ifseitehatfussnote\iftrue
  \ifx\@textbottom\relax\else\vskip \z@ \@plus.05fil\fi
  \hrule\@width.4\columnwidth
  \kern 2.6\p@}
\AddToShipoutPicture{%
  \ifseitehatfussnote\global\let\seitehatfussnote\iffalse\else
    \AtTextLowerLeft{Text}%
  \fi
}
ACHTUNG, der Code ist komplett ungetestet! Er soll lediglich eine Idee skizzieren. Ob das überhaupt so geht, kann ich nicht sagen. Eventuell kommen beispielsweise die beiden \global\let zum falschen Zeitpunkt.

Außerdem gibt es dann auch noch das Problem mit teilgefüllten Seiten, falls der Text dann auf Höhe der letzten verwendeten Zeile ausgegeben werden soll. Auch das ist vermutlich nur über die output-Routine zu lösen.

BTW: Darf ich mal fragen, wozu Du das überhaupt brauchst?

scribus
Forum-Newbie
Forum-Newbie
Beiträge: 3
Registriert: Di 26. Jan 2010, 12:06

Nun doch TeX!

Beitrag von scribus »

Holla die Waldfee,

Danke für den Vorschlag.
Das ist dann nun doch inside TeX, oder? Nun dann werde ich mich mal da rein knien.
Da brauch ich aber das WE für.
Kannst Du Anschubhilfe leisten?
Was bedeutet \p@ und \z@, diese Kommandos :?: fand ich nirgendwo beschrieben. Sie lassen sich auch schlecht googeln.
Vielleicht weißt Du eine gute sekundär Literatur/Link dazu?
Für den Rest hoffe ich auf "Das kleine TEXBuch" (F. Cremer, Aachen 1993).
BTW: Darf ich mal fragen, wozu Du das überhaupt brauchst?
Jep,
bei Dokumenten, z.B. Briefe, Bewerbungen, Broschüren ... die wenige Seiten haben, möchte ich statt Seite x von n nur eine kleinen symbolischen "Wink" setzen.

Zur Anschauung:
Setze mal in deinem Beispiel /KOMA-Script-3/Anhang-E/source/briefwbk2 das Symbol $\RHD$ aus dem package {wasysym} rechtsbündig (z.B. mit \hfill) in die letzte Zeile der ersten Seite.
Dazu musst du aber in den Text gehen, also hier den Inhalt von \Brief bearbeiten. Was ich gerade vermeiden möchte.
Im Rausatz sieht das auch gut aus.

Vielleicht hast Du oder das Forum eine alternative Idee.

Gruß

Martin

Quellen:
http://www.komascript.de/files/KOMA-Scr ... elcode.zip
http://mirror.ctan.org/info/german/texbuch/texbuch.pdf

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Warum setzt Du den Wink dann nicht einfach statt der Seitenzahl an definierter Stelle, nämlich im Fuß der Seite. Mir ist noch immer nicht klar, wieso das auf Höhe der letzten Zeile im Textbereich sein muss ...

\p@ ist nur eine Abkürzung von pt (ein Token statt zwei)

\z@ ist eine Länge von 0pt. Aufgrund der Eigenarten von TeX kann \z@ damit übrigens auch dort verwendet werden, wo eigentlich ein Zähler erwartet wird.

Beides musst Du aber nicht wissen, denn das ist nur Code, der aus scrbook.cls kopiert wurde. Wichtig ist nur der Unterschied zum Originalcode.

Als Buch würde ich Dir TeX by Topic empfehlen. Ein Link müsste im Wiki bei den wichtigen Netzdokumenten zu finden sein. Und wenn Du schon im Wiki bist, schau auch gleich noch \makeatletter und \makeatother nach, weil Du die vermutlich auch brauchen wirst.

Antworten