计数页数和警告

计数页数和警告

如果页数超出某个范围,我想显示一条警告消息。特别是我想计算仅有的\mainmatter和之间的页数\backmatter。但我不知道该怎么做。我在谷歌上搜索后发现这个有用的答案但必须进行调整。具体来说,我想将范围指定为 [10,40](页数介于 10 和 40 之间,含 10 页)、[10,-1](至少 10 页)或 [-1,40](不超过 40 页)。我更喜欢包含边界的范围,但这并不重要。此外,我想排除空白页。在警告中显示当前页数会很有用。

答案1

您需要重新定义\cleardoublepage\backmatter。我还定义了一个计数器来处理跳过的页面。如果没有\backmatter,则任务“在最后”执行。在每种情况下,我们都需要从页码中减去 1,因为页面计数器已经步进。

\documentclass[a4paper]{book}
\usepackage{atveryend}

\usepackage{lipsum}

\makeatletter
\newcommand{\mainpagerange}[2]{%
  \edef\lorenzo@minpages{#1}%
  \edef\lorenzo@maxpages{#2}%
}
\newif\iflorenzo@backmatter

\renewcommand{\backmatter}{%
  \lorenzo@backmattertrue
  \if@openright
    \cleardoublepage
  \else
    \clearpage
  \fi
  \lorenzo@check
  \@mainmatterfalse
}
% in case there is no \backmatter
\AtVeryEndDocument{%
  \iflorenzo@backmatter
  \else
    \lorenzo@check
  \fi
}

\newcounter{lorenzo@skippage}
\renewcommand{\cleardoublepage}{%
  \clearpage
  \if@twoside
    \ifodd\c@page
    \else
      \stepcounter{lorenzo@skippage}%
      \hbox{}\newpage
      \if@twocolumn
        \hbox{}\newpage
      \fi
    \fi
  \fi
}

\newcommand{\lorenzo@check}{%
  \edef\lorenzo@pages{\the\numexpr\value{page}-\value{lorenzo@skippage}-1\relax}%
  \ifnum\lorenzo@pages<\lorenzo@minpages
    \lorenzo@warning{less}{\lorenzo@minpages}%
  \fi
  \ifnum\lorenzo@maxpages<0
  \else
    \ifnum\lorenzo@pages>\lorenzo@maxpages
      \lorenzo@warning{more}{\lorenzo@maxpages}%
    \fi
  \fi
}

\newcommand{\lorenzo@warning}[2]{%
  \@latex@warning@no@line{you have #1 than #2 pages}%
}

\makeatother

\mainpagerange{10}{40}

\begin{document}

\mainmatter

% this generates pages 1 and 2 (blank)
\chapter{Test 1}\lipsum[1]

% this generates pages from 3 to 10 (no blank)
\chapter{Test 2}\lipsum[1-40]

% this generates pages from 11 to 41
\chapter{Test 3}\lipsum[1-100]\lipsum[1-81]

% this generates page 43 (and blank 44 with \backmatter)
\chapter{Test 4}\lipsum[1]

%\backmatter

\end{document}

尝试各种组合。在这种情况下,我得到了

LaTeX Warning: WARNING: you have more than 40 pages.

如果我删除最后一章,则不会发出任何警告,尽管总页数是 41 页(第一章的第二页是空白的)。

你可能想做

\renewcommand{\cleardoublepage}{%
  \clearpage
  \if@twoside
    \ifodd\c@page
    \else
      \stepcounter{lorenzo@skippage}%
      \hbox{}%
      \thispagestyle{empty}%
      \newpage
      \if@twocolumn
        \hbox{}\newpage
      \fi
    \fi
  \fi
}

以便拥有真正空白的页面。

相关内容