我一直在使用该exam
课程排版竞赛论文,该课程有漂亮的页眉和封面选项。
现在,这项比赛有两个不同的年龄组别,分别是“青少年”和“高级”,还有三个不同的回合:“MCQ”、“团队”和“观察”。我希望标题页和标题都能反映出六种结果组合中的任何一种,方法是以键值对的方式为命令指定选项。例如,\setcatround[category=jnr, round=mcq]
应该适当地设置这些变量,这些变量应该反映在两个都考试的页眉和标题/封面。
我选择了pgfkeys
作为我选择的键值包。我忽略了keyval
、xkeyval
和kvoptions
,因为我发现它们的语法特别与相对直截了当的相比,它显得深奥难懂pgfkeys
。此外,赖特先生(siunitx
名人)推荐pgfkeys
或l3keys
反对其他人,这里。
一个 M(N)WE [最小(非)工作示例]:
\documentclass{exam}
\usepackage{pgfkeys}
\pgfkeys{
/ac/.is family, /ac,
category/.estore in = \category,
round/.estore in = \round
}
\newcommand*{\setcatround}[1]{\pgfqkeys{/ac}{#1}}
\setcatround{category=senior, round=mcq}
\header{My Exam}{}{\category{} \round{} Round}
\title{Competition}
\begin{document}
\maketitle
\centering
\LARGE{\category{} \round{} Round}
\thispagestyle{headandfoot}
\end{document}
现在,这个 MWE 可以工作了好的,但我的想法是:
以标题大小写打印比赛类别和轮次,如下所示:
Junior MCQ Round
,或Senior Team Round
;打印类别并四舍五入一起仅使用一命令;例如,当使用;设置适当的选项时
\catround{}
应该产生Junior MCQ Round
\setcatround{...}
允许用户指定
jnr
/junior
或snr
/senior
并输出适当的结果。
我该如何指定这些内容,并可能使其易于扩展以适应未来的任何添加?
答案1
借助.is choice
密钥处理程序,该程序记录在PGF 手册,第 88.4.5 节:
\documentclass{exam}
\usepackage{pgfkeys}
\pgfkeys{
/ac/.cd,
category/.is choice,
category/jun/.code={\edef\category{Junior}},
category/snr/.code={\edef\category{Senior}},
% you can define similar choice-keys for "round"
round/.estore in = \round
}
\newcommand*{\setcatround}[1]{\pgfqkeys{/ac}{#1}}
\setcatround{category=snr, round=mcq}
\header{My Exam}{}{\category{} \round{} Round}
\title{Competition}
\begin{document}
\maketitle
\centering
\LARGE{\category{} \round{} Round}
\thispagestyle{headandfoot}
\end{document}