我正在尝试根据以下问题的答案之一给出的命令创建一个环境:自定义定理名称。
\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}