如何实现 \input 当前深度的计数器

如何实现 \input 当前深度的计数器

假设first.tex包含\input{second.tex}并且second.tex包含\input{third.tex}

我希望有一个自动化输入深度计数器其值0在使用时为 inside first.tex1insidesecond.tex2inside third.tex。使用时应增加\input,输入完成后应减少。

我该如何实现它?

答案1

尝试这样做:

\documentclass{article}
\usepackage{mathtools}
\usepackage{pifont} 
\usepackage{bbding}
\usepackage{wasysym}
\newcounter{InputDepth}

\let\oldinput\input
\def\input#1{\stepcounter{InputDepth}\oldinput{#1}\addtocounter{InputDepth}{-1}}
\begin{document}
\theInputDepth

\input{first}

\theInputDepth

\input{second}

\theInputDepth

\end{document}

first.tex

\theInputDepth

second.tex

\theInputDepth

\input{third}

third.tex

\theInputDepth

输出:

在此处输入图片描述

答案2

如果您有最新版本(2020-10-01 之后)的 LaTeX,则可以使用新的钩子机制。

\begin{filecontents*}{\jobname-first}
This is first: \theinputdepth

\input{\jobname-second}

Again: \theinputdepth
\end{filecontents*}

\begin{filecontents*}{\jobname-second}
This is second: \theinputdepth

\input{\jobname-third}

Again: \theinputdepth
\end{filecontents*}

\begin{filecontents*}{\jobname-third}
This is third: \theinputdepth
\end{filecontents*}

\documentclass{article}

\newcounter{inputdepth}

\AtBeginDocument{%
  \AddToHook{file/before}{\addtocounter{inputdepth}{1}}%
  \AddToHook{file/after}{\addtocounter{inputdepth}{-1}}%
}

\begin{document}

This is main: \theinputdepth

\input{\jobname-first}

Again: \theinputdepth

\end{document}

在此处输入图片描述

在文档开头设置钩子是为了避免计数器的虚假设置。不过,这没什么大不了的,您可以在前言中设置钩子;计数器会有其他设置,但在文档开头状态将为 0。

相关内容