scrbook+scrlayer-scrpage: Kopfzeile mit Kapitel und Abschnitt im einseitigen Layout

Layout von Seiten, Rändern, Fusszeilen, usw, modifizieren
ebcs
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: Di 30. Jun 2020, 21:25

scrbook+scrlayer-scrpage: Kopfzeile mit Kapitel und Abschnitt im einseitigen Layout

Beitrag von ebcs »

Hallo zusammen,

ich bin neu hier und habe eine Frage zur individuellen Einstellung einer Kopfzeile, für die ich nach Recherche im KOMA-Skript und Latex-Foren noch nicht den richtigen Befehl gefunden habe.

Für ein scrbook-Dokument im einseitigen Layout hätte ich gerne, dass die mit scrlayer-scrpage gesetzte Kopfzeile innerhalb des Kapitels „Literaturverzeichnis“ sowohl Kolumnentitel als auch den Titel der jeweiligen section / subbibliography anzeigt (z. B. Quellenverzeichnis: Internetquellen) und man außerdem per Hyperlink zur Überschrift „Quellenverzeichnis“ springen kann.

Obwohl ich für scrlayer-scrpage die Option autooneside = false gesetzt habe, wird \chead{\rightmark: \leftmark} in der Kopfzeile als <Quellenverzeichnis: Quellenverzeichnis> ausgegeben.
Der Hyperlink in der Kopfzeile funktioniert auch nicht wie beabsichtigt: Statt zur Kapitel-Überschrift <Quellenverzeichnis> gelangt man zum letzten Abschnitt im Literaturverzeichnis (hier: Internetquellen).

Ich freue mich daher über Hinweise, wie das folgende Minimalbeispiel verbessert werden kann (konkret die Definition von defpairofpagestyles und vom Label in defbibheading):

Code: Alles auswählen

\documentclass[%
version = last,
fontsize=11pt, 
twoside=off, % einseitiges Layout
headsepline=0.5pt 
]{scrbook}

\usepackage{fontspec} % Zeichensatzkodierung mit LuaLaTeX

\usepackage[ngerman]{babel}

\usepackage[
			autooneside = false, % Erforderlich, wenn \leftmark und \rightmark in einem 
			% einseitigen Dokument zur Anwendung kommen sollen
			]{scrlayer-scrpage}
\automark[section]{chapter}

\defpairofpagestyles{literatur}{% 
	\chead{\hyperlink{sec:biblio}{\rightmark: \leftmark\enskip}}
}

\usepackage[%
			backend = biber,
			bibencoding = utf8,
			bibwarn = true,
			style = authoryear-comp,
			sorting = nyvt,
			backref=true,
			backrefstyle = three
			]{biblatex}
\addbibresource{biblatex-examples.bib}
			
\usepackage[%
			linktocpage = true,
			bookmarksnumbered,
			hyperfootnotes = false,
			]{hyperref}
\usepackage{bookmark} % verbessert hyperref
\hypersetup{colorlinks, citecolor=cyan, linkcolor=blue, urlcolor=black}

\usepackage{blindtext}
			
\defbibheading{quellen}{\addchap{Quellenverzeichnis\label{sec:biblio}}} % \label funktioniert hier leider nicht wie beabsichtigt

\defbibheading{subbibliography}[\refname]{\section*{#1}}

% Inhaltsverzeichnis für die Literaturverzeichnis-Abschnitte:
\DeclareNewTOC[%
				owner=\jobname,
				type = subbibliography,
				types=subbibliographies, 
				listname = {Quellenverzeichnis},
				nonfloat,
				tocentrystyle = dottedtocline
				]{los}
\setuptoc{los}{totoc}				

\begin{document}
	
\chapter{Hauptteil}
	
\textbf{Testen des Hyperlinks zum Literaturverzeichnis:} \ref{sec:biblio}

\newpage
\pagestyle{literatur}
\listofsubbibliographies
\nocite{*}
\printbibliography[heading = none, type = book]

\newpage
\phantomsection
\printbibliography[heading = subbibliography, title = {Unveröffentlichte Berichte}, type = 
{report}]
\addxcontentsline{los}{subsection}{Unveröffentlichte Berichte}

\newpage	
\phantomsection
\printbibliography[heading = subbibliography, title = {Internetquellen}, type = online]
\addxcontentsline{los}{subsection}{Internetquellen}

\end{document}


MoeWe
Forum-Guru
Forum-Guru
Beiträge: 264
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: scrbook+scrlayer-scrpage: Kopfzeile mit Kapitel und Abschnitt im einseitigen Layout

Beitrag von MoeWe »

Zunächst nur ein paar Kommentare.

  • Die bibheading quellen wird nie genutzt. Die Überschrift des Literaturverzeichnisses wird ja von \listofsubbibliographies besorgt. Das erklärt, warum \defbibheading{quellen}{\addchap{Quellenverzeichnis\label{sec:biblio}}} nichts tut und insbesondere kein Label setzt. Also gibt es sec:biblio nicht.

  • Die bibheading subbibliography selbst setzt gar keine Kolumnentitel. Das müsstest Du noch machen. Außerdem würde ich alle Dinge, die mit der Überschrift zu tun haben und die Du so vor \printbibliography schreibst, direkt in die Definition der bibheading schreiben.

    Code: Alles auswählen

    \makeatletter
    \defbibheading{subbibliography}[\refname]{%
      \clearpage
      \section*{#1}%
      \addxcontentsline{los}{subsection}{#1}%
      \@mkleft{\MakeMarkcase{#1}}%
    }
    \makeatother

    und dann nur

    Code: Alles auswählen

    \printbibliography[heading = subbibliography, title = {Unveröffentlichte Berichte}, type = 

    Ich würde statt \addxcontentsline{los}{subsection}{#1}% fast lieber \addxcontentsline{los}{section}{#1}% sagen, schließlich handelt es sich ja um \section*s und wir sparen so ein bisschen Einrückung.

    Bei den marks bin ich mir nicht ganz sicher, ob Du vielleicht \leftmark und \rightmark vertauscht hast (im Gegensatz zum "klassichen Setup" in scrbook, dort sind die \section-Marks \@mkright). Ich weiß nicht, ob das am Ende irgendetwas ausmacht oder ob es nur Leute kurz verwirrt, die sich damit auskennen.

  • Ich weiß nicht, wie man am besten ein Label auf die "Quellenverzeichnis"-Überschrift setzt, außer einfach \label{sec:biblio} nach \listofsubbibliographies zu setzen. Dabei solltest Du beachten, dass \ref{sec:biblio} unter Umständen keine sinnvolle Referenz ausgeben kann, denn normalerweise würde man hier eine Kapitelnummer erwarten, aber die hat die Überschrift ja nicht. Der Link an sich sollte aber gehen.

  • Um auf das \label zu verweisen musst Du aber \hyperref[sec:biblio]{<Text>} statt \hyperlink{sec:biblio}{<Text>} nutzen. Mit \hyperlink kann man auf Anker, die mit \hypertarget erzeugt werden, verweisen.

Damit wär ich etwa bei

Code: Alles auswählen

\documentclass[%
  version = last,
  fontsize=11pt,
  twoside=off, % einseitiges Layout
  headsepline=0.5pt
]{scrbook}

\usepackage{fontspec} % Zeichensatzkodierung mit LuaLaTeX

\usepackage[ngerman]{babel}

\usepackage[
  autooneside = false, % Erforderlich, wenn \leftmark und \rightmark in einem
  % einseitigen Dokument zur Anwendung kommen sollen
]{scrlayer-scrpage}
\automark[section]{chapter}

\defpairofpagestyles{literatur}{%
  \chead{\hyperref[sec:biblio]{\leftmark: \rightmark}}
}

\usepackage[%
  backend = biber,
  style = authoryear-comp,
  sorting = nyvt,
  backref=true,
  backrefstyle = three
]{biblatex}
\addbibresource{biblatex-examples.bib}

\usepackage[%
  linktocpage = true,
  bookmarksnumbered,
  hyperfootnotes = false,
]{hyperref}
\usepackage{bookmark} % verbessert hyperref
\hypersetup{colorlinks, citecolor=cyan, linkcolor=blue, urlcolor=black}

\usepackage{blindtext}

\makeatletter
\defbibheading{subbibliography}[\refname]{%
  \clearpage
  \section*{#1}%
  \addxcontentsline{los}{section}{#1}%
  \@mkright{\MakeMarkcase{#1}}%
}
\makeatother

% Inhaltsverzeichnis für die Literaturverzeichnis-Abschnitte:
\DeclareNewTOC[%
  owner=\jobname,
  type = subbibliography,
  types=subbibliographies,
  listname = {Quellenverzeichnis},
  nonfloat,
  tocentrystyle = dottedtocline
]{los}
\setuptoc{los}{totoc}

\begin{document}
\tableofcontents

\chapter{Hauptteil}
Lorem \ref{sec:biblio}

\nocite{*}

\cleardoublepage
\pagestyle{literatur}
\listofsubbibliographies\label{sec:biblio}
\printbibliography[heading=none, nottype=report, nottype=online]

\printbibliography[heading=subbibliography,
  title={Unveröffentlichte Berichte},
  type=report]

\printbibliography[heading=subbibliography,
  title=Internetquellen,
  type=online]
\end{document}

Vielleicht hilft das ja schon ein bisschen weiter. Ich hab von KOMA-Script, \DeclareNewTOC und Kolumnentitlen aber nicht so viel Ahnung, nimm das also cum grano salis.


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

Re: scrbook+scrlayer-scrpage: Kopfzeile mit Kapitel und Abschnitt im einseitigen Layout

Beitrag von KOMA »

Da passt ganz vieles nicht zusammen.

Zunächst einmal definierst Du zwar mit \defbibheading einen Titel-Stil quellen, verwendest diesen aber nirgendwo. Also gibt es auch das darin definierte Label auch nicht.

Stattdessen erzeugst Du mit \DeclareNewTOC ein neues Verzeichnis, über das dann auch die Überschrift für das Quellenverzeichnis gesetzt wird. Dabei wird aber eben nicht das Label gesetzt. Also gibt es das Label auch nicht.

Dass \section* nicht nur keinen Inhaltsverzeichniseintrag erzeugt, was Du mit \addxcontentsline (allerdings unter Verwendung der falschen Ebene) auszugleichen suchst, sondern auch keinen Kolumentitel, ist dokumentiert. Also musst Du natürlich auch noch den Kolumnentitel setzen.

Ich sehe auch nicht, wieso es sinnvoll sein sollte, den gesamten Kopf auf das »Quellenverzeichnis«-Label zu verlinken. Und natürlich muss man \leftmark und \riightmark vertauschen, wenn »Quellenverzeichnis« der erste Teil sein soll. Außerdem ist es dann wenig sinnvoll vor dem ersten Abschnitt zweimal »Quellenverzeichnis« im Kopf stehen zu haben. Also muss man auch das noch abfangen.

Achja \ref auf ein nicht nummeriertes Kapitel ist ziemlich unsinnig, da darüber eine Kapitelnummer referenziert wird. \nameref oder \pageref sind hier ggf. sinnvoller.

Code: Alles auswählen

documentclass[%
  twoside=off, % einseitiges Layout
  headsepline=0.5pt 
]{scrbook}

\usepackage[ngerman]{babel}

\usepackage[
  autooneside = false, % Erforderlich, wenn \leftmark und \rightmark in einem 
                       % einseitigen Dokument zur Anwendung kommen sollen
  automark,% automatische Kolumnentitel für zwei Ebenen
]{scrlayer-scrpage}

\defpairofpagestyles{literatur}{% 
  \chead{\hyperref[sec:biblio]{\leftmark}\Ifstr{\leftmark}{\rightmark}{}{: \rightmark}}
}

\usepackage[%
  backend = biber,
  bibencoding = utf8,
  bibwarn = true,
  style = authoryear-comp,
  sorting = nyvt,
  backref=true,
  backrefstyle = three
]{biblatex}
\addbibresource{biblatex-examples.bib}
			
\usepackage[%
  linktocpage = true,
  bookmarksnumbered,
  hyperfootnotes = false,
]{hyperref}
\usepackage{bookmark} % verbessert hyperref (und wird von scrbook ggf. auch
                      % automatisch geladen)
\hypersetup{colorlinks, citecolor=cyan, linkcolor=blue, urlcolor=black}

\usepackage{blindtext}
			
\defbibheading{quellenlabel}{\label{sec:biblio}}% Wir brauchen nur das Label.

\defbibheading{subbibliography}[\refname]{%
  \section*{#1}\addxcontentsline{los}{section}{#1}\addsecmark{#1}%
}

% Inhaltsverzeichnis für die Literaturverzeichnis-Abschnitte:
\DeclareNewTOC[%
  owner=\jobname,
  type = subbibliography,
  types=subbibliographies, 
  listname = {Quellenverzeichnis},
  nonfloat,
  tocentrystyle = dottedtocline
]{los}
\setuptoc{los}{totoc}			

\begin{document}
	
\chapter{Hauptteil}
	
\textbf{Testen des Hyperlinks zum Literaturverzeichnis:} \nameref{sec:biblio}

\clearpage
\pagestyle{literatur}
\listofsubbibliographies
\nocite{*}
\printbibliography[heading = quellenlabel, type = book]% Label erzeugen.

\clearpage% Wirklich eine neue Seite? Warum?
\phantomsection% Wird bei mir nicht benötigt, kann aber sein, dass das erst
               % mit der aktuellen Prerelease zuverlässig funktioniert.
\printbibliography[heading = subbibliography, title = {Unveröffentlichte Berichte}, type = 
{report}]

\clearpage% Wirklich?
\phantomsection% Wird bei mir nicht benötigt, kann aber sein, dass das erst
               % mit der aktuellen Prerelease zuverlässig funktioniert.
\printbibliography[heading = subbibliography, title = {Internetquellen}, type = online]

\end{document}

Das Label könnte man übrigens auch per \AfterTOCHead direkt am Anfang des Quellenverzeichnisses setzen lassen, statt erst beim ersten Literaturverzeichnis. Ich würde das sogar empfehlen, wusste aber nicht genau, worauf das Label nun verweisen soll.

Außerdem könnte man auch einfach ab den Literaturverzeichnissen \ext@toc umbiegen und dann einfach \addsec statt \section* + \addxcontentsline + \addsecmark verwenden. Das macht es IMHO einfacher:

Code: Alles auswählen

\documentclass[%
  twoside=off, % einseitiges Layout
  headsepline=0.5pt 
]{scrbook}

\usepackage[ngerman]{babel}

\usepackage[
  autooneside = false, % Erforderlich, wenn \leftmark und \rightmark in einem 
                       % einseitigen Dokument zur Anwendung kommen sollen
  automark,% automatische Kolumnentitel für zwei Ebenen
]{scrlayer-scrpage}

\defpairofpagestyles{literatur}{% 
  \chead{\hyperref[sec:biblio]{\leftmark}\Ifstr{\leftmark}{\rightmark}{}{: \rightmark}}
}

\usepackage[%
  backend = biber,
  bibencoding = utf8,
  bibwarn = true,
  style = authoryear-comp,
  sorting = nyvt,
  backref=true,
  backrefstyle = three
]{biblatex}
\addbibresource{biblatex-examples.bib}
			
\usepackage[%
  linktocpage = true,
  bookmarksnumbered,
  hyperfootnotes = false,
]{hyperref}
\usepackage{bookmark} % verbessert hyperref (und wird von scrbook ggf. auch
                      % automatisch geladen)
\hypersetup{colorlinks, citecolor=cyan, linkcolor=blue, urlcolor=black}

\usepackage{blindtext}
			
\makeatletter
\defbibheading{subbibliography}[\refname]{%
  \renewcommand*{\ext@toc}{los}\addsec{#1}% Keine Sorge, die Umdefinierung ist lokal.
}
\makeatother

% Inhaltsverzeichnis für die Literaturverzeichnis-Abschnitte:
\DeclareNewTOC[%
  owner=\jobname,
  type = subbibliography,
  types=subbibliographies, 
  listname = {Quellenverzeichnis},
  nonfloat,
  tocentrystyle = dottedtocline
]{los}

\AfterTOCHead[los]{\label{sec:biblio}}% Label direkt nach der Überschrift setzen.

\setuptoc{los}{totoc}

\begin{document}

\chapter{Hauptteil}\label{cha:haupt}
	
\textbf{Testen des Hyperlinks zum Literaturverzeichnis:} \pageref{sec:biblio}

\clearpage
\pagestyle{literatur}
\listofsubbibliographies
\nocite{*}
\printbibliography[heading = none, type = book]

\clearpage% Wirklich eine neue Seite? Warum?
\phantomsection% Wird bei mir nicht benötigt, kann aber sein, dass das erst
               % mit der aktuellen Prerelease zuverlässig funktioniert.
\printbibliography[heading = subbibliography, title = {Unveröffentlichte Berichte}, type = 
{report}]

\clearpage% Wirklich?
\phantomsection% Wird bei mir nicht benötigt, kann aber sein, dass das erst
               % mit der aktuellen Prerelease zuverlässig funktioniert.
\printbibliography[heading = subbibliography, title = {Internetquellen}, type = online]

\end{document}

Natürlich gibt es viele weitere Möglichkeiten in Abhängigkeit davon, was am Ende tatsächlich rauskommen soll.

Zuletzt geändert von KOMA am Do 9. Jul 2020, 08:05, insgesamt 1-mal geändert.

ebcs
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: Di 30. Jun 2020, 21:25

Re: scrbook+scrlayer-scrpage: Kopfzeile mit Kapitel und Abschnitt im einseitigen Layout

Beitrag von ebcs »

Vielen Dank für eure Lösungsvorschläge, @MoeWe und @KOMA, nun passt es perfekt!
Tut mir leid für die Unstimmigkeiten im Code (die waren noch vom Herumprobieren), das hätte ich vor dem Posten genau prüfen sollen. Vor allem dass bibheading quellen in meinem MWE gar nicht genutzt wird, hätt mir eigentlich auffallen müssen…
Und jetzt weiß ich besser über leftmark, rightmark und pageref Bescheid.


ebcs
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: Di 30. Jun 2020, 21:25

Re: scrbook+scrlayer-scrpage: Kopfzeile mit Kapitel und Abschnitt im einseitigen Layout

Beitrag von ebcs »

Übrigens kompiliert der Code bei mir auch ohne \phantomsection.
clearpage vor der jeweiligen subbibliography hatte ich nur vorübergehend eingefügt, um besser erkennen zu können, ob die Hyperlinks vom Literatur-Inhaltsverzeichnis richtig funktionieren.


Gast

Beitrag von Gast »

@KOMA

Ich vermute, durch

Code: Alles auswählen

%\makeatletter  
\AfterTOCHead[los]{\label{sec:biblio}}
%\makeatother

im zweiten Beispiel ändert sich nichts.


KOMA (als gast)

Beitrag von KOMA (als gast) »

Gast hat geschrieben:
Do 9. Jul 2020, 07:40

@KOMA

Ich vermute, durch

Code: Alles auswählen

%\makeatletter  
\AfterTOCHead[los]{\label{sec:biblio}}
%\makeatother

im zweiten Beispiel ändert sich nichts.

Du meinst durch Weglassen von \makeatletter und \makeatother? Richtig. Das stand da noch von einer früheren Idee.


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

Re: Korrektur

Beitrag von KOMA »

KOMA (als gast) hat geschrieben:
Do 9. Jul 2020, 08:02

Du meinst durch Weglassen von \makeatletter und \makeatother? Richtig. Das stand da noch von einer früheren Idee.

Und ich habe es jetzt entfernt, damit es niemanden verwirrt.

BTW: Wenn man in dieser zweiten Lösung \nameref statt \pageref verwenden will, benötigt man tatsächlich die aktuelle Prerelease von KOMA-Script. Es gab da einen Bug, der mir im Zusammenhang mit dieser Frage aufgefallen ist.


Antworten