58

This question already has an answer here:

Suppose I have some theorem in the paper

Section 1

Theorem 1.1. Let ...

And then later in the paper I want to recall the theorem by reprinting it

Section 4

We recall Theorem 1.1:

Theorem 1.1. Let ...

What's the proper way to do this?

marked as duplicate by user13907, Werner, Zarko, Mike Renfro, barbara beeton Dec 23 '15 at 22:35

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • 1
    Welcome to TeX.SE. I would just store the contents of the theorem in a macro and re-use the macro for the initial and reuse. – Peter Grill Apr 9 '12 at 15:05
  • 3
    Interesting question! However, I have serious doubts whether this is actually a good idea. A traditional \reference might actually be better. As a reader, if I saw Theorem 1.1 in two places of a book, I'd think it's a mistake, and after seeing that this is actually the same theorem, I might feel "cheated" by the author... – mbork Apr 9 '12 at 15:29
  • 8
    @mbork What's the problem, he explicitly says: "We recall Theorem 1.1", why should someone think it is a mistake. Think about a case when the Theorem is in the body of the paper and the proof of the theorem is in the appendix. So before the proof you want to recall the exact statement of the theorem once again. Would this this confuse somebody? – jutky Oct 21 '14 at 17:51
54

The thm-restate package which is part of thmtools offers a restatable environment. In the following example, I also use hyperref and cleveref (its \cref macro automatically adds the correct theorem type). See section 1.4 of the thmtools manual for details.

\documentclass{article}

\usepackage{thmtools}
\usepackage{thm-restate}

\usepackage{hyperref}

\usepackage{cleveref}

\declaretheorem[name=Theorem,numberwithin=section]{thm}

\begin{document}

\section{First}

\begin{restatable}[Goldbach's conjecture]{thm}{goldbach}
\label{thm:goldbach}
Every even integer greater than 2 can be expressed as the sum of two primes.
\end{restatable}

\section{Second}

We recall \cref{thm:goldbach}:

\goldbach*

\end{document}

enter image description here

  • 1
    I can't comment yet, so hopefully this will change to one. I got lots of errors when I tried to use thm-restate just now. The problem seemed to be that it didn't like being in the same \usepackage command as other packages. It also likes to be placed after amsthm. – Jessica B Oct 14 '13 at 16:49
  • 3
    I had trouble implementing something similar in my own document, so I tried running literally your document. The following happened: LaTeX Warning: \Cref reference format for label type 'thm' undefined on input l ine 23. ! Undefined control sequence. \HyRef@StarSetRef ...Hy@safe@activestrue \edef \x {#1}\@onelevel@sanitize \x... l.25 \goldbach*. How can I circumnavigate this issue? – jdc Aug 19 '14 at 0:21
  • @jdc Still works for me. Try to delete all auxiliary files and compile several times. – lockstep Aug 19 '14 at 5:32
  • 1
    is there a way of capitalizing the name of the theorem when recalling it? Ie. 'We recall Theorem 1.1:' – gen Dec 9 '17 at 17:05
  • Does declaretheorem do the same as newtheorem? – Thomas Ahle Mar 14 at 0:00
9

If you need it only once or twice or so, you can locally in the repeating: 1) tweak theorem label printing, 2) add -1 to the theorem counter since it gets increased by the repeated theorem. The code:

\documentclass{article}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}[section]
\begin{document}

\section{First}

\begin{theorem}\label{mythm}
Let $x$ ...
\end{theorem}

\section{Second}

\begin{theorem}
This should be two.one
\end{theorem}

Let us recall the theorem from the first section.

\begingroup
\def\thetheorem{\ref{mythm}}
\begin{theorem}
Let $x$ ...
\end{theorem}
\addtocounter{theorem}{-1}
\endgroup

\begin{theorem}
This should be two.two
\end{theorem}

\end{document}
  • What if there are multiple theorems between the original and the recall? Is there a robust way of dealing with this? Something like saving the counter to a variable, then setting it to the value at some label before resetting it to the saved value? – Thomas Ahle Dec 22 '17 at 22:06
  • It does nit matter what you put inbewteen, this is robust againat such things. – yo' Dec 23 '17 at 22:10

Not the answer you're looking for? Browse other questions tagged or ask your own question.