我目前的情况如下:我在主文件中包含一个 Latex 文件。此文件已有几个\section{}
部分。现在我想让它们的计数1
重新开始,但不要弄乱主文件中的全局计数。我尝试了以下方法:
\subsection{First}
\setcounter{section}{0}
\input{first_file}
\subsection{Second}
\setcounter{section}{0}
\input{second_file}
这对于重置计数器有用,但这也会弄乱我的全局计数。有没有办法重置计数器而不弄乱全局文档?我不想更改包含的文件,最好有一个可移植的解决方案。
编辑:搞砸的解释:我得到的是:
1
2
3
\begin{input}
1
2
\end{input}
3
4
5
我想要的是:
1
2
3
\begin{input}
1
2
\end{input}
4
5
6
答案1
定义一个辅助计数器,用于临时存储节号。
然后用于\inputreset{file}
输入您想要重置方程编号的文件。
然而,你将拥有大的当您尝试加载时出现问题hyperref
。
\newcounter{storedsection}
\newcommand{\inputreset}[1]{%
\setcounter{storedsection}{\value{section}}%
\setcounter{section}{0}%
\input{#1}%
\setcounter{section}{\value{storedsection}}%
}
答案2
这会使用一个临时计数器来存储第一个计数器\input
使用前的区段计数器值。此外,\input
命令会更改为\refstepcounter
输入计数器,然后section
依次重置计数器。
编辑自动 存储 第一 部分 计数器 的 值\input
.
缺点:每次\input
使用 if 时,部分计数器都会重置。如果这是个问题,可以在某个阈值之后删除重置。
\documentclass{article}
\usepackage{etoolbox}
\usepackage{xpatch}
\usepackage[hypertexnames=false]{hyperref}
\newcounter{inputfilecounter}
\newcounter{storesection}
\xpretocmd{\input}{%
\ifnumequal{\value{inputfilecounter}}{0}{%
\setcounter{storesection}{\value{section}}%
}{}%
\refstepcounter{inputfilecounter}
}{}{}
\newcommand{\RestoreSectionCounter}{%
\setcounter{section}{\value{storesection}}%
}
\makeatletter
\@addtoreset{section}{inputfilecounter}
\makeatother
\begin{document}
\tableofcontents
\section{Regular}
\clearpage
\input{firstfile}
\clearpage
\input{secondfile}
\RestoreSectionCounter
\clearpage
\section{Continued regular sections}
\end{document}