如何在“cls”文件中使用“ifpackageloaded”?

如何在“cls”文件中使用“ifpackageloaded”?

我正在编写一个类,根据主tex文件中加载的包对其命令进行一些更改。但是,当将其用于\@ifpackageloaded此目的时,它仅在包加载到文件中cls而不是加载到tex文件中时执行更改。但是,我需要它在文件中加载包时工作tex

举一个简单的例子,我们有这个cls文件:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{myarticle}[3000/13/32 myarticle LaTeX class]

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}

\ProcessOptions\relax

\LoadClass{article}

%\usepackage{descartes}

\newcommand{\myquote}{Wovon man nicht sprechen kann...}

\@ifpackageloaded{descartes}%
    {\renewcommand{\myquote}{Cogito ergo sum.}}{}

以及以下tex文件:

\documentclass{myarticle}

%\usepackage{descartes}

\begin{document}

\myquote

\end{document}

\usepackage{descartes}当我在文件中取消注释时,LaTeX 只会打印字符串“Cogito ergo sum。” cls,但如果我在文件中仅取消注释它,则没有任何效果tex。我做错了什么?

答案1

替代解决方案

由于您不确定延迟\AtBeginDocument是好主意还是坏主意,我建议使用descartes加载包并修改句子的选项。

以下是该文件的代码.cls

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2019/10/22 A test class to answer on TeX - LaTeX Stack Exchange.]

\newif\ifdescartes
\descartesfalse
\DeclareOption{descartes}{\descartestrue}

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}

\ProcessOptions\relax

\LoadClass{article}


\newcommand{\myquote}{Wovon man nicht sprechen kann...}

\ifdescartes
    \RequirePackage{descartes}

    \renewcommand{\myquote}{Cogito ergo sum.}
\fi

以下是该文件的代码.tex

\documentclass{testclass}% without `descartes` option
%\documentclass[descartes]{testclass}% with `descartes` option

\begin{document}

    \myquote

\end{document}

相关内容