在最后一页奇数页添加(不同的)页脚

在最后一页奇数页添加(不同的)页脚

我有一个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}

相关内容