
É 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 \theorem
já 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 \begin
e \end
a etiqueta ao revisar o material.
O problema é que \newtheorem{theorem}{Theorem}
isso define uma \theorem
macro 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 \theorem
em 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 \theorem
dizendo
\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 proof
ambiente geralmente não fica aninhado dentro theorem
e o agrupamento em torno dos argumentos, ou seja, ' {#1}
' é desnecessário.