如何定义一个限制 \newtheorem 命令范围的新环境?

如何定义一个限制 \newtheorem 命令范围的新环境?

我正在尝试根据以下问题的答案之一给出的命令创建一个环境:自定义定理名称

\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}

\newenvironment{namedtheorem}[1]{
\theoremstyle{definition}
   \newtheorem*{thmTemp}{#1}
\begin{thmTemp}}{\end{thmTemp}}

\begin{document}

\begin{namedtheorem}{foo}
    This is a named theorem bar.
\end{namedtheorem}

\begin{namedtheorem}{bar}
    This is a named theorem bar.
\end{namedtheorem}

\end{document}

不幸的是,我的调用\newtheorem*{thmTemp}{#1}似乎超出了当前环境的范围,导致在第二次使用该环境时出现错误。

我该如何修复我的环境以避免这个问题?

答案1

据我所知,Andrew Stacey 的回答您的另一个问题是,为您提供这些命名定理的环境。与您的请求的唯一区别是,名称是一个可选参数。使用他的代码,我们可以通过使用他的定义结果并提供参数来定义一个新环境,其中名称是必需的:

\newenvironment{namedtheorem}[1]{\begin{internalnamedtheorem}[#1]}{\end{internalnamedtheorem}}

这样,我们就将\newtheorem命令移出了环境定义。这接近于常见的 (La)TeX 编码习惯用法,即主命令是根据其他次要命令来定义的。

示例输出

\documentclass{article}

\usepackage{amsthm}

\newtheorem*{theorem}{Theorem}

\newtheoremstyle{named}{}{}{\itshape}{}{\bfseries}{.}{.5em}{\thmnote{#3's }#1}
\theoremstyle{named}
\newtheorem*{internalnamedtheorem}{Theorem}

\newenvironment{namedtheorem}[1]{\begin{internalnamedtheorem}[#1]}{\end{internalnamedtheorem}}

\begin{document}

\noindent
Standard naming.

\begin{theorem}[Euclid]
  There are infinitely many primes.
\end{theorem}

\noindent
New naming.

\begin{namedtheorem}{Euclid}
  There are infinitely many primes.
\end{namedtheorem}

\end{document}

相关内容