Ich möchte neben meiner Seitenzahl in der Kopfzeile jeder Seite eine dicke vertikale Linie einfügen. Ich habe mich dafür entschieden, eine kleine Tabelle zu erstellen und die Linie dort einzufügen. Das funktioniert gut, bis ich die Option (Teil des {tabu}
Pakets) zum Definieren der Dicke des Tabellenrahmens hinzufüge. Der Code (der viele Fehler erzeugt) sieht folgendermaßen aus:
\documentclass{book}
\usepackage{fancyhdr}
\usepackage{tabu}
\begin{document}
\pagestyle{fancy}
\fancyhead{}
\fancyfoot{}
\renewcommand{\headrulewidth}{0pt}%no top ruler
\fancyheadoffset{0.8 cm}
\fancyhead[RO]{\begin{tabu}{|[2pt]c}\bfseries\thepage \\ ~ \end{tabu}}
\fancyhead[LE]{\begin{tabu}{c|[2pt]}\bfseries\thepage \\ ~ \end{tabu}}
\headheight=24pt
~
\newpage
~
\end{document}
wenn ich die Tabelle in den Haupttext einfüge (also nicht in die Kopfzeile), kommen sie gut raus
\begin{tabu}{|[2pt]c}\bfseries\thepage \\ ~ \end{tabu}
wenn ich die Zeile entferne, [2pt]
gibt es auch kein Problem. Trotzdem kann ich anhand der generierten Fehler nicht erkennen, was schief gelaufen ist. Der erste Fehler lautet beispielsweise:
!missing number, treated as zero
Wenn ich dies als Teil meines größeren Projekts kompiliere, stürzt der Kompilierungsprozess vollständig ab!
Meine Fragen wären: Warum funktioniert dieser Code innerhalb von Headern nicht und wie muss er geändert werden, um den gewünschten Effekt zu erzielen?
Antwort1
Leider ist das tabu
Paket oft nicht mit Latex kompatibel (vor allem aufgrund der unglücklichen Entscheidung, die >
Syntax zu ändern; hier stolpert es über aktive Zeichen).
\documentclass{book}
\usepackage{fancyhdr}
\usepackage{tabu}
\pagestyle{fancy}
\fancyhead{}
\fancyfoot{}
\renewcommand{\headrulewidth}{0pt}%no top ruler
\fancyheadoffset{0.8 cm}
\makeatletter
\fancyhead[RO]{\let\@activechar@info\@gobble\begin{tabu}{|[2pt]c}\bfseries\thepage \tabularnewline ~ \end{tabu}}
\fancyhead[LE]{\let\@activechar@info\@gobble\begin{tabu}{c|[2pt]}\bfseries\thepage \tabularnewline ~ \end{tabu}}
\makeatother
\headheight=24pt
\begin{document}
~
\newpage
~
\end{document}
Antwort2
Sie verwenden einen Vorschlaghammer. Durch die Verwendung von Linealen und sorgfältiges Ausrichten können Sie bessere Ergebnisse erzielen.
Hier ist eine Möglichkeit (die showframe
Option und das geometry
Paket werden nur für das Beispiel verwendet):
\documentclass{book}
%% the following two packages are just for the example
\usepackage[pass,showframe]{geometry}
\usepackage{lipsum}
%%
\usepackage{calc}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt}%no top ruler
\fancyhf{}
\fancyhead[RO]{\rightpage}
\fancyhead[LE]{\leftpage}
\setlength{\headheight}{24pt}
\newcommand{\digitheight}{\fontcharht\font`0 }
\newcommand{\rightpage}{\mypagenumber{\ }{l}{\ \ \bfseries\thepage}}
\newcommand{\leftpage}{\mypagenumber{\bfseries\thepage\ \ }{r}{\ }}
% Arguments of \mypagenumber:
% #1: tokens to be set at the left of the bar
% #2: position of the bar (use l for the right header, r for the left)
% #3: tokens to be set at the right of the bar
\newcommand{\mypagenumber}[3]{%
\raisebox{\ht\strutbox-\digitheight}{%
\makebox[0pt][#2]{%
\bfseries
#1%
\vrule depth \dimexpr 24pt - \digitheight\relax width 2pt
#3}%
}%
}
\begin{document}
\lipsum[1-12]
\end{document}