我已经定义了一个.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}