我尝试编写一个小程序包供个人使用。为此,我使用kvoptions
。现在我必须为包含的选项之一提供一个字符串,\\
但这会失败:undefined control sequence. \let \reserved@e
。
我的 texfile 如下所示:
\documentclass{scrlttr2}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[myoption={Street\\City}]{mypackage}
\begin{document}
\begin{letter}{some name}
\opening{Dear ...}
\closing{Regards ...}
\end{letter}
\end{document}
.sty 文件的内容如下:
\ProvidesPackage{mypackage}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=mypackage
,prefix=mypackage@
}
\DeclareStringOption[]{myoption}[]
\ProcessLocalKeyvalOptions*\relax
\setkomavar{fromaddress}{\mypackage@myoption} %just for example
实际上,我做的不止这些,myoption
但我需要它在字符串中接受\\
。这是唯一的问题。只要我不在\\
字符串中使用,一切都会正常工作。我可以像这样为选项使用默认值:
\DeclareStringOption[Other street\\Other city]{myoption}
在 .sty 里面,但当我想输入另一个值来myoption
包含\\
它时失败了。如何在选项中允许这样的字符?
编辑:添加了\ProcessLocalKeyvalOptions
答案1
您需要加载一个重新定义的包\usepackage
来确保安全前之前的kvoptions\usepackage call that uses the option. Unfortunately just loading
似乎不起作用。还有其他包定义了 key=value 包选项处理(我忘了是哪个:-) 或者只是把
\let\savednl=\\
\let\\=\relax
在包裹加载之前,然后将其放回
\let\\=\savednl
那么在包选项处理期间它将是安全的,但是在使用选项值时恢复正常。