макрос для среды теоремы

макрос для среды теоремы

Это больно печатать

\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}', излишня.

Связанный контент