我正在尝试为一个长期由多人参与的项目创建一个计数器(或者更好的是多个独立计数器)。tex 文件的结构如下
- 主文件
- 多个子文件可能被包含,也可能不被包含,也可能需要计数器
对于这个例子,我们可以假设有 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}