我正在使用此代码来自定义标题布局:
\pagestyle{fancy}
\fancyhead{}
\fancyfoot{}
\lhead{\nouppercase{\rightmark}}
\rhead{\thepage}
我希望在每页的左上角显示章节名称,格式为“1.1 节”,这可以使用 \rightmark 实现。但是,正如 fancyhdr 文档中提到的那样,“在章节(或文章样式中的章节)的第一页上,\rightmark 将为空”。因此,当 \rightmark 为空时,我希望打印章节名称,如“第 1 章简介”,而不是章节名称,这可以使用 \leftmark 实现。所以我的问题是:我可以使用这样的“其他条件”,以便在 \rightmark 为空时使用 \leftmark,否则使用 \rightmark 吗?类似:
empty(\rightmark) ? \leftmark : \rightmark
提前致谢。
答案1
您可以\rightmark
通过完全展开它来测试它是否为空;该命令\rightorleftmark
将执行您想要的操作(取消注释该\section
行以查看差异)。
\documentclass{book}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\lhead{\nouppercase{\rightorleftmark}}
\rhead{\thepage}
\makeatletter
\newcommand{\rightorleftmark}{%
\begingroup\protected@edef\x{\rightmark}%
\ifx\x\@empty
\endgroup\leftmark
\else
\endgroup\rightmark
\fi}
\makeatother
\begin{document}
\mainmatter
\chapter{A}
%\section{B}
abc\newpage
def\newpage
\end{document}
答案2
我使用这些命令解决了这个问题,它们在奇数页上打印章节名称和编号,在偶数页上打印章节。当偶数页尚未定义章节时,它会再次打印章节名称和编号。
\newcommand{\customizedheader}{
\ifthenelse
{\isodd{\thepage}}
{\leftmark{}}
{\checkemptyrightmark{\rightmark{}}}
}
\newcommand{\checkemptyrightmark}[1]{
\ifthenelse
{\equal{#1}{\@empty{}}}
{\leftmark{}}
{\rightmark}
}
最后使用宏作为标题
\newcommand{\currentPar}{\customizedheader}
啊,ifthenelse 命令来自如果那么包中 \@empty 定义为
\def\@empty{}