字符串选项值为空

字符串选项值为空

我有以下课程

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{democlass}[2022/11/15]
\RequirePackage{kvoptions}
\DeclareStringOption[\the\year{}]{year}
\ProcessOptions\relax
\LoadClass{article}
\def\foo{\democlass@year}
\endinput

以及以下文件

\documentclass[year=1999]{democlass}

\begin{document}
\foo
\end{document}

我期望它显示 1999 年。但它显示的是当前年份。我做错了什么?

答案1

您必须使用以下命令处理选项\ProcessKeyvalOptions

\begin{filecontents}[overwrite]{democlass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{democlass}[2022/11/15]
\RequirePackage{kvoptions}
\DeclareStringOption[\the\year{}]{year}
\ProcessKeyvalOptions*\relax
\LoadClass{article}
\def\foo{\democlass@year}
\endinput
\end{filecontents}

\documentclass[year=1999]{democlass}

\begin{document}
\foo
\end{document}

作为当前 LaTeX 的替代方案,您可以使用内置的 keyval 系统:

\begin{filecontents}[overwrite]{democlass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{democlass}[2022/11/15]
\DeclareKeys
 { 
   year .tl_set:N  = \democlass@year,
   year .default:n = \the\year,
   year .initial:n = 2000,
 }   
\ProcessKeyOptions

\LoadClass{article}
\def\foo{\democlass@year}
\endinput
\end{filecontents}

\documentclass[year=1999]{democlass}

\begin{document}
\foo
\end{document}

相关内容