检测LaTeX类名称

时间:2010-03-26 15:52:40

标签: latex introspection

我正在研究一个LaTeX软件包,根据所使用的类,可能需要做一些不同的事情。我想知道是否有办法自动检测或测试文档类。

当然可以查找类文件并测试该类定义的特定宏的存在,但是有更聪明的方法吗?我查看了\ProvidesClass宏的定义,但无法查看它是否将类名保存在除\@currname之外的任何位置。我相信\@currname只是当前正在阅读的包或类的名称。

基本上我想执行

\author{\longauthorname}

article班级,但

\author[\shortauthorname]{\longauthorname}

beamer班。

3 个答案:

答案 0 :(得分:2)

恕我直言,你不应该检查你的班级(或版本)的名称。 您应该检查功能。

例如,课程article\@titlepagefalse和 班级book\@titlepagetrue。 写

\if@titlepage yes \else no \fi

并识别标题页的存在。

答案 1 :(得分:2)

在完善我的问题之后,我将展示我是如何回答的。沿着dmckee说的话。只需测试功能。

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

\ifcsame可用于所有e-TeX版本,并记录在案(以及检查命令是否已定义的其他方法)here

您无法检查\author宏的实际签名(即,它是否采用可选参数?)但您可以检查为实现可选参数而定义的一些辅助宏。 \beamer@authorbeamer班级中的一个。

答案 2 :(得分:1)

对加载的文档类有一个简单的测试:\@ifclassloaded{beamer}{<true>}{<false>}

简短示例:

%\documentclass{article}
\documentclass{beamer}

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


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


\begin{document}

test

\end{document}