我有一个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}
如果愿意,您也可以使用)。