以下乳胶输入:
\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 数字上下文兼容。