我希望有 \newtheorem{teo}{Teorema}[chapter]
“如果book
类已加载”的信息,但是 \newtheorem{teo}{Teorema}[section]
“如果article
类已加载”的信息。我可以用某种条件来做到这一点吗?
\documentclass{article}
\usepackage{theorem}
\newtheorem{teo}{Teorema}[chapter] %if book
\newtheorem{teo}{Teorema}[section] %if article
\begin{document}
\end{document}
答案1
虽然艾伦指向的链接有所需的信息,但该页面假设您已经了解\makeatletter
/\makeatother
宏,而这取决于经验水平,您可能没有遇到过。
如果使用了除book
或之外的类,则以下内容旨在退出。如果不需要,您可以删除该宏。article
\QUITHERE
\documentclass{book}
\usepackage{theorem}
\makeatletter%
\@ifclassloaded{book}{%
\newtheorem{teo}{Teorema}[chapter]%if book
\typeout{Using book class.}%
}{%
\@ifclassloaded{article}{%
\newtheorem{teo}{Teorema}[section]%if article
\typeout{Using article class.}%
}{%
\typeout{Error: Unsupported class: only 'article' and 'book' are suported.}\QUITHERE
}%
}%
\makeatother%
\begin{document}
\end{document}
答案2
看来您的目的在于使定理编号从属于\part
各自文档类中定义的最高(非)分段级别——\chapter
对于book
类,以及\section
对于article
。因此,我建议不要测试已加载类的名称,而是测试命令的可用性\chapter
。如果此命令未定义(或其含义为\relax
),则按节编号定理,否则按章编号。此方法也适用于例如类report
和KOMA-Script
类。
\documentclass{book}
\usepackage{etoolbox}
\ifundef{\chapter}{%
\newtheorem{teo}{Teorema}[section]% if \chapter not defined
\typeout{Numbering theorems per section.}%
}{%
\newtheorem{teo}{Teorema}[chapter]% if \chapter defined
\typeout{Numbering theorems per chapter.}%
}
\begin{document}
\begin{teo}
A theorem.
\end{teo}
\end{document}