语境:在个人课程中(针对双面文档),我想geometry
根据总页数将布局区域平移到内边距或外边距(感谢包的设置)。
为了获取总页数,我使用了\zref@extractdefault{LastPage}{page}{0}
fromzref-lastpage
包。不幸的是,正如以下 MWE 所指出的那样:
\zref@extractdefault{LastPage}{page}{0}
只有在(比较文件和文档中的\begin{document}
总页码)后才能给出正确的数字,.log
\geometry
设置必须在序言中完成。
我想知道是否有办法即使在序言中也能获得正确的总页数。
\begin{filecontents*}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}
%
\RequirePackage{zref-lastpage}
\RequirePackage[letterpaper]{geometry}
%
\LoadClass{article}
%
\newcommand{\totpagenumber}{%
This document has
\zref@extractdefault{LastPage}{page}{0}
pages.
}
\message{^^J\totpagenumber^^J^^J}
%
\ifnum\zref@extractdefault{LastPage}{page}{0}<10
\geometry{%
inner=10mm,
outer=35mm
}
\else
\geometry{%
inner=15mm,
outer=30mm,
}
\fi
\end{filecontents*}
%
\documentclass{myclass}
\usepackage{mwe}
\begin{document}
\totpagenumber
\lipsum[1-15]
\end{document}
答案1
文件.aux
是在 中读取的,因此前言中所有基于标签的引用均不可用。但是,可以通过包\begin{document}
导入标签:\zexternaldocument
zref-xr
\RequirePackage{zref-xr}
\zexternaldocument[self]{\jobname}
\edef\selftotpages{\zref@extractdefault{internLastPage}{abspage}{0}}
然后\selftotpages
序言中已经包含了前一次 LaTeX 运行的页数(或零)。
完整示例:
\RequirePackage{filecontents}
\begin{filecontents*}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}
%
\RequirePackage{zref-totpages, zref-xr}
\RequirePackage[letterpaper]{geometry}
%
\LoadClass{article}
\zexternaldocument[self]{\jobname}
\edef\selftotpages{\zref@extractdefault{selfLastPage}{abspage}{0}}
\newcommand{\totpagenumber}{%
This document has
\ifcase\selftotpages\space
no (not yet) pages.%
\or
1 page.%
\else
\selftotpages\space pages.
\fi
}
\message{^^J\totpagenumber^^J^^J}
%
\ifnum\selftotpages<10
\geometry{%
inner=10mm,
outer=35mm
}
\else
\geometry{%
inner=15mm,
outer=30mm,
}
\fi
\end{filecontents*}
%
\documentclass{myclass}
\usepackage{lipsum}
\begin{document}
\totpagenumber
\lipsum[1-15]
\end{document}