我有一个使用 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