Использование {tabu} для создания толстых строк таблицы в заголовке приводит к ошибкам

Использование {tabu} для создания толстых строк таблицы в заголовке приводит к ошибкам

Я хочу разместить толстую вертикальную линию рядом с номером страницы в заголовке каждой страницы. Я решил построить небольшую таблицу и добавить к ней линию. Она работает нормально, пока я не добавлю опцию (часть пакета {tabu}) определения толщины границы таблицы. Код (который генерирует много ошибок) выглядит так:

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

когда я помещаю таблицу в основной текст (т.е. не в заголовок), они выходят нормально

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

когда я удаляю [2pt]строку, то тоже нет проблем. Тем не менее, я не могу понять из сгенерированных ошибок, что пошло не так. Например, первая ошибка гласит:

!missing number, treated as zero

Когда я компилирую это как часть моего более крупного проекта, процесс компиляции полностью завершается сбоем!

У меня возникли вопросы: почему этот код не работает внутри заголовков и как его следует изменить, чтобы получить желаемый эффект?

решение1

введите описание изображения здесь

К сожалению, tabuпакет часто несовместим с latex (в частности, из-за неудачных решений по изменению синтаксиса >, здесь он спотыкается об активные символы).

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

решение2

Вы используете кувалду. Лучшее измерение можно получить, используя линейки и тщательно выполнив выравнивание.

Вот один из возможных вариантов ( showframeопция и geometryпакет использованы только для примера):

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

Страница 1

введите описание изображения здесь

Страница 2

введите описание изображения здесь

Страница 1 без рамок

введите описание изображения здесь

Связанный контент