编辑

编辑

我正在编写一组定理及其证明,这些定理和证明对应于已出版书籍中出现的几个没有证明(或只有极少证明草图)的定理。我正在使用 thmtools 来指定定理和证明环境。

当然,我的文章中定理的编号与原文中相应定理的编号相匹配是很重要的。本书中的许多定理都是“对偶”形式出现的,本书采用了以下示例所示的排版惯例:定理 VI.2.1* 是定理双重的定理 VI.2.1。

是否有某种方法可以(通过 thmtools)定义“对偶定理”环境,并为其产生正确的“星号”定理数?

编辑:FWIW,这是我对定理环境使用的定义:

\declaretheoremstyle[%
  spaceabove=4ex%
]{thmstyle}
\declaretheorem[%
  name={Theorem},%
  numberwithin=section,%
  style=thmstyle,%
]{thm}

PS:如果这个环境还可以根据原始定理的陈述自动生成对偶定理的陈述,甚至根据原始证明自动生成证明,那就太酷了,但这确实会突破 LaTeX 的极限...:)

编辑2:这是我尝试实施egreg的建议:

%% the following block is meant to replace egreg's original
%%     \newtheorem*{dualthm*}{Theorem \dualnumber\rlap{*}}
\declaretheorem[%
  name={Theorem \dualnumber\rlap{*}},%
  style=thmstyle,%   %% see earlier Edit for the definition of thmstyle
  unnumbered,%
]{dualtheorem}

%% `dualthm` below is almost identical to egreg's `dualthm`, except that
%% it refers to `\dualtheorem` instead of `\dualthm*`.
\newenvironment{dualthm}[1]
  {\newcommand\dualnumber{\ref{#1}}\begin{dualtheorem}}
  {\end{dualtheorem}}

不幸的是,它失败了:

! Undefined control sequence.
\thmt@thmname ->Theorem \dualnumber
                                    \rlap {*}
l.50 ]{dualtheorem}

? 

我理解(我认为)egreg 的方案在做什么,但我不知道如何将其转换为 thmtools,因为与 不同newtheorem*,thmtooldeclaretheorem显然不允许在其规范中提及未定义的符号。顺便说一句,我尝试了上述的多种变体,但由于某种原因,它们都失败了。不过,我在这方面还是个菜鸟,所以很可能我遗漏了一些显而易见的东西。如果是这样,请告诉我。

答案1

应该很容易适应以下方案thm工具

\documentclass[a4paper]{book}
\usepackage{amsthm}
\newtheorem{thm}{Theorem}[chapter]
\newtheorem*{dualthm*}{Theorem \dualnumber\rlap{*}}
\newenvironment{dualthm}[1]
  {\newcommand\dualnumber{\ref{#1}}\begin{dualthm*}}
  {\end{dualthm*}}

\begin{document}
\mainmatter
\chapter{One}
\section{One}
\begin{thm}\label{one}
$a=b$
\end{thm}
\begin{dualthm}{one}
$b=a$
\end{dualthm}
\end{document}

因此,它dualthm实际上不是一个“类定理”环境,而子定理dualthm*是,但作为一个无数定理。编号是通过\ref每次定义临时命令获得的\dualnumber

为了自动对偶一个语句,应该知道涉及哪种对偶性。如果是布尔代数对偶性,也许可以做到;射影空间中的对偶性则更难。

编辑

以下是将上述代码适配到thm工具

\let\dualnumber\relax
\declaretheorem[%
  name={Theorem \dualnumber\rlap{*}},%
  style=thmstyle,%
  unnumbered,%
]{dualthm*}

\newenvironment{dualthm}[1]
  {\newcommand\dualnumber{\ref{#1}}\begin{dualthm*}}
  {\end{dualthm*}}

由于技术原因,\dualnumber在使用它之前应该有一个定义\declaretheorem

相关内容