Dateien

Dateien

Ich lerne LaTeX. Ich verwende fancyhdrin einer Buchdokumentklasse.

Ich möchte, dass die horizontale Linie so erweitert wird, dass sie die gesamte Seitenbreite einnimmt.

Screenshot, der die bis zu den Seitengrenzen erweiterte Kopfzeilenregel zeigt

Ich habe es versucht \fancyheadoffset, aber der Inhalt der Kopfzeile stimmt nicht mehr mit dem Hauptinhalt der Seite überein.

der gesamte Header nimmt die Seitenbreite ein, einschließlich des Header-Inhalts

Ich habe auch versucht, einen \makeboxund den \headruleBefehl 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?

visuelle Erklärung des erwarteten Ergebnisses

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 \headruledas fancyhdrPaket erneuert, indem ich das Original \rulein 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 \vskipdes fancyhdrPakets 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 \vskipauf -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.

Ergebnis

auf gerader Seite erfassen

auf ungerader Seite erfassen

verwandte Informationen