# Backward compatibility for command names

I have made a class file. It defines commands for use in document files. I want to change some of the command names, but I also want old document files to work without changing them.

Here's an example to illustrate:

\begin{filecontents}{a.cls}
\ProvidesClass{a}
\RequirePackage{scrpage2}
%
\def\commandnameA#1{\def\@commandnameA{#1}}
\commandnameA{}
%
\newpagestyle{a}{{}{}{A:\@commandnameA}}{{}{}{}}
\pagestyle{a}
\end{filecontents}
\documentclass{a}
\begin{document}
\commandnameA{test}
test
\end{document}


For this example I want to change "commandnameA" to "commandnameB" in the class file and have the document file work whether it contains \commandnameA{test} or \commandnameB{test}.

Any help is appreciated.

-

\let\commandnameB\commandnameA in your class file. Then the two macros are the same!

-
or \def\commandnameB{\commandnameA} if you want to keep both in sync even after \commandnameA got redefined. –  Martin Scharrer Apr 10 '11 at 12:41

You may add a warning that \commandnameA is deprecated:

\def\commandnameB{%
\commandnameA%
\ClassWarning{yourclass}{Command \string\commandnameA\space is deprecated.%
}

-

Since \commandnameA and/or \commandnameB expect an argument, Tobi's solution should have been

\protected\def\commandnameB{%
\ClassWarning{myclass}{Command \string\commandnameA' is deprecated.

I have added \protected because \commandnameB is not expandable.