我正在尝试为偶数页和奇数页制作一个好看的页眉,效果非常好。但我想让一个部分更改页眉中的文本(与部分或章节不同的名称),并保持使用 \fancyhead[]{} 构建的相同设计。
我有以下代码:
\documentclass{book}
\usepackage{tikz}
\usepackage{lipsum}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\renewcommand\headrulewidth{0pt}
\fancyhead[LE]
{\begin{tikzpicture}[overlay,remember picture]
\fill[red] ([xshift=1.5cm]current page.north west) rectangle (\paperwidth,1cm);%
\fill[black] (current page.north west) rectangle (0cm,1cm);%
\node[anchor=west] at (0,1.5cm) {\bfseries \color{white}{\leftmark}};
\node[anchor=west] at ([yshift=-0.608cm]current page.north west) {\bfseries \color{white}{Page \thepage}};
\end{tikzpicture}
}
\fancyhead[RO]
{
\begin{tikzpicture}[overlay,remember picture]%
\fill[black] (current page.north west) rectangle (\paperwidth,1cm);
\fill[red] (current page.north west) rectangle (0cm,1cm);
\node[anchor=east] at (0,1.5cm) {\bfseries \color{white}{\rightmark}};
\node[anchor=east] at ([yshift=-0.608cm]current page.north east) {\bfseries \color{white}{Page \thepage}};
\end{tikzpicture}
}
\begin{document}
\chapter{Test Chapter}
\section{Test Section}
\lipsum[1-15]
\newpage
\section{Test Section 2}
\lipsum[1-15]
\lhead{Here is where I want another header, but still keep the layout}
\newpage
\end{document}
如果我使用 \lhead{The text},整个 tikz 设计就会消失,最终标题中会显示纯文本。有人能帮我解决这个问题吗?
答案1
使用\markright{The text}
,这将设置\rightmark
就像\section
会做的那样。
要更加小心地保护行尾:在行尾内tikzpicture
它们会被忽略,在行尾外它们会被保留。
\documentclass{book}
\usepackage{tikz}
\usepackage{fancyhdr}
\usepackage{lipsum}
\pagestyle{fancy}
\fancyhf{}
\renewcommand\headrulewidth{0pt}
\fancyhead[LE]{%
\begin{tikzpicture}[overlay,remember picture]
\fill[red] ([xshift=1.5cm]current page.north west) rectangle (\paperwidth,1cm);
\fill[black] (current page.north west) rectangle (0cm,1cm);
\node[anchor=west] at (0,1.5cm) {\bfseries \color{white}{\leftmark}};
\node[anchor=west] at ([yshift=-0.608cm]current page.north west)
{\bfseries \color{white}{Page \thepage}};
\end{tikzpicture}%
}
\fancyhead[RO]{%
\begin{tikzpicture}[overlay,remember picture]
\fill[black] (current page.north west) rectangle (\paperwidth,1cm);
\fill[red] (current page.north west) rectangle (0cm,1cm);
\node[anchor=east] at (0,1.5cm) {\bfseries \color{white}{\rightmark}};
\node[anchor=east] at ([yshift=-0.608cm]current page.north east)
{\bfseries \color{white}{Page \thepage}};
\end{tikzpicture}%
}
\begin{document}
\chapter{Test Chapter}
\section{Test Section}
\lipsum[1-15]
\newpage
\section{Test Section 2}
\lipsum[1-15]
\markright{The text}
\newpage
\end{document}
答案2
因为标题中的文本来自哪里\leftmark
,\rightmark
您可以通过在该页面上定义自己的标记来获得解决方案。例如
\markboth{LEFT TEXT}{RIGHT TEXT}
但这取决于\section
命令是否存在。如果页面边界定义清晰,就像\newpage
您的示例中的一样,将此代码放在页面的开头和结尾可能会有所帮助。
另一种方法是用\leftmark
和替换\rightmark
定义中的\myleftmark
和\myrightmark
,并将它们定义为:
\newcommand{\myleftmark}{\leftmark}
\newcommand{\myrightmark}{\rightmark}
在那个特殊的页面上重新定义这些
\renewcommand{\myleftmark}{SPECIAL TEXT}
\renewcommand{\myrightmark}{SPECIAL TEXT}
并将它们定义回该页面之后的第一个页面(或将该特殊页面放入 TeX 组内)。