![第1章。](https://linux22.com/image/259691/%E7%AC%AC1%E7%AB%A0%E3%80%82.png)
我想更改每章定理的编号方案。这是因为我的章节有大有小。大章节需要子节才能正确构建,所以我的定理在子节内编号。对于小章节,不会有任何子节,所以我想在章节内对我的定理进行编号。(这意味着少一个数字)。
我想要实现的目标是:
第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}