# 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.
\commandnameA
}


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

-
It would be nicer if you could keep your answer self-contained and could avoid questions to the poster and others. – Marc van Dongen Feb 21 '12 at 1:30
@MarcvanDongen: Thanks. I have removed why?. – Ahmed Musa Feb 21 '12 at 13:20
I didn't mean you should remove the question. I had hoped you could expand on it further. It would provide more insight and would improve the answer. That's all. – Marc van Dongen Feb 21 '12 at 13:29