拥有具有不同页码的文档:罗马字母(i、ii 等)和阿拉伯字母(1、2 等)以及设置页码的章节\setcounter{page}{1}
。
尽管有编号,如何获取“真实/实际”页码?
在以下示例中,我们有两个罗马数字页面和两个各 2 页的章节。这是 6 个“实际/实际”页面。
i -> 1
ii -> 2
1 -> 3
2 -> 4
1 -> 5
2 -> 6
更新 根据要求,MWE:
\documentclass{book}
\usepackage{lipsum}
\let\oldchapter\chapter
\renewcommand{\chapter}[1]{
\oldchapter{#1}
\par\noindent Page:~ \thepage
\par\noindent Absolute:~ ??? % <- here I need the real/actual page
}
\begin{document}
\frontmatter
\chapter{Primus}
\par\lipsum
\chapter{Secundus}
\par\lipsum
\mainmatter
\chapter{First}
\par\lipsum
\chapter{Second}
\par\lipsum
\end{document}
答案1
请注意,由于异步分页,文本正文中的页数计数器(\thepage 和 totalpages)并不总是可靠的。直接放在 \chapter 后面应该可以工作。
\documentclass{book}
\usepackage{lipsum}
\let\oldchapter\chapter
\renewcommand{\chapter}[1]{
\oldchapter{#1}
\par\noindent Page:~ \thepage
\par\noindent Absolute:~ \inteval{\value{totalpages}+1} % <- here I need the real/actual page
}
\begin{document}
\frontmatter
\chapter{Primus}
\par\lipsum
\chapter{Secundus}
\par\lipsum
\mainmatter
\chapter{First}
\par\lipsum
\chapter{Second}
\par\lipsum
\end{document}
答案2
在 OpTeX 中,我们可以使用。请注意,由于异步分页,文本正文中的\gpageno
页码计数器(\pageno
和)并不总是可靠的。直接在它后面应该可以工作。\gpageno
\chap
\def\lipsum{\lorem[1-12]}
\let\printchap_ori=\_printchap
\def\_printchap#1{%
\printchap_ori{#1}
\par\noindent Page:~\folio
\par\noindent Absolute:~\the\numexpr\gpageno+1\relax
\par
}
\pageno=-1
\nonum\chap Primus
\lipsum
\nonum\chap Secundus
\lipsum
\vfil\break \pageno=1
\chap First
\lipsum
\chap Second
\lipsum
\bye
答案3
您想要添加钩子\mainmatter
并\chapter
在辅助文件中添加注释。
\documentclass{book}
\usepackage[a6paper]{geometry} % just to get smaller pictures
\usepackage{lipsum}
\newwrite\qpdfcommands
\immediate\openout\qpdfcommands=\jobname-qpdf.commands
\newcommand{\getlastpagenumber}{%
\inteval{\value{page}\ifodd\value{page}+1\fi}%
}
\AddToHook{cmd/mainmatter/before}{%
\xdef\pagesinthefrontmatter{\getlastpagenumber}
}
\AddToHook{cmd/chapter/before}{%
\ifnum\value{chapter}>0
\immediate\write\qpdfcommands{%
qpdf --empty --pages \jobname.pdf
\inteval{\firstpageofprevious+\pagesinthefrontmatter}-%
\inteval{\getlastpagenumber+\pagesinthefrontmatter}
-- \jobname-\arabic{chapter}.pdf%
}%
\xdef\firstpageofprevious{\inteval{\getlastpagenumber+1}}%
\else
\gdef\firstpageofprevious{1}%
\fi
}
\AtEndDocument{%
\immediate\write\qpdfcommands{%
qpdf --empty --pages \jobname.pdf
\inteval{\firstpageofprevious+\pagesinthefrontmatter}-z
-- \jobname-\arabic{chapter}.pdf%
}%
\immediate\closeout\qpdfcommands
}
\begin{document}
\huge
\frontmatter
This is page \thepage
\clearpage
This is page \thepage
\clearpage
This is page \thepage
\mainmatter
\chapter{First}
\lipsum[1-10]
\chapter{Second}
\lipsum[11-30]
\chapter{Third}
\lipsum[31-60]
\end{document}
尝试一下,你会发现写入的文件将包含
qpdf --empty --pages qpex.pdf 5-28 -- qpex-1.pdf
qpdf --empty --pages qpex.pdf 29-70 -- qpex-2.pdf
qpdf --empty --pages qpex.pdf 71-z -- qpex-3.pdf
我留下来练习如何应对\backmatter
。