开发者

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.


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.


IMHO, you should not check the name of your class (or version). You should check the functionality.

For example, class article has \@titlepagefalse and class book has \@titlepagetrue. Write

\if@titlepage yes \else no \fi

and recognize the presence of title page.


There is an easy test for the loaded document class: \@ifclassloaded{beamer}{<true>}{<false>}

Short example:

%\documentclass{article}
\documentclass{beamer}

\newcommand{\longauthorname}{foo}
\newcommand{\shortauthorname}{bar}


\makeatletter
\@ifclassloaded{beamer}{%
    \author[\shortauthorname]{\longauthorname}
}{
 \author{\longauthorname}
}
\makeatother


\begin{document}

test

\end{document}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜