我有一个twoside
文档,我正在使用fancyhdr
。每个偶数页都有页脚“A”,所有奇数页都有页脚“B”,但现在我想让最后一个奇数页有页脚“C”。
在偶数页/奇数页上添加页脚没有问题,在最后一页上更改页脚也没有问题。但我似乎无法找到更改最后一页奇数页页脚的方法。
答案1
以下示例将每个奇数页写入\gdef\lastoddpage{<page number>}
文件.aux
。在下一次 LaTeX 运行中,\lastoddpage
将设置为上一次运行的最后一个奇数页的页码。
\documentclass[twoside]{article}
\makeatletter
\newcommand*{\lastoddcheck}{%
\ifodd\value{page}%
\if@filesw
\immediate\write\@auxout{%
\gdef\string\lastoddpage{\the\value{page}}%
}%
\fi
\fi
}
\newcommand*{\lastoddpage}{0}% initialize
\makeatother
\usepackage{fancyhdr}
\fancyfoot{}
\fancyfoot[LE,RO]{\thepage}
\fancyfoot[CE]{A}
\fancyfoot[CO]{%
\lastoddcheck
\ifnum\lastoddpage=\value{page}%
C%
\else
B%
\fi
}
\pagestyle{fancy}
\begin{document}
Hello World\newpage Foobar\newpage Last odd page\newpage Last page
\end{document}
该文件至少需要编译两次。
重新运行警告稍微复杂一些,但更舒适,因为用户知道何时需要另一次 LaTeX 运行。
\documentclass[twoside]{article}
\usepackage{atveryend}
\makeatletter
\newcommand*{\lastoddcheck}{%
\ifodd\value{page}%
\if@filesw
\immediate\write\@auxout{%
\gdef\string\lastoddpage{\the\value{page}}%
}%
\fi
\fi
}
\newcommand*{\lastoddpage}{0}% initialize
\AtBeginDocument{%
\let\previouslastoddpage\lastoddpage
}
\AtVeryEndDocument{%
\ifx\previouslastoddpage\lastoddpage
\else
\@latex@warning@no@line{%
\string\lastoddpage\space has changed. %
Rerun to get the value right%
}%
\fi
}
\makeatother
\usepackage{fancyhdr}
\fancyfoot{}
\fancyfoot[LE,RO]{\thepage}
\fancyfoot[CE]{A}
\fancyfoot[CO]{%
\lastoddcheck
\ifnum\lastoddpage=\value{page}%
C%
\else
B%
\fi
}
\pagestyle{fancy}
\begin{document}
Hello World\newpage Foobar\newpage Last odd page\newpage Last page
\end{document}
结果:
Page 1: B
Page 2: A
Page 3: C
Page 4: A
前面的例子都是使用\value{page}
,如果页面值不唯一,则\thepage
可以改用 (\thepage
需要可扩展):
\documentclass[twoside]{article}
\usepackage{atveryend}
\makeatletter
\newcommand*{\lastoddcheck}{%
\ifodd\value{page}%
\if@filesw
\immediate\write\@auxout{%
\gdef\string\lastoddpage{\thepage}%
}%
\fi
\fi
}
\newcommand*{\lastoddpage}{init}% initialize
\AtBeginDocument{%
\let\previouslastoddpage\lastoddpage
}
\AtVeryEndDocument{%
\ifx\previouslastoddpage\lastoddpage
\else
\@latex@warning@no@line{%
\string\lastoddpage\space has changed. %
Rerun to get the value right%
}%
\fi
}
\makeatother
\usepackage{fancyhdr}
\fancyfoot{}
\fancyfoot[LE,RO]{\thepage}
\fancyfoot[CE]{A}
\fancyfoot[CO]{%
\lastoddcheck
\edef\thisthepage{\thepage}%
\ifx\lastoddpage\thisthepage
C%
\else
B%
\fi
}
\pagestyle{fancy}
\begin{document}
Hello World\newpage Foobar\newpage Last odd page\newpage Last page
\end{document}