我正在编写一个 documentclass,它默认加载多个包。我想让用户能够使用 documentclass 选项将选项传递给这些包。由于大多数包都有多个选项,所以我必须像某种列表一样传递这些选项,但目前还不行。
有没有(简单的)方法来实现这一点?
这是我的 MWE 和一个示例类,它应该将选项传递给amsmath
。
文档类别:testclass.cls
\RequirePackage{expl3, l3keys2e}
\ExplSyntaxOn
\keys_define:nn {testclass} {
amsmathoptions .tl_gset:N = \g_testclass_amsmathoptions_tl,
amsmathoptions .initial:n = intlimits
}
\DeclareOption*{%
\PassOptionsToClass{\CurrentOption}{article}%
}
\ProcessOptions
\ProcessKeysOptions{testclass}
\LoadClass{article}
\RequirePackage[\g_testclass_amsmathoptions_tl]{amsmath}
\ExplSyntaxOff
示例 1:传递单个选项(有效)
\documentclass[amsmathoptions=nonamelimits]{testclass}
\begin{document}
Integral:
\[
\int_a^b f(x) \mathop{}\!\mathrm{d}x
\]
Operators:
\[
\lim_{x \rightarrow \infty} f(x)
\]
\end{document}
结果 1
示例 2:传递多个选项(不起作用)
\documentclass[amsmathoptions={nointlimits, nonamelimits}]{testclass}
\begin{document}
Integral:
\[
\int_a^b f(x) \mathop{}\!\mathrm{d}x
\]
Operators:
\[
\lim_{x \rightarrow \infty} f(x)
\]
\end{document}
结果 2
[...]
(/usr/local/texlive/2017/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
File: l3pdfmode.def 2017/03/18 v L3 Experimental driver: PDF mode
\l__driver_color_stack_int=\count162
\l__driver_tmp_box=\box41
))
(/usr/local/texlive/2017/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
Package: l3keys2e 2017/12/16 LaTeX2e option processing using LaTeX3 keys
)
! LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.15 \ProcessKeysOptions
{testclass}
You're in trouble here. Try typing <return> to proceed.
If that doesn't work, type X <return> to quit.
Missing character: There is no , in font nullfont!
! You can't use `macro parameter character #' in horizontal mode.
\@removeelement #1#2#3->\def \reserved@a ##1,#1,##
2\reserved@a {##1,##2\rese...
l.15 \ProcessKeysOptions
{testclass}
Sorry, but I'm not programmed to handle this case;
I'll just pretend that you didn't ask for it.
If you're in the wrong mode, you might be able to
return to the right one by typing `I}' or `I$' or `I\par'.
Missing character: There is no 2 in font nullfont!
)
Runaway argument?
{##1,##2\reserved@b }\def \reserved@b ##1,\reserved@b ##2\reserved@b \ETC.
! File ended while scanning use of \reserved@a.
<inserted text>
\par
l.2 ^^M
I suspect you have forgotten a `}', causing me
to read past where you wanted me to stop.
I'll try to recover; but if the error is serious,
you'd better type `E' or `X' now and fix your file.
Overfull \hbox (20.0pt too wide) in paragraph at lines 15--2
[...]