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:


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!

  • 6
    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:

  \ClassWarning{yourclass}{Command \string\commandnameA\space is deprecated.%
  \MessageBreak Use \string\commandnameA\space instead.}%

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

  \ClassWarning{myclass}{Command `\string\commandnameA' is deprecated.
  \MessageBreak Use `\string\commandnameB' instead}%

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. – user10274 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. – user10274 Feb 21 '12 at 13:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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