带星号部分的定理编号

带星号部分的定理编号

让我先用 MWE 来说明我的疑问。

\documentclass{book}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}[section]

\begin{document}

\chapter{Some title}

\section{Another title}

 \begin{theorem}
   A nice theorem
 \end{theorem}

\section{Yet another title}

 \begin{theorem}
   Another nice theorem
 \end{theorem}

\section*{Optional section}

 \begin{theorem}
   An optional theorem
 \end{theorem}

\end{document}

由此得出的定理数为

定理 1.1.1

定理 1.2.1

定理 1.2.2。

我想实现的是

定理 1.1.1

定理 1.2.1

定理 1.E.1。

换句话说,我希望计数器重新启动(我认为我可以用 来实现\setcounter),但我希望部分计数器有一个不同的符号,比如 E 表示“额外”。我应该在部分级别通过重新定义 来执行此操作吗\thesection?还是通过修改theorem环境(最好不要)?我应该定义一个新的定理环境吗(最好也不要)?我更喜欢系统解决方案,而不是临时方法(我需要对定理环境的每个实例分别采取行动)。

谢谢大家。

编辑:正如 Andrew 在他的回答中指出的那样,我在问题中输入了错误的定理数字。我现在已经更正了它们,以避免对可能对此问题感兴趣的其他用户产生混淆。

答案1

要使其工作,您需要\thesection在可选部分内重新定义 ,它用作定理环境中计数器的一部分,然后您必须\thesection在这些部分的末尾重置。您可能可以通过一些\patchcmd技巧来做到这一点,但更直接的方法是为可选部分定义一个新的环境,它将为您处理这些更改。这样做,您可以将可选部分编写为

 \begin{section*}{Optional section title}

   \begin{theorem}
     An optional theorem
   \end{theorem}

 \end{section*}

重新排列你的 MWE,以便我们在两个部分之间有一个可选部分,这将产生输出:

在此处输入图片描述

请注意,尽管 OP 说如果要对定理进行编号,定理编号应该是 1.1.1、1.E.2、1.2.3里面节,则如上所述,每次节号更改时,它们都会被重置,给出编号 1.1.1、1.E.1、1.2.1。如果需要编号 1.1.1、1.E.2、1.2.3,则将定义定理环境的行替换为:

\newtheorem{theorem}{Theorem}%[section]
\numberwithin{theorem}{chapter}% needs \usepackage{amsmath}
\renewcommand\thetheorem{\thesection.\arabic{theorem}}

并将其\setcounter{theorem}{0}section*环境中移除。

完整代码如下:

\documentclass{book}
\usepackage{amsthm}
\newenvironment{section*}[1]{% \begin{section*}{section title}....\end{section*}
  \section*{#1}
  \renewcommand\thesection{\thechapter.E}
  \setcounter{theorem}{0}}{}

\newtheorem{theorem}{Theorem}[section]

\begin{document}

\chapter{Some title}

\section{Another title}

 \begin{theorem}
   A nice theorem
 \end{theorem}

 \begin{section*}{Optional section}

   \begin{theorem}
     An optional theorem
   \end{theorem}

 \end{section*}

\section{Yet another title}

 \begin{theorem}
   Another nice theorem
 \end{theorem}

\end{document}

编辑 正如 Barbara Beeton 在评论中所建议的那样,最好为section*环境提供一个可选参数来覆盖E可选部分中出现的定理数字。这很容易做到:

% \begin{section*}[label]{section title}....\end{section*}
\newenvironment{section*}[2][E]{
  \section*{#2}
  \renewcommand\thesection{\thechapter.#1}
  \setcounter{theorem}{0}}{}

它的用法与前面完全相同,如果你想用一个来标记定理,E但要把它改成一个,F你可以用

\begin{section*}[F]{Optional section title}

   \begin{theorem}
     An optional theorem
   \end{theorem}

 \end{section*}

答案2

对语法稍作调整,

\section*[F]{Title}

允许设置不同的键来代替默认的“E”。

\documentclass{book}
\usepackage{amsthm}
\usepackage{xparse}

% save the original meaning of \section
\let\latexsection\section
% by default, sections are numbered with arabic numbers
\newcommand{\defaultsectionkey}{\arabic{section}}
% initialize \sectionkey
\let\sectionkey\defaultsectionkey
% redefine \thesection
\renewcommand{\thesection}{\thechapter.\sectionkey}

% tweak \section
\RenewDocumentCommand{\section}{s}{%
  \IfBooleanTF{#1}{\sectionstar}{\sectionnostar}%
}
\NewDocumentCommand{\sectionstar}{O{E}m}{%
  % this resets the counters associated to section
  \stepcounter{section}\addtocounter{section}{-1}%
  % change the meaning of \sectionkey
  \renewcommand{\sectionkey}{#1}%
  \latexsection*{#2}%
}
\NewDocumentCommand{\sectionnostar}{O{#2}m}{%
  % revert \sectionkey to the default
  \let\sectionkey\defaultsectionkey
  \latexsection[#1]{#2}%
}


\newtheorem{theorem}{Theorem}[section]

\begin{document}

\chapter{Some title}

\section{Another title}

\begin{theorem}
A nice theorem
\end{theorem}

\section{Yet another title}

\begin{theorem}
Another nice theorem
\end{theorem}

\section*{Optional section}

\begin{theorem}
An optional theorem
\end{theorem}

\section*[F]{Another optional section}

\begin{theorem}
An optional theorem
\end{theorem}

\section{Normal section}

\begin{theorem}
A big theorem
\end{theorem}

\end{document}

在此处输入图片描述

相关内容