我正在尝试创建一个新的计数器,用于计算页码以存储它们并在以后重复使用。我总是删除文档开头未编号的 3 页,然后将此值添加到我\CurrPage
的计数器中。到目前为止,我已经设法使用从 Roman 中提取页码zref
,但无法将此值添加到我的计数器中。
\documentclass[a4paper, fontsize = 12pt,headsepline]{scrartcl}
% Page Numbering Roman
\pagenumbering{Roman}
\usepackage{lipsum}
\usepackage{calc}
\usepackage[abspage,user,lastpage]{zref}
\makeatletter
\newcommand*{\CurrPage}{%
\zlabel{page.num}
\number\numexpr
\zref@extract{page.num}{abspage}%
-3%
\relax
}
\makeatother
\begin{document}
% Counter Definition Framework
\newcounter{Page.Num.Framework}
\lipsum[1-25]
Current Page Num: {\CurrPage}
%\addtocounter{Page.Num.Framework}{\CurrPage}
\end{document}
如果取消注释,\addtocounter
命令将返回错误:
Missing number, treated as zero. \addtocounter{Page.Num.Framework}{\CurrPage}
答案1
您有两个问题:一个是一般问题,另一个是使用问题calc
。
首先是一般方法:\CurrPage
首先扩展为设置标签,然后使用标签生成的值。设置标签不是数字,因此添加\zlabel{…}
到计数器总是会失败。这个问题可以通过简单的更改来解决\CurrPage
:
\newcommand*{\CurrPage}{%
\number\numexpr
\zref@extract{page.num}{abspage}%
-3%
\relax
\zlabel{page.num}%
}
现在,\CurrPage
首先得到一个数字,然后生成一个标签。使用这个:
\documentclass[a4paper, fontsize = 12pt,headsepline]{scrartcl}
% Page Numbering Roman
\pagenumbering{Roman}
\usepackage{lipsum}
%\usepackage{calc}
\usepackage[abspage,user,lastpage]{zref}
\makeatletter
\newcommand*{\CurrPage}{%
\number\numexpr
\zref@extract{page.num}{abspage}%
-3%
\relax
\zlabel{page.num}%
}
\makeatother
\begin{document}
% Counter Definition Framework
\newcounter{Page.Num.Framework}
\lipsum[1-25]
Current Page Num: {\CurrPage}
Before: \arabic{Page.Num.Framework}
\addtocounter{Page.Num.Framework}{\CurrPage}
After: \arabic{Page.Num.Framework}
\end{document}
可以工作(但仍然很丑)。
使用的特殊问题calc
是,calc
允许在包中进行计算,\addtocounter
并且的参数\addtocounter
必须是数字表达式,而没有不扩展为数字的命令。所以
\documentclass[a4paper, fontsize = 12pt,headsepline]{scrartcl}
% Page Numbering Roman
\pagenumbering{Roman}
\usepackage{lipsum}
\usepackage{calc}
\usepackage[abspage,user,lastpage]{zref}
\makeatletter
\newcommand*{\CurrPage}{%
\number\numexpr
\zref@extract{page.num}{abspage}%
-3%
\relax
\zlabel{page.num}%
}
\makeatother
\begin{document}
% Counter Definition Framework
\newcounter{Page.Num.Framework}
\lipsum[1-25]
Current Page Num: {\CurrPage}
Before: \arabic{Page.Num.Framework}
\addtocounter{Page.Num.Framework}{\CurrPage}
After: \arabic{Page.Num.Framework}
\end{document}
仍然失败,您必须拆分\CurrPage
标签生成和标签使用:
\documentclass[a4paper, fontsize = 12pt,headsepline]{scrartcl}
% Page Numbering Roman
\pagenumbering{Roman}
\usepackage{lipsum}
\usepackage{calc}
\usepackage[abspage,user,lastpage]{zref}
\makeatletter
\newcommand*{\StoreCurrPage}{\zlabel{page.num}}
\newcommand*{\UseCurrPage}{%
\numexpr
\zref@extract{page.num}{abspage}%
-3%
\relax
}
\makeatother
\begin{document}
% Counter Definition Framework
\newcounter{Page.Num.Framework}
\lipsum[1-25]
Before: \arabic{Page.Num.Framework}
\StoreCurrPage\addtocounter{Page.Num.Framework}{\UseCurrPage}
After: \arabic{Page.Num.Framework}
\end{document}