我如何才能了解输入材料开始和结束的页数?

我如何才能了解输入材料开始和结束的页数?

有没有办法通过开始和结束来获取包含材料的页数\input?粗略的方法如下

\def\myinput#1{%
\typeout{ Input starts on page \thepage}
\input{#1}
\typeout{ End ends on page \thepage}}

在特殊情况下失败(例如,如果分页符恰好发生在之前或之后\myinput)。

答案1

\documentclass{article}
\usepackage{kantlipsum}
\usepackage{refcount}

\newcounter{SEinput}
\newcommand{\SEinput}[1]{%
  \refstepcounter{SEinput}\label{SE@\arabic{SEinput}@#1-start}%
  \typeout{Input starts on page \getpagerefnumber{SE@\arabic{SEinput}@#1-start}}%
  \input{#1}%
  \refstepcounter{SEinput}\label{SE@\arabic{SEinput}@#1-end}%
  \typeout{Input ends on page
    \number\numexpr\getpagerefnumber{SE@\arabic{SEinput}@#1-end}
      \ifdim\pagegoal=\maxdimen -1\fi\relax}%
}

\begin{document}
\kant
\SEinput{se1}
\SEinput{se2}
\kant
\SEinput{se3}
\end{document}

文件se2.texse3.tex都只包含\kant,而se1.tex包含\kant\clearpage,因此当 TeX 在新页面上时会计算输入的结束(这可以通过进行测试\ifdim\pagegoal=\maxdimen)。

终端上的输出是

[1][2]
Input starts on page 3
(./se1.tex [3] [4] [5])
Input ends on page 5
Input starts on page 6
(./se2.tex) [6] [7]
Input ends on page 8
[8] [9]
Input starts on page 10
(./se3.tex) [10] [11]
Input ends on page 12
[12]

值得注意的是,如您所见,信息已经在文件中了.log

\label由于我们使用-系统,因此需要运行两次才能使信息稳定\ref。它可能无法以各种方式给出正确的数字,但它应该在最常见的情况下有效。

起始页比结束页特别容易出现问题:当你\input打开一个文件时,其中的第一个段落可能会导致 TeX 将其放在一个新页面上,而如果不链接到第一个段落你就不会知道这一点。

相关内容