Usar {tabu} para hacer líneas de tabla gruesas en el encabezado genera errores

Usar {tabu} para hacer líneas de tabla gruesas en el encabezado genera errores

Quiero colocar una línea vertical gruesa al lado de mi número de página en el encabezado de cada página. Elegí construir una mesa pequeña y agregarle la línea. Funciona bien, hasta que agrego la opción (parte del {tabu}paquete) de definir el grosor del borde de la mesa. El código (que genera muchos errores) se ve así:

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

cuando pongo la tabla en el texto principal (es decir, no en el encabezado) salen bien

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

cuando elimino la [2pt]línea tampoco hay problema. Sin embargo, a partir de los errores generados no puedo distinguir qué salió mal. Por ejemplo, el primer error dice:

!missing number, treated as zero

Cuando compilo esto como parte de mi proyecto más grande, ¡el proceso de compilación falla por completo!

Mis preguntas serían: ¿Por qué este código no funciona dentro de los encabezados y cómo debería cambiarse para obtener el efecto deseado?

Respuesta1

ingrese la descripción de la imagen aquí

Desafortunadamente, el tabupaquete a menudo es incompatible con latex (sobre todo en sus desafortunadas decisiones de cambiar la >sintaxis, aquí se tropieza con caracteres activos).

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

Respuesta2

Estás usando un mazo. Se pueden obtener mejores mediciones utilizando reglas y haciendo la alineación con cuidado.

Aquí hay una posibilidad (la showframeopción y el geometrypaquete se usan solo para el ejemplo):

\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

ingrese la descripción de la imagen aquí

Página 2

ingrese la descripción de la imagen aquí

Página 1 sin marcos

ingrese la descripción de la imagen aquí

información relacionada