有没有办法通过开始和结束来获取包含材料的页数\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.tex
和se3.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 将其放在一个新页面上,而如果不链接到第一个段落你就不会知道这一点。