我尝试在文档超出设置的页面限制时产生致命错误。我认为我的 if 语句存在一些问题,因为尽管文档超出了限制,但没有错误。想法是获取文档的最后一页并执行一个简单的 if 语句:如果 lastpage > pagelimit,则产生错误。我还添加了一个包longdocument
选项
以下是 MWE:
\documentclass[a4paper]{article}
\begin{filecontents}[overwrite]{mypackage.sty}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mypackage}
\newif\if@longdoc
\DeclareOption{longdocument}{\@longdoctrue}
\DeclareOption*{\PackageWarning{mypackage}{No option ‘\CurrentOption’}}
\ProcessOptions\relax
\usepackage{refcount}
\usepackage{lipsum}
\newcounter{pagelimit}
\setcounter{pagelimit}{2}
\newcommand*{\thelastpage}{%
\the\numexpr(\getrefbykeydefault{LastPage}{page}{0})\relax
}
\RequirePackage{lastpage}
\if@longdoc
\else
\ExplSyntaxOn
\msg_new:nnnn {mypackage}{pagenumber}{Document~has~too~many~pages!}{Reduce~number~of~pages~or~use~another~package}
\int_compare:nNnTF {\thelastpage} > {\thepagelimit}
{ \msg_fatal:nn {mypackage}{pagenumber} }
{}
\ExplSyntaxOff
\fi
\endinput
\end{filecontents}
\usepackage{mypackage}
\usepackage{lipsum}
\begin{document}
\lipsum
\newpage
\lipsum
\end{document}
我还考虑过检查每页是否超出页数限制,然后只输出低于限制的页面。但是,我认为这会占用一些计算资源(?)。
有没有办法只输出到页面\thepagelimit
而忽略其余部分?
答案1
这可能不是最好的方法,但我找到了一种解决方案,即fancyhdr
在每个页面的开头使用并添加一些代码。
\documentclass[a4paper]{article}
\begin{filecontents}[overwrite]{mypackage.sty}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mypackage}
\newif\if@longdoc
\DeclareOption{longdocument}{\@longdoctrue}
\DeclareOption*{\PackageWarning{mypackage}{No option ‘\CurrentOption’}}
\ProcessOptions\relax
\usepackage{fancyhdr}
\usepackage{lipsum}
\newcounter{pagelimit}
\setcounter{pagelimit}{2}
\newcommand*{\thelastpage}{%
\the\numexpr(\getrefbykeydefault{LastPage}{page}{0})\relax
}
\RequirePackage{lastpage}
\if@longdoc
\else
\ExplSyntaxOn
\msg_new:nnnn {mypackage}{pagenumber}{Document~has~too~many~pages!}{Reduce~number~of~pages~or~use~another~package}
\fancypagestyle{limit}{
\renewcommand{\headrulewidth}{0pt}
\fancyhead{
\ifnum\value{page}>\thepagelimit
{ \msg_fatal:nn {mypackage}{pagenumber} }
{}
\fi}}
\ExplSyntaxOff
\fi
\endinput
\end{filecontents}
\usepackage{mypackage}
\usepackage{lipsum}
\pagestyle{limit}
\begin{document}
\lipsum
\newpage
\lipsum
\end{document}