Search code examples
latexintrospection

Detect LaTeX class name


I'm working on a LaTeX package which might need to do some things differently depending on the class that's being used. I'm wondering if there's a way to auto-detect or test the document class.

One could certainly look up the class files and test for the existence of a specific macro defined by that class, but is there a smarter way? I looked at the definition of the \ProvidesClass macro and can't see if it saves the class name anywhere except \@currname. I believe \@currname is just the name of the current package or class being read.

Basically I want to execute

\author{\longauthorname}

in the article class but

\author[\shortauthorname]{\longauthorname}

in the beamer class.


Solution

  • After refining my question I'll show how I answered it. Along the lines of what dmckee was saying. Just test for the functionality.

    \ifcsname beamer@author\endcsname
      \author[\shortauthorname]{\longauthorname}
    \else
      \author{\longauthorname}
    \fi
    

    \ifcsame is available on all e-TeX builds and is documented (along with other ways to check if a command is defined) here.

    You can't check for the actual signature of the \author macro (i.e., does it take an optional argument?) but you can check for some of the auxiliary macros defined to implement optional arguments. \beamer@author is one of those in the beamer class.