如何获取标题中的 Part?

如何获取标题中的 Part?

我正在用 LaTeX 写我的硕士论文。我正在使用bookdocument 类和 fancyfancyhdr包。现在,我想将“部分”放在偶数页,将“章节”放在奇数页。我读​​了你的一条评论并尝试:

\pagestyle{fancy}
\fancyhead{}
\renewcommand{\headrulewidth}{0.2pt}

\renewcommand{\partmark}[1]{\markboth
  {\color[gray]{.0}\thepart. #1}{}}

\renewcommand{\chaptermark}[1]{\markright
  {\color[gray]{.0}\thechapter.\ #1}}

\renewcommand{\sectionmark}[1]{}

\fancyhead[EL]{\nouppercase{\textbf{\leftmark}}}    
\fancyhead[OR]{\nouppercase{\textbf{\rightmark}}}

不幸的是,该章节出现在奇数页,但该部分在偶数页上看不到?我做错了什么?

答案1

\partmark默认情况下不存在book.cls。因此,您还需要更新\part以适当地插入新定义的\partmark。以下 MWE 使用etoolbox修补:

在此处输入图片描述

\documentclass{book}
\usepackage{fancyhdr,lipsum,xcolor,etoolbox}
\makeatletter
\patchcmd{\@part}% <cmd>
  {\markboth{}{}}% <search>
  {\partmark{#1}}% <replace>
  {}{}% <success><failure>
\makeatother
\pagestyle{fancy}
\fancyhead{}
\renewcommand{\headrulewidth}{0.2pt}

\newcommand{\partmark}[1]{\markboth
  {\color[gray]{.0}\thepart. #1}{}}

\renewcommand{\chaptermark}[1]{\markright
  {\color[gray]{.0}\thechapter.\ #1}}

\renewcommand{\sectionmark}[1]{}

\fancyhead[EL]{\nouppercase{\textbf{\leftmark}}}    
\fancyhead[OR]{\nouppercase{\textbf{\rightmark}}}
\begin{document}
\part{A part}
\chapter{A chapter}
\lipsum[1-10]

\end{document}

补丁将\@part替换\markboth{}{}\partmark{#1},它接受 的第一个参数\@part- 与目录关联的标题。这是 的原始定义,\@part其中突出显示了补丁替换的行:

\def\@part[#1]#2{%
    \ifnum \c@secnumdepth >-2\relax
      \refstepcounter{part}%
      \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
    \else
      \addcontentsline{toc}{part}{#1}%
    \fi
    \markboth{}{}% <------- the patch changed this into \partmark{#1}
    {\centering
     \interlinepenalty \@M
     \normalfont
     \ifnum \c@secnumdepth >-2\relax
       \huge\bfseries \partname\nobreakspace\thepart
       \par
       \vskip 20\p@
     \fi
     \Huge \bfseries #2\par}%
    \@endpart}

可以使用以下方法实现类似的布局titleps(在页眉中添加了页码,以说明其价值):

\documentclass{book}
\usepackage{lipsum,xcolor,titleps,etoolbox}
\newcommand{\parttitle}{}
\makeatletter
\patchcmd{\@part}% <cmd>
  {\markboth}% <search>
  {\renewcommand{\parttitle}{#1}}% <replace>
  {}{}% <success><failure>
\makeatother
\newpagestyle{fancy}{%
  \setheadrule{0.2pt}%
  \sethead  [\textbf{\thepart.\ \parttitle}]%        even-left
            []%                                      even-center
            [\thepage]%                              even-right
            {\thepage}%                              odd-left
            {}%                                      odd-center
            {\textbf{\thechapter.\ \chaptertitle}}%  odd-right
}
\pagestyle{fancy}

\begin{document}
\part{A part}
\chapter{A chapter}
\lipsum[1-10]

\end{document}

仍然需要一个补丁来定义\parttitle,默认情况下它不存在。

相关内容