我有以下课程
\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}