我正在編寫一個文檔類,它預設會載入多個包。我想讓使用者能夠使用 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
[...]