我正在研究一个LaTeX软件包,根据所使用的类,可能需要做一些不同的事情。我想知道是否有办法自动检测或测试文档类。
当然可以查找类文件并测试该类定义的特定宏的存在,但是有更聪明的方法吗?我查看了\ProvidesClass
宏的定义,但无法查看它是否将类名保存在除\@currname
之外的任何位置。我相信\@currname
只是当前正在阅读的包或类的名称。
基本上我想执行
\author{\longauthorname}
在article
班级,但
\author[\shortauthorname]{\longauthorname}
在beamer
班。
答案 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@author
是beamer
班级中的一个。
答案 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}