
Это больно печатать
\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
. Вот почему при первой попытке вы получаете ошибку 'alredy-defined'. (В конечном итоге среда — это просто этот макрос.) При второй попытке вы вызываете свой макрос внутри того, который хотите переопределить. Следовательно, вы попадаете в бесконечный цикл. Попробуйте сохранить версию, \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}
', излишня.