\markright 中的 \thepage 值始终为 1

\markright 中的 \thepage 值始终为 1

以下乳胶输入:

 \documentclass{article}

 \pagestyle{myheadings}

 \markright{\ifodd\thepage ODD HEADER on \thepage\else EVEN HEADER on \thepage\fi}

在所有页面上输出“ODD HEADER on 1”,显然是因为执行 \markright 时 \thepage 为 1。我该如何修复这个问题(最好不使用 fancyhdrs)?

答案1

\markright展开它的论点。在你写下这句话的时候

\markright{\ifodd\thepage ODD HEADER on \thepage\else EVEN HEADER on \thepage\fi}

\thepage等于1,所以扩展后节点中存储的信息为ODD HEADER on 1

您可以通过存储\ifodd\thepage ODD HEADER on \thepage\else EVEN HEADER on \thepage\fi受保护的宏来解决这个问题:

\documentclass{article}

\pagestyle{myheadings}

\NewDocumentCommand\Tim{}{\ifodd\thepage ODD HEADER on \thepage\else EVEN HEADER on \thepage\fi}
\markright{\Tim}


\begin{document}
 hello \newpage  hello\newpage hello
\end{document}

答案2

如上所述,\markright在定义时已经扩展。这是旧版 LaTeX 的语法。虽然\ifodd我认为它不是官方的 LaTeX,但它是核心 TeX(因此我允许自己使用它,\noexpand它也不是 LaTeX)。

\documentclass{article}

% only for screenshot purposes
\usepackage[paperheight=4cm,height=2cm,includehead,nofoot]{geometry}


 \pagestyle{myheadings}

 \markright{\noexpand\ifodd\value{page}%
     ODD HEADER on \protect\thepage
     \noexpand\else
     EVEN HEADER on \protect\thepage
     \noexpand\fi}
\begin{document}
A
\clearpage
B
\clearpage
C 
\end{document}

请注意,我\thepage\ifodd测试中避免使用,因为\thepage不能保证与 TeX 数字上下文兼容。

3 页,含页眉

相关内容