序言页数

序言页数

我曾尝试使用页数作为包的一个选项:

\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}

这里需要注意以下几点:

  1. page计数器与其他计数器的不同之处在于它被初始化为 1。

  2. Adobe 使用基于零的页面计数器。这与上面的 (1) 一起,需要存储计数器的page减 2。这也是为什么我在文档本身内添加显示页码的原因(纯粹是为了美观)。

  3. 许多 PDF 文档属性设置仅适用于 Adob​​e 相关产品。

答案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}

这是一个好方法吗?

相关内容