声明除 documentclass 之外的选项

声明除 documentclass 之外的选项

我有一个usrdefn.tex文件,其中我定义了一些经常使用的命令/环境,还有两个基于语言(英语/中文)的定理环境版本。然后我想将一个选项传递给documentclass并自动选择块。mme 看起来像:

对于中文:

\documentclass[zh]{ctexart}
\usepackage{amsthm}
\input usrdefn
\begin{document}
 \begin{thm}
    中文定理
\end{thm}
\end{document}

英语

\documentclass[en]{amsart}
\begin{document}
\begin{thm}
 English Theorem
\end{thm}
\end{document}

usrdefn.tex

\usepackage{etoolbox}
\newtoggle{langen}
\makeatletter
\DeclareOption{en}{\toggletrue{langen}}
\DeclareOption{zh}{\togglefalse{langen}}
\makeatother
\iftoggle{langen}{
\newtheorem{thm}{Theorem}
}{
\newtheorem{thm}{定理}
}

这不是工作,因为它告诉我

|4 错误| 选项部分中的 \RequirePackage 或 \LoadClass。

好的,我明白了,我需要\ProcessOptions遵循这些\DeclareOption东西,这解决了我的问题!!

答案1

更好的方法:使用 LaTeX 2ε 的结构,创建一个个人包。将其放在一个usrdefn.sty文件中(您可以将其保存在当前目录中,或者更好的是,保存在标准位置):

\NeedsTeXFormat{LaTeX2e}[1996/06/01]
\ProvidesPackage{usrdefn}[2016/07/04 My personal macros v1.0]
\RequirePackage{etoolbox} % <- conventionally, use this and not \usepackage in .sty files
\newtoggle{langen}
\DeclareOption{en}{\toggletrue{langen}}
\DeclareOption{zh}{\togglefalse{langen}}
\ProcessOptions
\iftoggle{langen}{
\newtheorem{thm}{Theorem}
}{
\newtheorem{thm}{定理}
}

您不需要makeatletter在这里(这是文件中的默认设置.sty)。现在您可以在主文档中使用它

\documentclass[en]{amsart}
\usepackage{usrdefn}
...

(请注意,类选项“渗透”到包中。\usepackage[en]{usrdefn}如果愿意,您也可以使用)。

相关内容