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
Infelizmente o tabu
pacote é 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 showframe
opção e o geometry
pacote 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}