我构建了一篇具有三种页码样式的文章。
- 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}