各ページのヘッダーにあるページ番号の横に太い縦線を配置したいです。小さな表を作成し、そこに線を追加することにしました。{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}