当文档超过页面长度时产生错误

当文档超过页面长度时产生错误

我尝试在文档超出设置的页面限制时产生致命错误。我认为我的 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}

在此处输入图片描述

相关内容