Usar {tabu} para fazer linhas grossas da tabela no cabeçalho gera erros

Usar {tabu} para fazer linhas grossas da tabela no cabeçalho gera erros

Quero colocar uma linha vertical grossa ao lado do número da minha página no cabeçalho de cada página. Optei por construir uma pequena mesa e adicionar uma linha a ela. Funciona bem, até eu adicionar a opção (parte do {tabu}pacote) de definir a espessura da borda da mesa. O código (que gera muitos erros) fica assim:

\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}

quando coloco a tabela no texto principal (ou seja, não no cabeçalho), elas ficam bem

\begin{tabu}{|[2pt]c}\bfseries\thepage \\ ~ \end{tabu}

quando removo a [2pt]linha também não há problema. No entanto, não consigo entender pelos erros gerados o que deu errado. Por exemplo, o primeiro erro diz:

!missing number, treated as zero

Quando compilo isso como parte do meu projeto maior, o processo de compilação falha completamente!

Minhas dúvidas seriam: Por que esse código não funciona dentro dos cabeçalhos e como deve ser alterado para obter o efeito desejado?

Responder1

insira a descrição da imagem aqui

Infelizmente o tabupacote é muitas vezes incompatível com latex (mais notavelmente em suas infelizes decisões de mudar a >sintaxe, aqui ele está tropeçando em caracteres ativos.

\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}

Responder2

Você está usando uma marreta. Uma melhor medição pode ser obtida usando regras e fazendo cuidadosamente o alinhamento.

Aqui está uma possibilidade (a showframeopção e o geometrypacote são usados ​​apenas para exemplo):

\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}

Página 1

insira a descrição da imagem aqui

Página 2

insira a descrição da imagem aqui

Página 1 sem molduras

insira a descrição da imagem aqui

informação relacionada