Die Verwendung von {tabu} zum Erstellen dicker Tabellenlinien in der Kopfzeile führt zu Fehlern

Die Verwendung von {tabu} zum Erstellen dicker Tabellenlinien in der Kopfzeile führt zu Fehlern

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

Bildbeschreibung hier eingeben

Leider ist das tabuPaket 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 showframeOption und das geometryPaket 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}

Seite 1

Bildbeschreibung hier eingeben

Seite 2

Bildbeschreibung hier eingeben

Seite 1 ohne Rahmen

Bildbeschreibung hier eingeben

verwandte Informationen