打字很痛苦
\begin{theorem}
...
\end{theorem}
\begin{proof}
...
\end{proof}
在课堂上实时发送文档时。
当我宣布
\newcommmand{\theorem}[2]{\begin{theorem} {#1} \begin{proof} {#2} \end{proof} \end{theorem}}
我知道这\theorem
已经定义了。
如果我尝试
\renewcommmand{\theorem}[2]{\begin{theorem} {#1} \begin{proof} {#2} \end{proof} \end{theorem}}
我收到一个致命错误。
有什么方法可以避免我多次输入开头、结尾和证明?当我在课堂上实时发短信时,这一点很重要。
答案1
你可以这样做
\newcommand{\thmpr}[2]{%
\begin{theorem}#1\end{theorem}%
\begin{proof}#2\end{proof}%
}
但我警告你,情况会更糟糕:你需要跟踪那些可能彼此相距很远的括号。
如果你正在记课堂笔记,那么标记起来就容易多了:
THEOREM\\
Whatever the guy at the blackboard is saying
PROOF\\
Something even more mysterious that I'll go through later
这样,当您修改材料时,就可以轻松放置所需的\begin
标签。\end
问题是 确实\newtheorem{theorem}{Theorem}
定义了一个\theorem
宏用于其内部用途。因此 LaTeX 拒绝这样做\newcommand{\theorem}[2]{...}
;但是
\renewcommand{\theorem}[2]{\begin{theorem}...}
您正在\theorem
根据其自身进行定义,这将导致无限循环。
答案2
您的定义中的问题在于\begin{theorem}
隐式调用\theorem
。这就是为什么在第一次尝试时您会得到“已定义”错误。(最终的环境实际上只是那个宏。)在第二次尝试中,您在要重新定义的宏中调用宏。因此,您最终陷入了无限循环。尝试\theorem
通过以下方式存储一个版本
\let\oldtheorem\theorem
然后你的第二次尝试基本上应该有效:
\documentclass{article}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}
\let\oldtheorem\theorem
\let\endoldtheorem\endtheorem
\renewcommand\theorem[2]{\begin{oldtheorem}#1\end{oldtheorem}\begin{proof}#2\end{proof}}
\begin{document}
\theorem{a theorem}{with proof}
\end{document}
还要注意,proof
环境通常不会嵌套在theorem
参数周围的分组中,即“ {#1}
”是不必要的。