我对多个文档使用同一个宏文件,并且我希望它们的定理以不同的方式编号——一个按章节编号,另一个按子章节编号。我尝试使用 etoolbox 中的 iftoggle 来实现这一点,如下所示。
宏.sty:
\usepackage{etoolbox}
\newtoggle{sub}
\newtheorem{theorem}{Theorem}[\iftoggle{sub}{subsection}{section}]
doc1.tex:
\usepackage{macros}
\togglefalse{sub}
\begin{theorem} theorem text \end{theorem}
doc2.tex:
\usepackage{macros}
\toggletrue{sub}
\begin{theorem} theorem text \end{theorem}
不幸的是,这两个文档中都按节对定理进行了编号。我猜想,在定义定理环境之前必须设置切换(尽管其他宏的定义涉及 iftoggle 的情况并非如此)。事实上,我发现了以下解决这个问题的非理想方法。
宏.sty:
\newtheorem{theorem}{Theorem}[\iftoggle{sub}{subsection}{section}]
doc1.tex:
\usepackage{etoolbox}
\newtoggle{sub}
\togglefalse{sub}
\usepackage{macros}
\begin{theorem} theorem text \end{theorem}
doc2.tex:
\usepackage{etoolbox}
\newtoggle{sub}
\toggletrue{sub}
\usepackage{macros}
\begin{theorem} theorem text \end{theorem}
我觉得这不是理想的,因为我希望整个解决方案都包含在样式文件中,而不需要在每个新文档的开头添加额外的代码。有人能建议一个解决这个问题的可靠方法吗?
答案1
\newtheorem
为了添加正确的计数器名称,尾随的可选参数会立即扩展。
您可以在开始文档时推迟类定理环境的定义,此时切换的值是已知的。
.sty
文件骨架
\RequirePackage{etoolbox,amsthm}
\newtoggle{sub}
\AtBeginDocument{
\newtheorem{theorem}{Theorem}[\iftoggle{sub}{subsection}{section}]
}
示例文档
\documentclass{article}
\usepackage{aaron}
\toggletrue{sub}
\begin{document}
\section{Section}
\subsection{Subsection}
\begin{theorem}
Theorem
\end{theorem}
\end{document}