将多个不同的键值对映射到同一个行为

将多个不同的键值对映射到同一个行为

我一直在使用该exam课程排版竞赛论文,该课程有漂亮的页眉和封面选项。

现在,这项比赛有两个不同的年龄组别,分别是“青少年”和“高级”,还有三个不同的回合:“MCQ”、“团队”和“观察”。我希望标题页和标题都能反映出六种结果组合中的任何一种,方法是以键值对的方式为命令指定选项。例如,\setcatround[category=jnr, round=mcq]应该适当地设置这些变量,这些变量应该反映在两个都考试的页眉和标题/封面。

我选择了pgfkeys作为我选择的键值包。我忽略了keyvalxkeyvalkvoptions,因为我发现它们的语法特别与相对直截了当的相比,它显得深奥难懂pgfkeys。此外,赖特先生(siunitx名人)推荐pgfkeysl3keys反对其他人,这里

一个 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 可以工作了好的,但我的想法是:

  1. 以标题大小写打印比赛类别和轮次,如下所示:Junior MCQ Round,或Senior Team Round

  2. 打印类别并四舍五入一起仅使用命令;例如,当使用;设置适当的选项时\catround{}应该产生Junior MCQ Round\setcatround{...}

  3. 允许用户指定jnr/juniorsnr/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}

在此处输入图片描述

相关内容