5

As can be shown in the following MWE, when I have a theorem environment followed by a proof environment, the proof isn't going into the next line; it's rendering right on top of the text I have for the theorem.

enter image description here

\documentclass{book}
\usepackage{color}

\newcounter{theorem}
\setcounter{theorem}{0}
\def\thetheorem{\thesection.\arabic{theorem}}

\newenvironment{theorem}[1][]{%
  \refstepcounter{theorem}
  \vspace{5mm}
  \makebox[-15pt][r]{
    \normalfont\large\color{cyan} Theorem\ \thetheorem$\;\;\;\;$}\setbox0\hbox{\ }
    \hspace{-\the\wd0}
    \ifx\relax#1\relax \else{\large\color{cyan} #1\\[1mm]}\fi
  }
  {\ignorespacesafterend\medskip}%

\newcounter{example}
\setcounter{example}{0}
\def\theexample{\thesection.\arabic{example}}

\newenvironment{example}[1][]{%
  \refstepcounter{example}
  \vspace{5mm}
  \makebox[-15pt][r]{
    \normalfont\large\color{cyan} Example\ \theexample$\;\;\;\;$}\setbox0\hbox{\ }
    \hspace{-\the\wd0}
    \ifx\relax#1\relax \else{\large\color{cyan} #1\\[1mm]}\fi
  }
  {\ignorespacesafterend\medskip}%

\newenvironment{proof}{%
  \vspace{5mm}
  \makebox[-15pt][r]{
    \normalfont\large\color{cyan} Proof$\;\;\;\;$}\setbox0\hbox{\ }
    \hspace{-\the\wd0}
  }
  {\ignorespacesafterend\medskip}%

\begin{document}
  \begin{theorem}
    asdf
  \end{theorem}
  \begin{proof}
    fdsa
  \end{proof}

\end{document}
1
  • \ignorespacesafterend should always be last; and it doesn't matter if you end the paragraph at the environment end. Say \newcounter{theorem}[section] if you want that the counter is reset to zero in new sections.
    – egreg
    Feb 16, 2013 at 10:03

2 Answers 2

5

\medskip and friends don't work in horizontal mode. Put a \par (or a \\) in the environment closure. (And then play with horizontal spacing ;-)

4
  • \par did it.. Thank you very much!
    – Mirrana
    Feb 16, 2013 at 2:20
  • \medskip does indeed force a \par; it's \vspace that doesn't.
    – egreg
    Feb 16, 2013 at 10:18
  • @egreg It does in plain TeX; in LaTeX, not. ?!? Checked bla\medskip blaon three computers ;-) Feb 16, 2013 at 10:52
  • @SašoŽivanović You're right; I was thinking to a different thing.
    – egreg
    Feb 16, 2013 at 11:04
4

You're doing many things in a complicated way and so have very bad control of spaces. Here's a proposal for a better realization.

\documentclass{book}
\usepackage{color}
\usepackage{lipsum} % for mock text

\newcounter{theorem}[section]
\def\thetheorem{\thesection.\arabic{theorem}}

\newenvironment{theorem}[1][]{%
  \par\addvspace{5mm}%
  \refstepcounter{theorem}%
  \noindent\makebox[0pt][r]{%
    \normalfont{\large\color{cyan}Theorem\ \thetheorem}\quad}%
    \ifx\relax#1\relax \else{\large\color{cyan}#1\\[1mm]}\fi
  \ignorespaces}
  {\par\addvspace{\medskipamount}}

\newcounter{example}[section]
\def\theexample{\thesection.\arabic{example}}

\newenvironment{example}[1][]{%
  \par\addvspace{5mm}%
  \refstepcounter{example}%
  \noindent\makebox[0pt][r]{%
    \normalfont{\large\color{cyan}Example\ \theexample}\quad}%
    \ifx\relax#1\relax\else{\large\color{cyan}#1\\[1mm]}\fi
  \ignorespaces}
  {\par\addvspace{\medskipamount}}

\newenvironment{proof}{%
  \par\addvspace{5mm}
  \noindent\makebox[0pt][r]{%
    \normalfont{\large\color{cyan}Proof}\quad}%
  \ignorespaces}
  {\par\addvspace{\medskipamount}}

\begin{document}
\lipsum[1]

\begin{theorem}
\lipsum*[2]
\end{theorem}

\begin{proof}
\lipsum*[3]
\end{proof}

\end{document}
  1. Use \newcounter{theorem}[section] in order to reset the counter at each section.

  2. Use \par\addvspace{5mm} so that this won't add space in excess when following other environments that use the same command (such as lists).

  3. With \noindent you can control precisely where your label will go. Don't forget \ignorespaces at the end of the "begin part"

  4. \ignorespacesafterend is useless in the "end part" since you force a paragraph end; in any case this must be the last token.

  5. Be careful with spurious spaces in your definition. I've protected with % more end-of-lines than necessary, but better be safe than sorry.

enter image description here

0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .