我正在编写一个类,根据主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}