可能重复:
正在使用哪个文档类别?
是否可以从该文档正在使用的包中获取当前文档类名的名称?我的意思是一个例子:
在文档中:
\documentclass{article}
\usepackage{foo}
\begin{document}
Foo claims \bar! What does he know?
\end{document}
foo
在上面使用的包中:
\newcommand{\bar}{the current document class is \DocumentClassName}
我实际上有兴趣使用它来根据文档类稍微修改一些我自己的宏的行为。我目前已经解决了这个问题,通过根据类名定义选项。我以为我可以保留这些选项来强制某些行为,但如果可以根据文档类名选择默认值就好了。
区分书籍、报告、文章和“其他”(任何其他内容)就足以满足我的目的。测试章节计数器的存在几乎可行,只是它无法区分书籍和报告。
答案1
如果您不需要特定类别日期的第二个可选参数,那么这应该可以工作:
\RequirePackage{filecontents}
\makeatletter
\def\ProvidesClass#1{%
\xdef\CName{#1}%
\@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%]
\makeatother
\documentclass{book}
\begin{filecontents}{foo.sty}
\newcommand\baz{the current document class is \CName}
\end{filecontents}
\usepackage{foo}
\begin{document}
Foo claims \baz! What does he know?
\end{document}
问题是我们必须\ProvidesClass
在类本身加载之前重新定义。