在自定义文章类中使用 key=val 选择字体

在自定义文章类中使用 key=val 选择字体

我正在编写一个基于的简单类article,它加载一些常用的包并设置一些默认值。文档字体应该是一个key=value选项\documentclass{myarticle}。例如,font=charterfont=utopia分别font=libertine将字体设置为Charter、Utopia 和 Linux Libertine。Charter 应该是默认值(直接传递font是不可能的)。我在使用kvoptions包进行设置时遇到了问题。如果我理解正确的话,我应该使用\DeclareStringOption[charter]{font}[]设置charter为未指定默认值的默认值font=,但我不确定在哪里声明其他选项。在文档中我看到了函数\SetupKeyvalOptions{},但我不明白familiyprefixsetkeys的意思。文档对此并不清楚(至少对于以前从未做过这种事的人来说不清楚)。

我想把设置字体所需的行放在某种if else语句中。我看过这个ifthen包,但我不知道如何将它与结合起来kvoptions。此外,它似乎ifthen需要嵌套不同的语句(对吗?),这很快就会变得混乱,因为我有更多的字体选项。

以下是我现在所拥有的myarticle.cls

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myarticle}[2020/07/28 Custom article class]
\LoadClass{article}

\RequirePackage{kvoptions}

\SetupKeyvalOptions{
    family = font,
    prefix = font@
}

\DeclareStringOption[charter]{font}
\ProcessKeyvalOptions*

\iffont@charter
    \RequirePackage[charter]{mathdesign}
\else\iffont@utopia
    \RequirePackage[adobe-utopia]{mathdesign}
\else
    \RequirePackage{libertine,libertinust1math}
\fi

main.tex

\documentclass[font=utopia]{myarticle}
\usepackage[utf8]{inputenc}
\begin{document}
    Content...
\end{document}

问题是我不知道如何评估 if 语句中的选项。您只能评估真/假语句吗?

PS:我也有点困惑\iffamPS. 我对看到的命令这里\if(第 112 页)。和之间的组合如何起作用fam

编辑

我已改为myarticle.cls

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myarticle}[2020/07/28 Custom article class]
\LoadClass{article}

\RequirePackage{kvoptions}
\RequirePackage{etoolbox}

\SetupKeyvalOptions{family = opt, prefix = opt@}

\DeclareStringOption[charter]{font}

\ifdefstring{\opt@font}{charter}{\RequirePackage[charter]{mathdesign}}{}
\ifdefstring{\opt@font}{utopia}{\RequirePackage[utopia]{mathdesign}}{}
\ifdefstring{\opt@font}{libertine}{\RequirePackage{libertine,libertinust1math}}{}
\ifdefstring{\opt@font}{lmodern}{\RequirePackage{lmodern}}{}

\ProcessKeyvalOptions{opt}

现在更改默认设置\DeclareStringOption会更改文档字体,但设置另一个选项则\documentclass没有效果。

编辑2\ProcessKeyvalOptions{opt}直接移至下方\DeclareStringOption[charter]{font}解决了我的问题。不过,我还是想知道这是否是一种“好”的方法。

相关内容