
Ich lerne LaTeX. Ich verwende fancyhdr
in einer Buchdokumentklasse.
Ich möchte, dass die horizontale Linie so erweitert wird, dass sie die gesamte Seitenbreite einnimmt.
Ich habe es versucht \fancyheadoffset
, aber der Inhalt der Kopfzeile stimmt nicht mehr mit dem Hauptinhalt der Seite überein.
Ich habe auch versucht, einen \makebox
und den \headrule
Befehl zu erneuern, aber es entsteht unerwünschter vertikaler Raum, den ich nicht kontrollieren konnte (Lösung basierend auf einer Antwort auf dieseFrage).
Wie kann ich nur die Hrule erweitern?
Dateien
Dokumentklasse basierend auf Buch
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{novel}[2024/02/01 Novel]
\LoadClass[12pt,a5paper,twoside,openright]{book}
% UTF-8 support.
\RequirePackage[utf8]{inputenc}
%%%%%%%%%%%
% Layout. %
%%%%%%%%%%%
% Basic layout.
\RequirePackage[
papersize={152mm,214mm},
layout=a5paper,
layouthoffset=2mm,
layoutvoffset=2mm,
bindingoffset=8mm,
left=17mm,
right=17mm,
top=17mm,
bottom=17mm,
%showframe
]{geometry}
%%%%%%%%%%%%%%%
% Formatting. %
%%%%%%%%%%%%%%%
% Helps build better header and footer; places the page number in the footer.
\RequirePackage{fancyhdr}
% Redefine fancy style.
\fancypagestyle{fancy}{
\fancyheadoffset[loh,reh]{27mm}
\fancyheadoffset[roh,leh]{19mm}
\fancyhf{}
\fancyhead[EL]{\smaller{\smaller{\textit{\MakeUppercase{\vspace{\baselineskip} \\ \thetitle}}}}}
\fancyhead[OR]{\smaller{\smaller{\MakeUppercase{\chaptername\ \thechapter\ \\ \leftmark}}}}
\renewcommand{\headrulewidth}{1pt}
\fancyfoot[LE,RO]{\smaller{\thepage}}}
% Redefine plain style to match fancy style.
\fancypagestyle{plain}{
\addtolength{\headwidth}{0cm}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\fancyfoot[LE,RO]{\smaller{\thepage}}}
% Removes headers on empty pages.
\RequirePackage{emptypage}
% Used for convenient title management.
\RequirePackage{titling}
% Font size adjustment commands.
\RequirePackage{relsize}
% Reduces widows and orphans.
\RequirePackage[all]{nowidow}
% Change the chapter title in the header to only the chapter title.
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
%%%%%%%%%%%%%%%
% Typography. %
%%%%%%%%%%%%%%%
% Fixes some hyphenation issues (lines longer than body width).
\sloppy
% Micro-typographical adjustments. TODO: reevaluate usefulness
\RequirePackage{microtype}
% Remove space between paragraphs.
\RequirePackage[skip=0pt,indent=15pt]{parskip}
Haupt-TeX-Datei
\documentclass[]{novel}
% This is necessary for proper language-specific hyphenation.
\usepackage[french]{babel}
\usepackage[]{lipsum}
%%%%%%%%%%%%%
% Metadata. %
%%%%%%%%%%%%%
\author{NemuLumeN}
\title{Title of the book}
\date{2022}
\pagestyle{fancy}
\begin{document}
\maketitle
\tableofcontents
\chapter{First chapter title}
\lipsum[1-10]
\chapter{Second chapter}
Oh yeah
\end{document}
Antwort1
Also bin ich dem Vorschlag von @Tom gefolgt und habe es noch einmal mit der Makebox-Lösung aus der anderen Frage versucht, die Option „Shift“ angewendet und es hat funktioniert (glaube ich).
\makeatletter
\def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi
\makebox[\linewidth]{\rule[\linewidth]{\dimexpr(\paperwidth + 8mm)}{\headrulewidth}}
\vskip-315.69928pt}}%
\makeatother
Erläuterung
Ich habe \headrule
das fancyhdr
Paket erneuert, indem ich das Original \rule
in das eingekapselt habe \makebox
. Ich bin nicht sicher, ob das Lineal genau der tatsächlichen Seitenbreite entspricht, aber es sind zumindest keine Lücken zu sehen. (Ich glaube, das Lineal geht über die Papiergrenzen hinaus.)
Ich musste das Original \vskip
des fancyhdr
Pakets anpassen, da das Log diese Ausgabe zeigte:
Package fancyhdr Warning: \headheight is too small (12.0pt):
(fancyhdr) Make it at least 301.59924pt, for example:
(fancyhdr) \setlength{\headheight}{301.59924pt}.
(fancyhdr) You might also make \topmargin smaller to compensate:
(fancyhdr) \addtolength{\topmargin}{-289.59924pt}.
Das Ändern des Originals \vskip
auf -315.69928pt „behebt“ den Fehler. Ich weiß allerdings nicht, warum oder was genau behoben wird, da sich optisch nichts ändert, unabhängig davon, ob der Wert festgelegt ist oder nicht.