我想知道如何创建一个新的定理环境/样式,以便我可以手动插入定理编号。也就是说,我设想了类似
\begin{newtheorem}{2.3'}[title]
This is a theorem.
\end{newtheorem}
翻译成
定理 2.3'(标题)。这是一个定理。
第二个例子是,
\begin{newtheorem}{A}[title]
This is a theorem.
\end{newtheorem}
应该给予
定理A(标题)。这是一个定理。
如何能够定义这样一个定理环境,其参数(除了手动插入“数字”之外)与通常的定理环境相同?
注意,如果我将 添加\label
到此类定理中,我希望相应的\ref
命令打印出参数中定义的定理编号。也就是说,在上面的例子中\ref
应该打印2.3'
。
我将非常感激任何帮助!提前致谢!
答案1
非常简单!;-)
1
\documentclass{article}
\usepackage{amsthm}
\newtheorem{manualtheoreminner}{Theorem}
\newenvironment{manualtheorem}[1]{%
\renewcommand\themanualtheoreminner{#1}%
\manualtheoreminner
}{\endmanualtheoreminner}
\begin{document}
\begin{manualtheorem}{2.3'}[title]\label{foo}
This is a theorem.
\end{manualtheorem}
\begin{manualtheorem}{A}[title]\label{baz}
This is a theorem.
\end{manualtheorem}
Here is \ref{foo} and \ref{baz}.
\end{document}
1 去过也做过。
答案2
首先,您无法定义类似定理的环境newtheorem
,因为已经存在\newtheorem
定义这些环境的宏,这仅仅是由于名称冲突。假设我们有一个环境theorem
。然后您可以在本地更改\thetheorem
:
\documentclass{article}
\usepackage{amsmath,amsthm}
\newtheorem{theorem}{Theorem}
\begin{document}
\begingroup
\renewcommand\thetheorem{2.3'}
\begin{theorem}[title]
This is a theorem.
\end{theorem}
\endgroup
\end{document}
当将其包装到自己的环境中时,您不需要明确分组,因为\begin
和\end
定义会处理这个问题:
\newenvironment{Apollo13theorem}[1]{%
\renewcommand\thetheorem{#1}
\theorem
}{\endtheorem}
然后将按照 OP 的要求使用自定义环境:
\begin{Apollo13theorem}{A}[title]
This is a theorem.
\end{Apollo13theorem}
答案3
使用以下版本\NewDocumentEnvironment
:
\documentclass{article}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}
\NewDocumentEnvironment{mytheorem}{m}%
{\renewcommand{\thetheorem}{$\mathbf{#1}$}%
\begin{theorem}
}%
{\end{theorem}}
\begin{document}
\begin{mytheorem}{2.3'}[note]\label{foo}
This is a theorem.
\end{mytheorem}
\begin{mytheorem}{A}[note]\label{baz}
This is a theorem.
\end{mytheorem}
\ref{foo} and \ref{baz}.
\end{document}