在多个文件中创建相同的计数器

在多个文件中创建相同的计数器

我正在尝试为一个长期由多人参与的项目创建一个计数器(或者更好的是多个独立计数器)。tex 文件的结构如下

  1. 主文件
  2. 多个子文件可能被包含,也可能不被包含,也可能需要计数器

对于这个例子,我们可以假设有 2 个文件,并且都包含在内并且需要一个计数器。

\documentclass{article}

  %ideally the main should not be altered, but if has to be done 

\begin{document}

 %main file include following text from file 1
Lorem
\newcounter{mycounter}
\setcounter{mycounter}{1}
\themycounter\stepcounter{mycounter}
Ipsum


 %main file include following text from file 2 
Dolor
\newcounter{mycounter}
\setcounter{mycounter}{1}
\themycounter\stepcounter{mycounter}
Sit 
\themycounter\stepcounter{mycounter}
Amet

\end{document}

这将导致错误,因为第二个\newcounter{mycounter}尝试创建已经存在的内容。到目前为止,我尝试过:

  • 将计数器放在主文件中,这可行,但目前是最不理想的解决方案
  • 删除文件末尾的计数器,但没有找到删除计数器的代码。
  • 尝试采用以下解决方案问题,但失败了,因为我不明白它是如何@工作的

    \newcommand\andrea@test@count[1]{%
    \@ifundefined{c@#1}
     {% the counter doesn't exist
     \newcounter{#1}\setcounter{#1}{1}%
    }
    {% the counter exists
     \stepcounter{#1}%
    }%
    }
    

有人知道如何在每个文件中创建计数器吗?还有一个小问题,有没有比这更简单的方法来增加和使用计数器\themycounter\stepcounter{mycounter}

谢谢

答案1

像这样吗?

这使用了一个经过修改的\include- 宏,在其前面加上一个测试,判断计数器是否已定义,并据此进行定义。最后,计数器宏\c@mycounter为“未定义”。

可以使用来完成前置添加\g@addto@macro,但是除了将其包装在宏中之外,没有其他简单的方法可以将某些内容放在宏的末尾,这基本上是在这里完成的。

该宏\showstepcounter用于显示计数器值并随后对其进行步进。

fileone.tex和的代码filetwo.tex相等

fileone.tex

Lorem

\showstepcounter{mycounter}


Ipsum

Main document:

\include修改后的代码\showstepcounter应放在单独的.sty文件中,以便所有需要此特定结构的用户都可以使用。

\documentclass{article}



\makeatletter
\let\l@tex@@include\include

\renewcommand{\include}[1]{%
  \@ifundefined{c@mycounter}{%
    \newcounter{mycounter}%
    \setcounter{mycounter}{1}%
  }{%
    \setcounter{mycounter}{1}%
  }
  \l@tex@@include{#1}%
  \let\c@mycounter\relax
}

\makeatother

\newcommand{\showstepcounter}[1]{%
  \csname the#1\endcsname\stepcounter{#1}%
}



\begin{document}

\include{fileone}

\include{filetwo}

\end{document}

相关内容