更改标题文本并保留 \fancyhead 中内置的相同设计

更改标题文本并保留 \fancyhead 中内置的相同设计

我正在尝试为偶数页和奇数页制作一个好看的页眉,效果非常好。但我想让一个部分更改页眉中的文本(与部分或章节不同的名称),并保持使用 \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 组内)。

相关内容