50 exam-zh文档类中如何让一个「值域固定」的键接受一个宏/命令作为值?

发布于 2025-06-15 11:04:17

配置

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键进行尝试,发现可以用宏作为值:
image.png

MWE

\documentclass{exam-zh}

\newcommand{\foo}{a3paper}
% \def\foo{a3paper}
\examsetup{
  page/size={\foo}
}

\begin{document}
HELLO
\end{document}

查看更多

关注者
0
被浏览
65
1 个回答
Sagittarius Rover
Sagittarius Rover 10小时前
我要成为Typst糕手/(ㄒoㄒ)/~~

Claim:不是很懂展开,做了一个(不一定合适)的尝试:

使用\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}

image.png


ctex-kit中,today这一key也是由.choice定义的:

image.png

下面的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}

image.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览