文檔類別:testclass.cls

文檔類別:testclass.cls

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

相關內容