Win11; TeXLive2024; VSCode; XeLaTeX.
exam-zh文档类版本:v0.2.1
想定义一个宏/命令,用来作为exam-zh文档类下\examsetup
命令中一些键值对的值。对于值域不固定(e.g. odd-info-content
键)的情况有效,但当值域固定时,运行会报错、返回信息为:
Key 'exam-zh/page/size' accepts only a fixed set of choices.
其重点在于accepts only a fixed set of choices
.
有怀疑过是宏未能被展开,但只知道怎么延迟展开、不知道怎么“提前”展开。
另外,原以为这属于键值对机制的“通病”,但对ctex宏集下\ctexset
命令的punt
键进行尝试,发现可以用宏作为值:
\documentclass{exam-zh}
\newcommand{\foo}{a3paper}
% \def\foo{a3paper}
\examsetup{
page/size={\foo}
}
\begin{document}
HELLO
\end{document}
使用\exp_args:Nne
对参数进行e-type
展开
\documentclass{exam-zh}
\newcommand{\foo}{a3paper}
% \def\foo{a3paper}
\ExplSyntaxOn
\RenewDocumentCommand \examsetup { m }{
\exp_args:Nne \keys_set:nn {exam-zh} {#1}
}
\ExplSyntaxOff
\examsetup{
page/size={\foo},%可展的key-value
sealline/show=true,%不可展的key-value
}
\begin{document}
花有重开日,人无再少年。花有重开日,人无再少年。
\end{document}
在ctex-kit
中,today
这一key也是由.choice
定义的:
下面的mwe也有类似的问题:
\documentclass[fontset=ubuntu]{ctexart}
\def\mytodaystyle{big}
\ctexset{
today=\mytodaystyle,
}
\begin{document}
日期: \today
\end{document}
! Class ctexart Error: Today format `big' is undefined.
For immediate help type H <return>.
...
l.8 }
「似乎」也可以做类似的「展开」,但是l3keys
默认是不进行展开的,这样做是否会造成其他的问题,我不清楚...
\documentclass[fontset=ubuntu]{ctexart}
\def\mytodaystyle{big}
\ExplSyntaxOn
\exp_args:Ne
\ctexset{
% today=big,
today=\mytodaystyle,
}
\ExplSyntaxOff
\begin{document}
日期: \today
\end{document}
看来还是限制重重。
btw,
从下面这个mwe来看貌似也可展?

@u64726 我的本意是想测试看看对于
true
这种已经是「字符串」的会不会受新定义的\examsetup
影响,测试结果是正常。确实如此。
我只是抛砖引玉而已,也许蹲蹲其他老师的高见。