如何获取特定页码样式下的页数总和

如何获取特定页码样式下的页数总和

我构建了一篇具有三种页码样式的文章。

- fist part: \pagenumbering{Roman}

- Sencond part: \pagenumbering{arabic}

- third part: \pagenumbering{Alpha}

问题 1:

如何获取各部分的页数总和?例如,第一部分有 3 页,页码样式为罗马字,第二部分有 5 页,页码样式为阿拉伯字。此问题的答案将在问题 2 中使用。

问题2:

在每个部分的每一页的页脚中,我想像这样排版页码:(Page\ \thepage\ of\ \totalpages{Roman}或阿拉伯文,相关部分使用字母)。我知道@abspage@last,但它只是给出整篇文章的总页码。那么是否可以制作一个宏来\totalpages{Roman/arabic/Alpha...}实现这一点?没有其他首选软件包。

例子:

\documentclass{article}
\usepackage{geometry,fancyhdr}
\pagestyle{fancy}\fancyhf{}

\newcommand\totalpages[1]{...}

\begin{document}
part 1:
\pagenumbering{Roman}
\cfoot{Page\ \thepage\ of\ \totalpages{Roman}}
...
part 2:
\pagenumbering{arabic}
\cfoot{Page\ \thepage\ of\ \totalpages{arabic}}
...
part 3: \pagenumbering{Alpha}
\cfoot{Page\ \thepage\ of\ \totalpages{Alpha}}
...
\end{document}

答案1

编辑:我添加了一个替代解决方案(目前已被注释掉),它提供Page A of 4而不是Page A of D。但是,它需要一些技巧,使用 LaTeX 内部结构。

这是一个带有额外宏 的解决方案\changepagenumbering。这会记住前一个块的最后一个页码并将其放在标签中。它还会执行\newpage,因为在页面中间更改页码没有意义。也许没有这个 也可以工作\newpage。然后我使用\pageref来获取这个数字\totalpages。您将需要至少一次额外的 LaTeX 运行才能获得正确的数字。

\documentclass{article}
\usepackage{geometry,fancyhdr}
\pagestyle{fancy}\fancyhf{}
\usepackage{lipsum}

% Start a new page numbering scheme. Remember the number of pages of the
% previous scheme and start a new page (changing page numbering mid-page
% doesn't make sense)
%
\newcommand\previousnumbering{}
\newcommand\changepagenumbering[1]{%
  \label{last-pagenumber-of-\previousnumbering}%
  \newpage
  \renewcommand\previousnumbering{#1}%
  \pagenumbering{#1}%
}
\newcommand\totalpages[1]{\pageref{last-pagenumber-of-#1}}

% If you want the number of pages in decimal use this instead of the above:

% \newcommand\mypagecount{\arabic{page}}
% \makeatletter
% \newcommand\mylabel[1]{\@bsphack
%   \protected@write\@auxout{\let\mypagecount\relax}%
%          {\string\newlabel{#1}{{\@currentlabel}{\mypagecount}}}%
%   \@esphack}
% \makeatother
% \newcommand\previousnumbering{}
% \newcommand\changepagenumbering[1]{%
%   \mylabel{last-pagenumber-of-\previousnumbering}%
%   \newpage
%   \renewcommand\previousnumbering{#1}%
%   \pagenumbering{#1}%
% }
% \newcommand\totalpages[1]{\pageref{last-pagenumber-of-#1}}

\begin{document}
\changepagenumbering{Roman}
\cfoot{Page\ \thepage\ of\ \totalpages{Roman}}
\section{part 1}

\lipsum

\changepagenumbering{arabic}
\cfoot{Page\ \thepage\ of\ \totalpages{arabic}}
\section{part 2}

\lipsum[1-40]

\changepagenumbering{Alph}
\cfoot{Page\ \thepage\ of\ \totalpages{Alph}}
\section{part 3}

\lipsum[10-30]

% end with a dummy one
\changepagenumbering{arabic}
\end{document}

在此处输入图片描述

相关内容