我是这个论坛的新手,所以我希望以正确的方式写下我的问题。
我有一份分为两部分的文档(这是我多次需要的模型),每部分都以页码 1 开始。然后我必须写入整个文档的总页数。为此,我想使用命令\addtocounter
。以下代码有效:
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\begin{document}
\newcounter{TotPages}
\addtocounter{TotPages}{\pageref{02}}
\addtocounter{TotPages}{\pageref{03}}
\pageref{02}+\pageref{03}=
\arabic{TotPages}
\section{title 01}
\newpage
\section{title 02}
\label{02}
\newpage
\section{title 03}
\label{03}
\end{document}
但是使用[french]
或[francais]
选项[british]
进行babel
打包时,它会写入错误消息
缺失数字,视为零。\addtocounter{TotPages} \pageref{02}}。
例如,下面的代码不起作用:
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[francais]{babel} %only change
\begin{document}
\newcounter{TotPages}
\addtocounter{TotPages}{\pageref{02}}
\addtocounter{TotPages}{\pageref{03}}
\pageref{02}+\pageref{03}=
\arabic{TotPages}
\section{title 01}
\newpage
\section{title 02}
\label{02}
\newpage
\section{title 03}
\label{03}
\end{document}
我知道我可以使用包 calc,但如果可能的话我并不想这样做,因为在整个文档中我只需要这个命令。
有人知道如何解决这个问题吗?非常感谢!
答案1
简短回答为什么\addtocounter
失败\pageref
:
\pageref
不可扩展,无法被“馈送” \addtocounter
——该宏需要一个数字值。
除了这个问题之外,向页面添加参考值并没有给出预期的结果,因为\pageref
出现在第 5 页而另一个出现在第 17 页并不意味着该文档只有 22 页;即使是这种情况,也不要依赖于 ref 值的输出,它也可以是罗马数字或字母。
可能的解决方案:
- 使用该
lastpage
包可以获取最后的页面引用,但如果在此期间重置页码,则此方法不起作用 → 会报告错误值。 - 利用该
xassoccnt
包可以输出其\DeclareTotalAssociatedCounters{page}{totalpages}
页数\TotalValue{totalpages}
——这不受页数计数器重置的影响。 - 使用
\usepackage[perpage,user,lastpage]{zref}
它可以得到总页数\zref[abspage]{LastPage}
。(请不要将 LastPage 标签zref
与包LastPage
中的标签混淆lastpage
——它们属于不同的命名空间)
\getpagerefnumber
这里有一个“微小”的文档,显示了问题,例如,可以使用从中提取可扩展的pageref——refcount
它只是为了显示计数\pageref
在逻辑上是错误的而添加的。
该文件有6页,仅\TotalValue
或\zref[abspage]{LastPage}
报告正确的值。
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{refcount}
\usepackage{lastpage}
\usepackage{blindtext}
\usepackage[francais]{babel} %only change
\usepackage[perpage,user,lastpage]{zref}
\usepackage{xassoccnt}
\DeclareTotalAssociatedCounters{page}{totalpages}
\makeatletter
\pretocmd{\part}{\pagenumbering{arabic}\clearpage}{}{}
\makeatother
\newcounter{TotPages}
\begin{document}
\addtocounter{TotPages}{\getpagerefnumber{02}}
\addtocounter{TotPages}{\getpagerefnumber{03}}
The number of pages in this beautiful document: \TotalValue{totalpages} pages!
whereas \verb!\pageref{Lastpage}! reports \pageref{LastPage} pages!.
With \texttt{zref} you get \zref[abspage]{LastPage} pages!
Values reported with sum up of references: \pageref{02}+\pageref{03}= \arabic{TotPages} pages!
\part{First}
\section{title 01}
\clearpage
\section{title 02}
\label{02}
\clearpage
\blindtext
\part{Second}
\section{title 03} \label{03}
\blindtext[5]
\end{document}