只对包含的文件执行 setcounter

只对包含的文件执行 setcounter

我目前的情况如下:我在主文件中包含一个 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}

在此处输入图片描述

相关内容