macro para o ambiente do teorema

macro para o ambiente do teorema

É uma dor digitar

\begin{theorem}
...
\end{theorem}

\begin{proof}
...
\end{proof}

ao enviar mensagens de texto ao vivo para um documento em sala de aula.

Quando eu declaro

\newcommmand{\theorem}[2]{\begin{theorem} {#1} \begin{proof} {#2} \end{proof} \end{theorem}}

Entendo que \theoremjá está definido.

Se eu tentar

\renewcommmand{\theorem}[2]{\begin{theorem} {#1} \begin{proof} {#2} \end{proof} \end{theorem}}

Eu recebo um erro fatal.

Existe alguma maneira de evitar que eu tenha que digitar as palavras início, fim e prova várias vezes? Isso é importante quando estou enviando mensagens de texto ao vivo na aula.

Responder1

Você pode fazer isso com

\newcommand{\thmpr}[2]{%
  \begin{theorem}#1\end{theorem}%
  \begin{proof}#2\end{proof}%
}

mas aviso que isso é muito pior: é preciso ficar atento aos aparelhos que podem ficar muito distantes um do outro.

Se você estiver fazendo anotações de aula, é muito mais fácil marcar:

THEOREM\\
Whatever the guy at the blackboard is saying

PROOF\\
Something even more mysterious that I'll go through later

Assim, é fácil colocar o necessário \begine \enda etiqueta ao revisar o material.


O problema é que \newtheorem{theorem}{Theorem}isso define uma \theoremmacro para seus propósitos internos. Então o LaTeX se recusa a fazer \newcommand{\theorem}[2]{...}; mas com

\renewcommand{\theorem}[2]{\begin{theorem}...}

você está definindo \theoremem termos de si mesmo e isso causará um loop infinito.

Responder2

O problema na sua definição é que \begin{theorem}chama implicitamente \theorem. É por isso que na sua primeira tentativa você recebe um erro 'já definido'. (No final das contas, o ambiente é apenas aquela macro.) Na segunda tentativa, você chama sua macro dentro daquela que deseja redefinir. Portanto, você acaba em um loop infinito. Tente armazenar uma versão \theoremdizendo

\let\oldtheorem\theorem

e então sua segunda tentativa basicamente deve funcionar:

\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}

Observe também que o proofambiente geralmente não fica aninhado dentro theoreme o agrupamento em torno dos argumentos, ou seja, ' {#1}' é desnecessário.

informação relacionada