无法将 \ 选项传递给使用 xkeyval 处理的包 - 超出 TeX 容量

无法将 \ 选项传递给使用 xkeyval 处理的包 - 超出 TeX 容量

我有一个使用 xkeyval 包来处理选项的测试包。当我传递一个不包含 \ 的选项值时,该包可以正常工作,但当我传递 yy=\tiny 时,我得到了

! TeX capacity exceeded, sorry [input stack size=5000].
\@nomath ...e \@font@warning {Command \noexpand #1
                                                  invalid in math mode}\fi 
l.3 \begin
          {document}
!  ==> Fatal error occurred, no output PDF file produced!

我的测试.tex 和 .sty 文件如下。

% testpkg.tex
\documentclass{article}
\usepackage[yy=\tiny]{testpkg}
\begin{document}
yy: \yy this and that
\end{document}

% testpkg.sty
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{testpkg}[2015/10/28 Test package]
\RequirePackage{xkeyval}
\newif\ifloadjunk
\DeclareOptionX{loadjunk}{\loadjunktrue}
\DeclareOptionX{yy}{\def\yy{#1}}
\ExecuteOptionsX{yy=3}    % set default value for yy option
\ProcessOptionsX\relax

\ifloadjunk
\RequirePackage{junk}
\fi

答案1

你可以使用这样的方法:

\begin{filecontents}{\jobname.sty}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{testpkg}[2015/10/28 Test package]
\RequirePackage{xkeyval}
\newcommand*\yy{\relax}
\DeclareOptionX{yy}{%
  \renewcommand*\yy{\csname#1\endcsname}}
\ExecuteOptionsX{yy=normalsize}    % set default value for yy option
\ProcessOptionsX\relax
\endinput
\end{filecontents}
\documentclass{article}
\usepackage[yy=tiny]{\jobname}
\begin{document}
yy: \yy this and that
\end{document}

请注意,除非只有后者才有效,否则使用\newcommand和朋友比和同伴更好。\def

相关内容