我曾尝试使用页数作为包的一个选项:
\documentclass{article}
\usepackage{lipsum}
\usepackage{lastpage}
\usepackage{refcount}
\newcounter{mylastpage}
\setcounterpageref{mylastpage}{LastPage}
%\usepackage[\themylastpage]{package}
\begin{document}
\themylastpage
\setcounterpageref{mylastpage}{LastPage}
\themylastpage
\lipsum[1-100]
\end{document}
但是,\setcounterpageref
似乎只在文档中有效,之前无效。我还能做什么?我想实现的是:
\hypersetup{pdfprintpagerange=2 \themylastpage}
这将默认跳过打印文档的前两页;我知道我必须适应\themylastpage
编号样式或基于 0 的计数,但首先要做的事情是......
答案1
您可以在文档末尾将页数写入文件。这样,您可以在页面加载期间读取它(如果存在)并相应地设置内容:
\documentclass{article}
\usepackage{lipsum}
\usepackage{atveryend}
\usepackage{hyperref}
\AtVeryEndDocument{%
\newwrite\pagesfile% Create new write file
\immediate\openout\pagesfile=\jobname.pages
\immediate\write\pagesfile{% Write...
\noexpand\newcounter{totalpages}% ...counter creation and...
\noexpand\setcounter{totalpages}{\number\numexpr\value{page}-2}}% ...number of pages setting
\immediate\closeout\pagesfile% Close file
}
% If the file already exists, read it in and set pdfprintpagerange
\InputIfFileExists{\jobname.pages}
{\hypersetup{pdfprintpagerange=2 \thetotalpages}}
{}
\begin{document}
Total pages: \ifcsname thetotalpages\endcsname
\number\numexpr\value{totalpages}+1\relax
\fi
\sloppy% Just for this example
\lipsum[1-100]
\end{document}
\jobname.pages
上述创建的文件应包含
\newcounter {totalpages} \setcounter {totalpages}{18}
这里需要注意以下几点:
该
page
计数器与其他计数器的不同之处在于它被初始化为 1。Adobe 使用基于零的页面计数器。这与上面的 (1) 一起,需要存储计数器的
page
值减 2。这也是为什么我在文档本身内添加显示页码的原因(纯粹是为了美观)。许多 PDF 文档属性设置仅适用于 Adobe 相关产品。
答案2
这最终起作用了:
\documentclass{article}
\usepackage{hyperref}
\usepackage{lipsum}
% this is the solution
\usepackage{lastpage,refcount,totcount}
\newtotcounter{totlastpage}
\hypersetup{pdfprintpagerange=2 \the\totvalue{totlastpage}}
\AtBeginDocument{
\setcounterpageref{totlastpage}{LastPage}
\addtocounter{totlastpage}{-1}
}
\begin{document}
\lipsum[1-100]
\end{document}
这是一个好方法吗?