Fancyhdr Sectionnummerierung in Chapter verbergen

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

Fancyhdr Sectionnummerierung in Chapter verbergen

Beitrag von niklaslatex »

Liebe Latex-Kollegen,

ich habe ein Problem in einem Book. Ich habe hier mit fancyhdr die Kopfzeilen, die mir immer das Chapter (1. Chapter A) und die aktuelle Section der Seite anzeigen, also "1. Chaptername 1.1 Sectionname" (siehe S. 2 des PDFs von meinem Code).

Im Fall von Chapter B habe ich nur ein Chapter ohne weitere Untergliederung mit Sections. In diesem Fall wird mir dann "2. Chapter B 2.0" angezeigt. Da ich keine Section habe, würde ich gerne das leere "2.0" loswerden (siehe S. 4 des PDFs von meinem Code).

Weiß jemand Rat?

Beste Grüße
Niklas

Code: Alles auswählen

%Das ist mein Minimalbeispiel
\documentclass[a4paper, 11pt, fleqn, openany, oneside]{book}
    % General document formatting
    \usepackage[margin=0.7in]{geometry}
    \usepackage[parfill]{parskip}
    \usepackage[utf8]{inputenc}
    
    % Related to math
    \usepackage{amsmath,amssymb,amsfonts,amsthm}
		
% ---- Kopfzeilen: -------------------------------
\usepackage{fancyhdr}

% Kap. fett, Sec. normal, mit Nummerierung (mittels \thechapter, \thesection).
% Alles, was in \mbox steht, wird nicht umgebrochen
\fancypagestyle{fncystyle}{%
  \fancyhf{} % alle Eintraege loeschen
  \rhead{\small%
    \mbox{\textbf{\thechapter{}\hspace{0.8em}\nouppercase{\leftmark}}}\hspace{1em}%
    \mbox{\thesection{}\hspace{0.5em}\rightmark}}
  \renewcommand{\headrulewidth}{0.0pt}
  \fancyfoot[R]{\small\thepage}%
}

% Fuer Kapitel ohne Nummerierung soll in der Kopfzeile auch keine Kapitelnummer gesetzt werden:
\fancypagestyle{starredchap}{%
  \fancyhf{} % alle Eintraege loeschen
  \rhead{\small\textbf{\nouppercase{\leftmark}}}
  \renewcommand{\headrulewidth}{0.0pt}
  \fancyfoot[R]{\small\thepage}%
}

% Redefine the plain page style (applied on first page in each chapter):
\fancypagestyle{plain}{%
  \fancyhf{}%
  \fancyfoot[R]{\small\thepage}%
  \renewcommand{\headrulewidth}{0pt}% Line at the header invisible
  \renewcommand{\footrulewidth}{0.0pt}% Line at the footer visible
}

\pagestyle{fncystyle}

\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{#1}}

\usepackage{emptypage}  % Keine Kopf-/Fusszeilen auf leeren Seiten		

\begin{document}

\newpage
\chapter{Chapter A}

\section{Section 1.1}

Lorem ipsum dolor sit amet...

\subsection{Subsection 1.1.1}

Lorem ipsum dolor sit amet...

\subsection{Subsection 1.1.2}

Lorem ipsum dolor sit amet...

\newpage
\section{Section 1.2}

Lorem ipsum dolor sit amet...

\subsection{Subsection 1.2.1}

Lorem ipsum dolor sit amet...

\subsection{Subsection 1.2.2}

Lorem ipsum dolor sit amet...

\newpage
\chapter{Chapter B}
Lorem ipsum dolor sit amet...

\newpage
Lorem ipsum dolor sit amet...

\end{document}

Gast

Beitrag von Gast »

Baue niemals \thesection in die Kopfdefinition selbst ein. Aufgrund der asynchronen Ausgabe von TeX kann es sonst passieren, dass die falsche Nummer im Kopf steht. Verwende immer den Mark-Mechanisums. Setze also \thesection als Teil der Definition von \sectionmark. Das nachgefragte Problem verschwindet dann auch automatisch.

niklaslatex

Danke für die Info...

Beitrag von niklaslatex »

Danke für den Hinweis! Leider bekomme ich das auf die Schnelle nicht hin - der Gesamte mbox-Teil mit "\thesection" muss dann runter ins renewcommand?

oft gesehener

Beitrag von oft gesehener »

Was ist daran so schwer? Man muss doch einfach nur 1:1 kopieren (und natürlich \leftmark bzw. \rightmark wieder durch #1 ersetzen). Natürlich kann man bei der Gelegenheit auch gleich \mbox weglassen. Jedenfalls sehe ich darin keinen rechten Sinn. Das führt allenfalls zu einer overfull oder underfull \hbox, die man dann ohnehin durch kürzen beheben sollte. Aus

Code: Alles auswählen

\fancypagestyle{fncystyle}{%
  \fancyhf{} % alle Eintraege loeschen
  \rhead{\small%
    \mbox{\textbf{\thechapter{}\hspace{0.8em}\nouppercase{\leftmark}}}\hspace{1em}%
    \mbox{\thesection{}\hspace{0.5em}\rightmark}}
  \renewcommand{\headrulewidth}{0.0pt}
  \fancyfoot[R]{\small\thepage}%
}

\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{#1}}
wird dann also

Code: Alles auswählen

\fancypagestyle{fncystyle}{%
  \fancyhf{} % alle Eintraege loeschen
  \rhead{\small%
    \nouppercase{\textbf{\leftmark}}% oder \textbf{\nouppercase{\leftmark}}
    \hspace{1em}%
    \rightmark}
  \renewcommand{\headrulewidth}{0.0pt}
  \fancyfoot[R]{\small\thepage}%
}

\renewcommand{\chaptermark}[1]{\markboth{\thechapter\hspace{0.8em}
        #1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection\hspace{.5em}#1}}
BTW: Mit dieser Definition kann man sich eigentlich auch starredschap sparen, das offenbar als Notlösung für den Pfusch gedacht war.

\newpage vor \chapter ist übrigens überflüssig. \chapter führt sogar ein \clearpage aus.

Achja: Durch Verwendung einer KOMA-Script-Klasse könnte man Pakete wie parskip und emptypage und die ersten beiden Klassenoptionen einsparen. Und nicht nummerierte Kapitel gehen damit auch einfacher. Natürlich würde man dann fancyhdr durch das KOMA-Script-Paket scrlayer-scrpage ersetzen. Dafür bräuchte man dann auch kein \nouppercase o. ä.

\usepackage[utf8]{inputenc} ist übrigens seit LaTeX 2018-04-01 überflüssig.

Bitte achte bei der Wahl des Status auf die tatsächliche Bedeutung von Rückfrage.

niklaslatex

Vielen Dank - und noch eine kleine Sache ;-)

Beitrag von niklaslatex »

Vielen Dank für die Hilfe, das hat hervorragend funktioniert!

Jetzt habe ich noch eine kleine Sache.

Code: Alles auswählen

%Das ist mein Minimalbeispiel
\documentclass[a4paper, 11pt, fleqn, openany, oneside]{book}
    % General document formatting
    \usepackage[margin=0.7in]{geometry}
    \usepackage[parfill]{parskip}
    \usepackage[utf8]{inputenc}
   
    % Related to math
    \usepackage{amsmath,amssymb,amsfonts,amsthm}
     
% ---- Kopfzeilen: -------------------------------
\usepackage{fancyhdr}

% Kapitel fett, Sec. normal, mit Nummerierung (mittels \thechapter, \thesection).
% Alles, was in \mbox steht, wird nicht umgebrochen
\fancypagestyle{fncystyle}{%
  \fancyhf{} % alle Eintraege loeschen
  \rhead{\small%
    \nouppercase{\textbf{\leftmark}}% oder \textbf{\nouppercase{\leftmark}}
    \hspace{1em}
    \rightmark}
  \renewcommand{\headrulewidth}{0.0pt}
  \fancyfoot[R]{\small\thepage}%
}

% Fuer Kapitel ohne Nummerierung soll in der Kopfzeile auch keine Kapitelnummer gesetzt werden / Abstract
\fancypagestyle{starredchap}{%
  \fancyhf{} % alle Eintraege loeschen
  \rhead{\small\textbf{\nouppercase{\leftmark}}}
  \renewcommand{\headrulewidth}{0.0pt}
  \fancyfoot[R]{\small\thepage}%
}

% Redefine the plain page style (applied on first page in each chapter):
\fancypagestyle{plain}{%
  \fancyhf{}%
  \fancyfoot[R]{\small\thepage}%
  \renewcommand{\headrulewidth}{0pt}% Line at the header invisible
  \renewcommand{\footrulewidth}{0.0pt}% Line at the footer visible
}

\pagestyle{fncystyle}

\renewcommand{\chaptermark}[1]{\markboth{\thechapter\hspace{0.8em}#1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection\hspace{0.5em}#1}}

\usepackage{emptypage}  % Keine Kopf-/Fusszeilen auf leeren Seiten      

\begin{document}

\chapter{Chapter A}

\section{Section 1.1}

Lorem ipsum dolor sit amet...

\subsection{Subsection 1.1.1}

Lorem ipsum dolor sit amet...

\subsection{Subsection 1.1.2}

Lorem ipsum dolor sit amet...

\newpage
\section{Section 1.2}

Lorem ipsum dolor sit amet...

\subsection{Subsection 1.2.1}

Lorem ipsum dolor sit amet...

\subsection{Subsection 1.2.2}

Lorem ipsum dolor sit amet...

\chapter{Chapter B}
Lorem ipsum dolor sit amet...

\newpage
Lorem ipsum dolor sit amet...

\end{document}
Das vspace von 1em in Zeile 20 sorgt dafür, dass ohne eine bestehende Section (Rightmark) die Chaptermark nicht rechtsbündig abschließt, sondern um 1em nach links eingerückt ist. Ich dachte, dass vspace am Ende einer Zeile nicht greift (es sei denn man würde vspace*) setzen. Nach einigem herumprobieren (vspace in die rightmark gesetzt etc.) bräuchte ich hier noch einmal einen Hinweis.

Besten Dank im Voraus
Niklas

niklaslatex

Korrektur - hab mich vertippt

Beitrag von niklaslatex »

Entschuldigung, es geht natürlich um das hspace, ich hatte mich mit dem vspace vertippt.

BG
Niklas

oft gesehener

Beitrag von oft gesehener »

Dann verschieb es eben in das \markriht der \sectionmark-Definition. Damit wir es Teil der \rightmark. Es wird dann also nur eingefügt, wenn \sectionmark (von \section) tatsächlich aufgerufen wird.

niklaslatex

Vielen Dank!

Beitrag von niklaslatex »

Vielen Dank, das war der entscheidende Hinweis ;-) Für evtl. andere Suchenden, hier noch die angepasste Definition:


Code: Alles auswählen

% ---- Kopfzeilen: -------------------------------
\usepackage{fancyhdr}

% Kapitel fett, Sec. normal, mit Nummerierung (mittels \thechapter, \thesection).
% Alles, was in \mbox steht, wird nicht umgebrochen
\fancypagestyle{fncystyle}{%
  \fancyhf{} % alle Eintraege loeschen
  \rhead{\small%
    \nouppercase{\textbf{\leftmark}}% oder \textbf{\nouppercase{\leftmark}}
    \rightmark}
  \renewcommand{\headrulewidth}{0.0pt}
  \fancyfoot[R]{\small\thepage}%
}

% Fuer Kapitel ohne Nummerierung soll in der Kopfzeile auch keine Kapitelnummer gesetzt werden / Abstract
\fancypagestyle{starredchap}{%
  \fancyhf{} % alle Eintraege loeschen
  \rhead{\small\textbf{\nouppercase{\leftmark}}}
  \renewcommand{\headrulewidth}{0.0pt}
  \fancyfoot[R]{\small\thepage}%
}

% Redefine the plain page style (applied on first page in each chapter):
\fancypagestyle{plain}{%
  \fancyhf{}%
  \fancyfoot[R]{\small\thepage}%
  \renewcommand{\headrulewidth}{0pt}% Line at the header invisible
  \renewcommand{\footrulewidth}{0.0pt}% Line at the footer visible
}

\pagestyle{fncystyle}

\renewcommand{\chaptermark}[1]{\markboth{\thechapter\hspace{0.8em}#1}{}}
\renewcommand{\sectionmark}[1]{\markright{\hspace{1em}{\thesection\hspace{0.5em}#1}}}
Beste Grüße
Niklas

Antworten