Sie sind hier

scrlttr2 Seitennummer auf erster Seite, wenn insg. mehr als eine Seite

Hallo verehrtes Forum,

ich möchte gerne in einem Brief die Seitenzahl (x von y) im Footer ausgeben, wenn der Brief mehr als eine Seite hat. In dem Fall soll auf allen Seiten (x von y) stehen. Leider gelingt mir das für die erste Seite nicht, d.h.:

- Hat das Dokument 1 Seite, scheint es zu klappen (Seite x von y taucht nicht auf)
- Hat das Dokument mehr als eine Seite, taucht Seite x von y auf allen Seiten>=2 auf.

Ich würde mich sehr freuen, wenn mir jemand von Euch hierbei behilflich seien könnte. Vielen Dank!

Hier mein MWE (ich nutze TexLive 2018, mit aktuellen Updates)

\documentclass[version=last]{scrlttr2}
\usepackage[ngerman]{babel}
\usepackage{scrlayer-scrpage}
\usepackage{zref-lastpage}
 
\makeatletter
\renewcommand{\pagemark}{%
	\ifnum\zref@extractdefault{LastPage}{page}{0}>1
		\pagename\ \thepage\ von\ \zref@extract{LastPage}{page}%
	\fi
}
\makeatother
\pagestyle{headings}
 
\cofoot{}
\rofoot{\pagemark}
 
\begin{document}
\begin{letter}{%
	Petra Mustermann\\
	Vor dem Berg 1\\
	12345 Musterhausen%
}
\opening{Liebe Vereinsvorsitzende,}
 
hello world!
Hello world!\newpage
Hello again!\newpage
Hello again!\newpage
Hello again!
 
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}

Nachtrag: Nutze ich anstelle scrlttr2 die Klasse scrartcl funktioniert's - ich vermute das beschriebene Problem hat etwas mit dem first-/next-head zu tun (blicke da aber nicht durch).

Bild von Markus Kohm

Wie der Anleitung zu entnehmen ist, wird die erste Briefseite im Seitenstil empty ausgegeben. Kopf und Fuß dieser Seite wird also normalerweise nicht über den Seitenstil bestimmt. Stattdessen definiert man die Elemente des Briefbogens mit \setkomavar. So kann man beispielsweise mit \setkomavar{firstfoot}{…} der ersten Seite einen Fuß verpassen:

\documentclass[version=last]{scrlttr2}
\usepackage[ngerman]{babel}
\usepackage{scrlayer-scrpage}
\usepackage{zref-lastpage}
 
\makeatletter
\renewcommand{\pagemark}{%
	\ifnum\zref@extractdefault{LastPage}{page}{0}>1
		\pagename\ \thepage\ von\ \zref@extract{LastPage}{page}%
	\fi
}
\makeatother
\setkomavar{firstfoot}{\raggedleft\usekomafont{pageheadfoot}{\usekomafont{pagefoot}{\pagemark}}}
 
\cofoot{}
\rofoot{\pagemark}
 
\begin{document}
\begin{letter}{%
	Petra Mustermann\\
	Vor dem Berg 1\\
	12345 Musterhausen%
}
\opening{Liebe Vereinsvorsitzende,}
 
hello world!
Hello world!\newpage
Hello again!\newpage
Hello again!\newpage
Hello again!
 
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}

Es wird auffallen, dass dieser Fuß an einer anderen Stelle steht. Auch das ist beabsichtigt. Die Position der Elemente des Briefbogens werden über Pseudolängen bestimmt. Man kann auch diese über \@setplength etc. anpassen (bei aktuellem KOMA-Script geht es etwas einfacher mit \setplength, also ohne @). Soll allerdings einfach der Fuß von scrheadings angezeigt werden, kann man auch dessen Fuß-Layer zu empty hinzufügen:

\documentclass[version=last]{scrlttr2}
\usepackage[ngerman]{babel}
\usepackage{scrlayer-scrpage}
\usepackage{zref-lastpage}
 
\makeatletter
\renewcommand{\pagemark}{%
	\ifnum\zref@extractdefault{LastPage}{page}{0}>1
		\pagename\ \thepage\ von\ \zref@extract{LastPage}{page}%
	\fi
}      
\makeatother
 
\cofoot{}
\rofoot{\pagemark}
 
\AddLayersToPageStyle{empty}{% siehe scrguide, Abschnitt 17.4
  scrheadings.foot.aboveline,% siehe Tabelle 18.1
  scrheadings.foot.odd,% siehe Tabelle 18.1
  scrheadings.foot.even,% siehe Tabelle 18.1
  scrheadings.foot.oneside,% siehe Tabelle 18.1
  scrheadings.foot.belowline% siehe Tabelle 18.1
}
 
\begin{document}
\begin{letter}{%
	Petra Mustermann\\
	Vor dem Berg 1\\
	12345 Musterhausen%
}
\opening{Liebe Vereinsvorsitzende,}
 
hello world!
Hello world!\newpage
Hello again!\newpage
Hello again!\newpage
Hello again!
 
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}

Natürlich ist empty dann nicht mehr wirklich leer und es stellt sich die Frage, ob es nicht besser wäre, auf der ersten Seite einfach den Seitenstil plain zu erzwingen:

\documentclass[version=last]{scrlttr2}
\usepackage[ngerman]{babel}
\usepackage{scrlayer-scrpage}
\usepackage{zref-lastpage}
 
\makeatletter
\renewcommand{\pagemark}{%
	\ifnum\zref@extractdefault{LastPage}{page}{0}>1
		\pagename\ \thepage\ von\ \zref@extract{LastPage}{page}%
	\fi
}      
\makeatother
 
\cofoot*{}% Geändert!
\rofoot*{\pagemark}% Geändert!
 
\begin{document}
\begin{letter}{%
	Petra Mustermann\\
	Vor dem Berg 1\\
	12345 Musterhausen%
}
\opening{Liebe Vereinsvorsitzende,}
\thispagestyle{plain}% ist in Wirklichkeit natürlich plain.scrheadings 
hello world!
Hello world!\newpage
Hello again!\newpage
Hello again!\newpage
Hello again!
 
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}

Per xpatch kann man die \thispagestyle-Anweisung auch bereits in der Dokumentpräambel an \opening anhängen:

\documentclass[version=last]{scrlttr2}
\usepackage[ngerman]{babel}
\usepackage{scrlayer-scrpage}
\usepackage{zref-lastpage}
\usepackage{xpatch}
 
\makeatletter
\renewcommand{\pagemark}{%
	\ifnum\zref@extractdefault{LastPage}{page}{0}>1
		\pagename\ \thepage\ von\ \zref@extract{LastPage}{page}%
	\fi
}      
\makeatother
 
\cofoot*{}% Geändert!
\rofoot*{\pagemark}% Geändert!
 
\xapptocmd{\opening}{\thispagestyle{plain}}{}{\PatchFailure}
 
\begin{document}
\begin{letter}{%
	Petra Mustermann\\
	Vor dem Berg 1\\
	12345 Musterhausen%
}
\opening{Liebe Vereinsvorsitzende,}
hello world!
Hello world!\newpage
Hello again!\newpage
Hello again!\newpage
Hello again!
 
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}

BTW: \pagestyle{headings} kann man sich sparen, da beim Laden von scrlayer-scrpage bereits \pagestyle{scrheadings} ausgeführt wird. Wäre dem nicht so, würde \pagestyle{headings} übrigens gar nicht zum richtigen Seitenstil führen.

Ich bitte darum, die verwendeten Anweisungen noch einmal in der Anleitung oder im Buch nachzulesen.

Hallo Markus,

dass die erste Seite im pagestyle empty ausgegeben wird ist mir entgangen - sorry!

Vielen Dank für Deine ausführliche Erklärung, insbesondere für das Aufzeigen alternativer Lösungsansätze, die zumindest meinem Verständnis sehr helfen! Ich werde die Details nachlesen - versprochen.

Viele Grüße
MM

[Admin-Edit:] Kommentar sinnentsprechend in der Diskussion verschoben.

Die Position der Seitenzahl auf den Folgeseiten lässt sich auch über die Option pagenumber bestimmen: mit pagenumber=botright wird sie dort im Fuß rechts gesetzt. Abhängig von den weiteren Wünschen an Kopf- und Fußzeile kann man dann eventuell sogar auf das Paket verzichten. Der Seitenstil plain lässt sich in dem Beispiel auf der ersten Briefseite auch über die Variable firstfoot setzen.

\documentclass[
  pagenumber=botright%<- ergänzt
]{scrlttr2}
\usepackage{blindtext}% nur für Fülltext
%\usepackage{scrlayer-scrpage}
\usepackage[ngerman]{babel}
\usepackage{zref-lastpage}
 
\makeatletter
\renewcommand{\pagemark}{{%
  \usekomafont{pagenumber}% <- ergänzt
  \ifnum\zref@extractdefault{LastPage}{page}{0}>1
    \pagename\ \thepage\ von\ \zref@extract{LastPage}{page}%
  \fi
}}
\makeatother
 
\setkomavar{firstfoot}{\thispagestyle{plain}}%<- Seitenstil plain auf der ersten Seite
 
\begin{document}
\begin{letter}{%
  Petra Mustermann\\
  Vor dem Berg 1\\
  12345 Musterhausen%
}
\opening{Liebe Vereinsvorsitzende,}
\Blindtext[2]
\Blindtext[10]
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}

Das Paket scrlayer-scrpage würde es aber auch ermöglichen, die in der Variable firstfoot definierte Fußzeile der ersten Briefseite auf den Folgeseiten an gleicher Position zu übernehmen.

\documentclass{scrlttr2}
\usepackage{blindtext}
\usepackage[ngerman]{babel}
\usepackage{scrlayer-scrpage}
\usepackage{zref-lastpage}
 
\makeatletter
\renewcommand{\pagemark}{{%
  \usekomafont{pagenumber}% <- ergänzt
  \ifnum\zref@extractdefault{LastPage}{page}{0}>1
    \pagename\ \thepage\ von\ \zref@extract{LastPage}{page}%
  \fi
}}
\makeatother
 
\setkomavar{firstfoot}{%
  \parbox[t]{\useplength{firstfootwidth}}{%
    \raggedleft\usekomafont{pageheadfoot}{\usekomafont{pagefoot}{\pagemark}}%
  }%
}
 
\DeclareNewLayer[
  foreground,
  oddpage,
  textarea,
  voffset=\useplength{firstfootvpos},
  hoffset=\dimexpr.5\paperwidth-.5\useplength{firstfootwidth}\relax,
  width=\useplength{firstfootwidth},
  mode=picture,
  contents=\putUL{\raisebox{\dimexpr-\height\relax}{\usekomavar{firstfoot}}}
]{likefirstpage.foot}
\AddLayersToPageStyle{scrheadings}{likefirstpage.foot}
 
\cfoot*{}
 
\begin{document}
\begin{letter}{%
  Petra Mustermann\\
  Vor dem Berg 1\\
  12345 Musterhausen%
}
\opening{Liebe Vereinsvorsitzende,}
\Blindtext[2]
\Blindtext[10]
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}

Hallo esdd,

Danke für Deine Alternativen - ich bin noch nicht dazu gekommen diese zu studieren, werde es aber gleich nachholen (vielleicht erledigt sich dadurch mein zwischenzeitlicher Nachtrag.

MM

Hallo Markus,

auch auf die Gefahr mich vollends zu blamieren: ich glaube ich habe da noch ein grundlegendes Verständnisproblem bzgl. scrlayer-scrpage.

Warum werden nexthead und nextfoot nicht gesetzt, bzw. was muss ich tun, damit diese gesetzt werden?

\documentclass[version=last]{scrlttr2}
\usepackage[ngerman]{babel}
\usepackage{scrlayer-scrpage}
\usepackage{zref-lastpage}
\makeatletter
\renewcommand{\pagemark}{%
	\ifnum\zref@extractdefault{LastPage}{page}{0}>1
	\pagename\ \thepage\ von\ \zref@extract{LastPage}{page}%
	\fi
}
\makeatother
 
\setkomavar{firsthead}{\raggedright Kopfzeile erste Seite}
\setkomavar{firstfoot}{\raggedleft\usekomafont{pageheadfoot}{\usekomafont{pagefoot}{\pagemark}}}
\setkomavar{nexthead}{\raggedright Kopfzeile Folgeseite}
\setkomavar{nextfoot}{\raggedright Fußzeile Folgeseite}
 
%\cofoot{}
%\rofoot{\pagemark}
 
\begin{document}
	\begin{letter}{%
			Petra Mustermann\\Vor dem Berg 1\\12345 Musterhausen%
		}
		\opening{Liebe Vereinsvorsitzende,}
 
		hello world!
		\newpage
		Hello world!
 
		\closing{Mit freundlichen Grüßen}
	\end{letter}
\end{document}
Bild von Markus Kohm

Wie bereits erwähnt, schaltet das den Seitenstil scrheadings ein (was auch den Seitenstil headings in scrheadings ändert und plain in plain.scrheadings). Wie aber der Anleitung zu entnehmen ist, werden die beiden Variablen nur von den (original) Seitenstilen headings und myheadings verwendet.

In Deinem Fall fehlt also schlicht das Auskommentieren von

\usepackage{scrlayer-scrpage}

Alternativ könnte man natürlich scrheadings so umdefinieren, dass es nexthead und nextfoot verwendet. Das ergibt aber meiner Meinung nach wenig Sinn.

... wegen der armen Spatzen (sorry, hatte Deinen Post zu spät gesehen - heute ist der Wurm drinn, esdd's Beitrag hatte ich auch knapp verpasst)

... mit scrlayer-scrpage (in Verb. mit scrlttr2) zumindest in meinem Fall.

Soviel wie ich verstanden zu haben glaube läuft die Verwendung von scrlayer-scrpage bei scrlttr2 auf einen Kanonenschuss auf Spatzen hinaus, da ich (außer first/next) keine Umschaltung der Seitenstile brauche. Bei scrreprt oder srcbook sieht das ganz anders aus.

Bild von Markus Kohm

auch auf die Gefahr mich vollends zu blamieren

Um das mal klar zu stellen: Damit, dass man etwas in der Anleitung nicht verstanden hat, oder auch damit, dass man in seinem Quelltext etwas übersehen hat, blamiert man sich hier nicht so schnell. Wir haben alle einmal klein angefangen und meine Nase ist eine der vordersten, wenn es darum geht, auf diejenige zu zeigen, die einem gehört, der immer mal wieder mit dämlichen Fehlern auffällt. Natürlich ist es mir immer lieb, wenn man ein Verständnisproblem möglichst genau benennen kann. Das erhöht meine Chance zu erkennen, ob etwas an der Anleitung zu ändern ist und ggf. auch wie.

Blamieren kann man sich hier allenfalls damit, dass man fortgesetzt unverständliche, schwer nachvollziehbare Fragen stellt und jeglichen eigenen Einsatz zur Verbesserung der Situation vermissen lässt. Anfangsfehler wären in der Regel natürlich auch diesbezüglich zu tolerieren. Aber das war bei Dir ja nicht der Fall. Und inzwischen bekommst Du sogar das mit dem (zugegeben verwirrenden) Unterschied zwischen der Antwort auf die ursprüngliche Frage und einer Antwort auf einen vorhandenen Kommentar hin. ;-)

Comments for "scrlttr2 Seitennummer auf erster Seite, wenn insg. mehr als eine Seite" abonnieren