使用 {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软件包通常与乳胶不兼容(最明显的是它不幸地决定改变语法>,在这里它会绊倒活动字符。

\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 页,无框架

在此处输入图片描述

相关内容