检查使用了哪种文档类别

检查使用了哪种文档类别

我已经定义了一个.sty用于报告的文件,其中包含大量有关我的文档外观的有用信息和样式。这一直运行良好,直到我尝试写一封信。我自己的样式加载了其他包titling,这似乎会导致错误。当然,我的信中不需要包titling,但它在我的其他文档中是必需的。我想知道我是否可以编写某种检查,仅在titling文档类不是信件时加载包。这样,它将适用于我的所有其他文档和我的信件。

在包含的示例中,我只加载了titling-package,而不是我的个人风格。产生的错误是相同的。

\documentclass{letter}
\usepackage{lipsum, 
titling
}
\signature{Your name}
\address{Street \\ City \\ Country}
\begin{document}
\begin{letter}{Company name \\ Street\\ City\\ Country}
\opening{Dear Sir or Madam:}
\lipsum[1-2]
\closing{Yours Faithfully,}
\ps{P.S. Here goes your ps.}
\encl{Enclosures.}
\end{letter}
\end{document}

答案1

LaTeX 核心定义与检查某个包是否加载\@ifclassloaded{classname}{true branch}{false branch}基本相同。\@ifpackageloaded

必须指定类名,不带通常的.cls扩展名。

由于@出现在宏名中\@ifclassloaded\makeatletter...\makeatother因此在文档前言中需要,如果检查出现在自写包中,\makeatletter...\makeatother 一定不出现在那里!

\documentclass{letter}
\usepackage{lipsum}

\makeatletter
\@ifclassloaded{letter}{%
  \typeout{this uses letter class}%
}{%
  \usepackage{titling}
  \typeout{this uses another class}%
}
\makeatother    



\signature{Your name}
\address{Street \\ City \\ Country}
\begin{document}
\begin{letter}{Company name \\ Street\\ City\\ Country}
\opening{Dear Sir or Madam:}
\lipsum[1-2]
\closing{Yours Faithfully,}
\ps{P.S. Here goes your ps.}
\encl{Enclosures.}
\end{letter}
\end{document}

相关内容