latex fancyhdr:可以交替使用 leftmark 和 rightmark 吗?

latex fancyhdr:可以交替使用 leftmark 和 rightmark 吗?

我正在使用此代码来自定义标题布局:

\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{}

相关内容