如何根据文档类别配置定理?

如何根据文档类别配置定理?

我希望有 \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),则按节编号定理,否则按章编号。此方法也适用于例如类reportKOMA-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}

相关内容