如何在自定义类选项中使用等号?

如何在自定义类选项中使用等号?

我见过诸如 之类的包选项,geometry它允许用户指定具有特定值的选项。例如,\usepackage[margin=1in]{geometry}将用于1in左右边距。这可以在我自己的自定义类中实现吗?假设我想在类中指定边距,例如\documentclass[margin=1in]{myclass}。我该怎么做?我知道如何传递常规选项,例如option,但不知道如何传递具有值的选项,例如option=value

答案1

在此处输入图片描述

对于旧版本,提供此功能的软件包可用,但在当前版本中它是内置的,请参阅 ltnews35。

myc.cls


\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesClass{myc}[2022-06-17]

\RequirePackage{xcolor}


\DeclareKeys{
color.code = \colorlet{foocol}{#1},
val.store = \fooval
}


\SetKeys{
color =black,
val=0
}

\ProcessKeyOptions

\setlength\textwidth{6cm}
\setlength\textheight{8cm}

\renewcommand\normalsize{\fontsize{10}{12}\selectfont}

file.tex


\documentclass[color=red,val=42]{myc}

\begin{document}

\textcolor{foocol}{one}  $x=\fooval$
\end{document}

答案2

mycls.cls

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mycls}[2022-06-17]
\LoadClass{article}
\RequirePackage{l3keys2e}
\ExplSyntaxOn
\keys_define:nn{test}
{
  name.tl_set:N = \l_name_tl,
  age.int_set:N = \l_age_int,
}
\ProcessKeysOptions{test}
\def\myinfo{my~name~is~\tl_use:N \l_name_tl,and~i~am~\int_use:N \l_age_int ~years~old.}
\ExplSyntaxOff

main.tex

\documentclass[name = {ljguo},age = 12]{mycls}
\begin{document}
  \myinfo
\end{document}

在此处输入图片描述

答案3

以下使用expkv-opt(并使用expkv-def前端定义键)。

myc.cls


\ProvidesClass{myc}[2022-06-18]

\RequirePackage{xcolor}

\RequirePackage{expkv-opt,expkv-def}
\ekvdefinekeys{myc}
  {%
     code    color = \colorlet{foocol}{#1}
    ,initial color = black
    ,store   val   = \fooval
    ,initial val   = 0
    ,store   size  = \foosize
    ,initial size  = 10
  }

\ekvoProcessGlobalOptions{myc}
\ekvoProcessLocalOptions{myc}

\renewcommand\normalsize
  {%
    \fontsize{\foosize}{\strip@pt\dimexpr1.2\dimexpr\foosize pt\relax\relax}%
    \selectfont
  }

\newcommand*\myctest
  {\rule{.4pt}{7pt}Options were: \textcolor{foocol}{\fooval}\rule{.4pt}{7pt}}

file.tex


\documentclass[color=red, val=42, size=14]{myc}

\begin{document}
\myctest
\end{document}

结果:


在此处输入图片描述


相关内容