第1章。

第1章。

我想更改每章定理的编号方案。这是因为我的章节有大有小。大章节需要子节才能正确构建,所以我的定理在子节内编号。对于小章节,不会有任何子节,所以我想在章节内对我的定理进行编号。(这意味着少一个数字)。

我想要实现的目标是:

第1章。

第 1.1 节。

1.1.1 小节。

定理1.1.1.1。
定理 1.1.1.2。

第2章。

第 2.1 节。

定理 2.1.1。
定理 2.1.2。

我怎样才能做到这一点?

MWE:(随意随机化章节标题和定理正文)

\documentclass{book}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}[subsection]
\begin{document}
\chapter{}
\section{}
\subsection{}
\begin{theorem}\end{theorem}
\chapter{}
\section{}
\begin{theorem}\end{theorem}
\begin{theorem}\end{theorem}
\end{document}

注意:egreg 的答案包含一个包含他给我的 hack 的版本这里

答案1

如果全部类定理环境共享此编号系统,则以下内容应该有效。每个\snewtheorem声明都定义定理类环境和另一个环境;如果计数器值为正值,则选择与“子节”相关的定理类环境\subsection。因此,所有定理都应该在节或子节下陈述,但这似乎是您所需要的。

\documentclass{book}
\usepackage{amsthm,xparse}
\NewDocumentCommand{\snewtheorem}{m o m}
 {
  \IfNoValueTF{#2}
   {
    \newtheorem{sec#1}{#3}[section]
    \newtheorem{subsec#1}{#3}[subsection]
   }
   {
    \newtheorem{sec#1}[sec#2]{#3}
    \newtheorem{subsec#1}[subsec#2]{#3}
   }
  \newenvironment{#1}
   {\ifnum\value{subsection}>0
      \csname subsec#1\expandafter\endcsname
    \else
      \csname sec#1\expandafter\endcsname
    \fi}
   {\ifnum\value{subsection}>0 
      \csname endsubsec#1\expandafter\endcsname
    \else
      \csname endsec#1\expandafter\endcsname
    \fi}
}

\snewtheorem{thm}{Theorem}
\snewtheorem{lem}[thm]{Lemma}

\begin{document}
\mainmatter
\chapter{Long}
\section{First}
\subsection{A}
\begin{lem}[Big]\label{insubsec}
This is a big lemma.
\end{lem}

\begin{thm}[Big]
This is a big theorem.
\end{thm}

\subsection{B}
\begin{lem}
This is a lemma.
\end{lem}

\begin{thm}
This is a theorem.
\end{thm}

\chapter{Short}
\section{First}
\begin{lem}[Big]
This is a big lemma.
\end{lem}

\begin{thm}[Big]\label{insec}
This is a big theorem.
\end{thm}

\section{Second}
\begin{lem}
This is a theorem.
\end{lem}

\begin{thm}
This is a theorem.
\end{thm}

\ref{insubsec}

\ref{insec}

\end{document}

\xnewtheorem我之前针对您提出的关于支持的问题定义的扩展hyperref\autoref可以是这样的。

\documentclass{book}

\usepackage{amsthm,xparse,aliascnt,hyperref,bookmark}

\NewDocumentCommand{\xnewtheorem}{m o m}
 {%
  \IfNoValueTF{#2}
   {%
    \newtheorem{sec#1}{#3}[section]%
    \newtheorem{subsec#1}{#3}[subsection]%
   }
   {%
    \newaliascnt{sec#1}{sec#2}%
    \newtheorem{sec#1}[sec#1]{#3}%
    \aliascntresetthe{sec#1}%
    \newaliascnt{subsec#1}{subsec#2}%
    \newtheorem{subsec#1}[subsec#1]{#3}%
    \aliascntresetthe{subsec#1}%
   }
  \expandafter\newcommand\csname sec#1autorefname\endcsname{#3}%
  \expandafter\newcommand\csname subsec#1autorefname\endcsname{#3}%
  \newenvironment{#1}
   {\ifnum\value{subsection}>0
      \csname subsec#1\expandafter\endcsname
    \else
      \csname sec#1\expandafter\endcsname
    \fi}
   {\ifnum\value{subsection}>0 
      \csname endsubsec#1\expandafter\endcsname
    \else
      \csname endsec#1\expandafter\endcsname
    \fi}
 }

\xnewtheorem{thm}{Theorem}
\xnewtheorem{lem}[thm]{Lemma}

\begin{document}
\mainmatter
\chapter{Long}
\section{First}
\subsection{A}
\begin{lem}[Big]\label{insubsec}
This is a big lemma.
\end{lem}

\begin{thm}[Big]
This is a big theorem.
\end{thm}

\subsection{B}
\begin{lem}
This is a lemma.
\end{lem}

\begin{thm}
This is a theorem.
\end{thm}

\chapter{Short}
\section{First}
\begin{lem}[Big]
This is a big lemma.
\end{lem}

\begin{thm}[Big]\label{insec}
This is a big theorem.
\end{thm}

\section{Second}
\begin{lem}
This is a theorem.
\end{lem}

\begin{thm}
This is a theorem.
\end{thm}

\autoref{insubsec}

\autoref{insec}

\end{document}

在此处输入图片描述

相关内容