假设first.tex
包含\input{second.tex}
并且second.tex
包含\input{third.tex}
。
我希望有一个自动化输入深度计数器其值0
在使用时为 inside first.tex
、1
insidesecond.tex
和2
inside 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。