kvoptions 中的特殊字符(如 \\)

kvoptions 中的特殊字符(如 \\)

我尝试编写一个小程序包供个人使用。为此,我使用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

那么在包选项处理期间它将是安全的,但是在使用选项值时恢复正常。

相关内容