% \iffalse meta comment
% File: onlyams.dtx Copyright (C) 2001 Harald Harders
% $Id:$
% \fi
%
% \iffalse
%
%<*package>
\def\onlyamspackagename{onlyams}
\def\onlyamsversion{0.04}
\def\onlyamsfiledate{2001/10/04}
\def\onlyamsdocdate{2001/10/04}
%</package>
%<*driver>
\documentclass[fleqn]{ltxdoc}
\usepackage{amsmath}
\newlength{\tempdima}%
\makeatletter
\renewenvironment{table}[1][]{%
  \@float{table}[#1]%
  \centering%
  \setlength{\tempdima}{\abovecaptionskip}%
  \setlength{\abovecaptionskip}{\belowcaptionskip}%
  \setlength{\belowcaptionskip}{\tempdima}%
  }{%
\end@float
}
\makeatother
\newcommand{\PrintBibliography}{%
\begin{thebibliography}{9}
\bibitem{amsmath1999}
  {\em User's Guide for the amsmath Package}.
  \newblock American Mathematical Society, 1999/12/13.
\end{thebibliography}
}
\EnableCrossrefs
\CodelineIndex
\DoNotIndex{\def,\edef,\let,\newcommand,\newenvironment,\newcounter}
\DoNotIndex{\setcounter,\space,\begingroup,\endgroup}
\CodelineNumbered
\RecordChanges
\CheckSum{94}
\begin{document}
  \title{The \texttt{onlyamsmath} package\thanks{This file is version
      \onlyamsversion\ last revision \onlyamsfiledate, documentation
      from \onlyamsdocdate.}}
  \author{Harald Harders\\\texttt{h.harders@tu-bs.de}}
  \date{File date \onlyamsfiledate, compiled \today}
  \DocInput{onlyamsmath.dtx}
\end{document}
%</driver>
% \fi
%
% \changes{0.01}{2001/09/21}{First version}
%
% \maketitle
% \begin{abstract}
% \noindent 
% This package inhibits the usage of plain \TeX\ and on demand of
% standard \LaTeX\ math environments.
% This is useful for class writers who want to force their clients to
% use the environments provided by the amsmath package.
% \end{abstract}
%
% \tableofcontents
%
% \section*{Copyright}
% Copyright 2001 Harald Harders.
%
% This program can be redistributed and/or modified under the terms
% of the LaTeX Project Public License Distributed from CTAN
% archives in directory macros/latex/base/lppl.txt; either
% version 1 of the License, or any later version.
%
% \section{Usage of the package}
% 
% Just load the package using |\usepackage[|options|]{onlyamsmath}|.
% If no option is given only the plain \TeX\ environment |$$|\dots|$$|
% is ``destroyed''.
% This environment leads to centred equations even with the global
% option |fleqn| (\emph{f}orce \emph{l}eft \emph{eq}uatio\emph{n}s)
% switched on:
% $$
%   a=b\,.
% $$
%
% One further option is \verb|eqnarray| to switch off
% the |eqnarray| and |eqnarray*| environments that add an unwished
% space before and after the aligned part of the formula as shown
% here:
% \begin{eqnarray*}
%   a&=&b\,.
% \end{eqnarray*}
% A better result is achieved using the |align| environment provided
% by |amsmath.sty|:
% \begin{align*}
%   a&=b\,.
% \end{align*}
%
% The most brutal option is |all| that inhibits the writer to use any
% of the \TeX\ and \LaTeX\ math environments for non-inlined equations
% I know (|$$|\dots|$$|, |eqnarray|, |eqnarray*|, |displaymath|.
% The inlined mathematical modes (|$|\dots|$|, |\(|\dots|\)|) still
% work.
%
% Then instead use the environments provided by |amsmath.sty|:
% |equation|, |align|, |gather|, |flalign|, |multiline|, |alignat|,
% and |split|. All environments except |split| have a starred
% variant. See the User's Guide of the |amsmath| package for further
% details \cite{amsmath1999}.
%
% There are two more options that control the behaviour of the package
% if you still use one of the ``forbidden'' environments.
% If using |error| which is the default \LaTeX\ generates an error
% message that reminds you to use the environments of the |amsmath|
% package.
%
% If using |warning| \LaTeX\ only produces warnings and proceeds.
%
% \section*{Acknowledgement}
%
% David Kastrup (David.Kastrup@t-online.de) has
% written the part handling |$$|. 
% I just have changed the call of the command producing the error
% message.
% Since I do not understand his code please don't ask me things
% regarding it.
%
% \StopEventually{\PrintBibliography \PrintChanges \PrintIndex}
%
% \section{The implementation}
% \iffalse
%<*package>
% \fi
%
% Package header:
%    \begin{macrocode}
\ProvidesPackage{onlyamsmath}[\onlyamsfiledate\space
v\onlyamsversion\space destroy the standard math environments]
%    \end{macrocode}
% Load |amsmath| package:
%    \begin{macrocode}
\RequirePackage{amsmath}
%    \end{macrocode}
% \subsection{Options}
% All options set a boolean variable which is named simular to the
% option name.
%
% \changes{0.02}{2001/09/21}{Added switch \texttt{nodollardollar}}%
% \changes{0.03}{2001/09/22}{Removed switches \texttt{dollardollar}
% and \texttt{nodollardollar}}%
% Define the |eqnarray| option:
%    \begin{macrocode}
\newif\ifonlyams@eqnarray
\DeclareOption{eqnarray}{\onlyams@eqnarraytrue}
%    \end{macrocode}
% Define the |all| option:
%    \begin{macrocode}
\newif\ifonlyams@all
\DeclareOption{all}{
  \onlyams@alltrue
  \onlyams@eqnarraytrue
}
%    \end{macrocode}
% Define the |error| and |warning| options:
%    \begin{macrocode}
\newif\ifonlyams@error
\onlyams@errortrue
\DeclareOption{error}{\onlyams@errortrue}
\DeclareOption{warning}{\onlyams@errorfalse}
%    \end{macrocode}
% Set the default options:
%    \begin{macrocode}
\ExecuteOptions{error}
%    \end{macrocode}
% Process the options:
%    \begin{macrocode}
\ProcessOptions\relax
%    \end{macrocode}
% \subsection{Commands}
%
% \begin{macro}{\onlyams@error}
% Define a command that produces the error resp.\ warning messages.
% The argument specifies the name of the environment that produced the
% message.
%    \begin{macrocode}
\newcommand{\onlyams@error}[1]{%
  \ifonlyams@error
    \PackageError{onlyamsmath}{Environment #1 used}{Please use only the
      environments provided by the amsmath package.}%
  \else
    \PackageWarning{onlyamsmath}{Environment #1 used, please use
      \MessageBreak only the environments provided by the amsmath
      \MessageBreak package}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% \changes{0.04}{2001/09/23}{Removed code that forbids
% \texttt{\textbackslash [}\dots\texttt{\textbackslash ]}}%
%
% Here follows the part that is only executed when one of the options
% |eqnarray| or |all| is used:
%    \begin{macrocode}
\ifonlyams@eqnarray
%    \end{macrocode}
% \begin{macro}{\onlyams@eqnarray}
% Copy the original |\eqnarray| command which is called by the commands
% |\begin{eqnarray}| and |\begin{eqnarray*}| to be able to call it
% after producing the correspondig error message:
%    \begin{macrocode}
  \let\onlyams@eqnarray\eqnarray
%    \end{macrocode}
% \end{macro}
% \begin{environment}{eqnarray}
% Redefine the |\eqnarray| command:
%    \begin{macrocode}
  \def\eqnarray{%
%    \end{macrocode}
% First generate an error or warning message:
%    \begin{macrocode}
    \onlyams@error{eqnarray or eqnarray*}%
%    \end{macrocode}
% Then call the original |eqnarray| environment:
%    \begin{macrocode}
    \onlyams@eqnarray}
\fi
%    \end{macrocode}
% \end{environment}
% Here follows the part that is only executed when the option |all| is
% used:
%    \begin{macrocode}
\ifonlyams@all
%    \end{macrocode}
% \begin{environment}{displaymath}
% Redefine the |\displaymath| command:
%    \begin{macrocode}
  \def\displaymath{%
%    \end{macrocode}
% First generate an error or warning message:
%    \begin{macrocode}
    \onlyams@error{displaymath}%
%    \end{macrocode}
% Then call the |\[| environment which normally is called by the
% |displaymath| environment:
%    \begin{macrocode}
    \[}
%    \end{macrocode}
% \end{environment}
%    \begin{macrocode}
\fi
%    \end{macrocode}
% Redefine the |$$| environment. 
% This part wass written by David Kastrup. Please don't ask me anything
% about it.
% \changes{0.03}{2001/09/22}{Changed definition of
% \texttt{\textbackslash dollarcode}, by David Kastrup}%
% \begin{macro}{\dollarcode}
%    \begin{macrocode}
\def\dollarcode{\ifx\protect\@typeset@protect
   \expandafter\futurelet\expandafter\next\expandafter\checkdsp
   \else \expandafter$\fi}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\begingroup
\lccode`\~=`\$
\lowercase{\endgroup\let~}\dollarcode
%    \end{macrocode}
% \begin{macro}{\defdsp}
%    \begin{macrocode}
\def\checkdsp{\ifx\next\dollarcode\expandafter\dspcomplain
  \else\expandafter$\fi}
%    \end{macrocode}
% \end{macro}
% Now comes the part that I understand and in which I have made
% changes.
% \begin{macro}{\dspcomplain}
% This command controls the complaint when using |$$|.
%    \begin{macrocode}
\def\dspcomplain#1{%
%    \end{macrocode}
% If mathmode is active the code has found the second |$$| of the
% environment. 
% The complaint has already made and it is not necessary to do
% generate one.
% The environment has to be closed by using |\]|:
%    \begin{macrocode}
  \ifmmode 
    \expandafter \]%
  \else
%    \end{macrocode}
% If the mathmode isn't active the first |$$| of a mathematical
% environment has been found.
% First generate the warning or error message: 
%    \begin{macrocode}
    \onlyams@error{$$ $$}%
%    \end{macrocode}
% Then start the mathmode by using |\[|:
%    \begin{macrocode}
    \expandafter \[
  \fi}
%    \end{macrocode}
% \end{macro}
% Activate the complaining behaviour at |\begin{document}| to ensure
% that packages that internally use |$$| can do that without an error:
%    \begin{macrocode}
\AtBeginDocument{\catcode`\$=13 }
%    \end{macrocode}
% \iffalse
%</package>
% \fi
% \Finale