我使用 创建了一个带有键值选项的自定义类pgfopts
。到目前为止,一切正常。现在我想创建一个可以采用随机字符串(包括等号和逗号)的键。
下面的例子将说明我的需求。
\begin{filecontents}{\jobname.cls}
\ProvidesClass{\jobname}[2018-11-20 v1.0 SE Test package]
\RequirePackage{pgfopts}
\pgfkeys{
testproj/.cd,
mystuff/.store in = \myValue,
mystuff = {} % <-- Set default to empty
}
\ProcessPgfOptions{/testproj}
\LoadClass[\myValue]{article}
\endinput
\end{filecontents}
% ------------------
\documentclass[mystuff = {hello=SE,test=1}]{\jobname}
%\pgfkeys{/testproj/mystuff = {hello=SE}} % <-- working as aspected
\begin{document}
myValue: \myValue
\end{document}
钥匙我的东西应该接受任何字符串,并应作为类选项传递。问题是我的东西仅需“你好”作为参数,而不是括号内的全部内容“你好=SE,测试=1”。
我怎样才能设法传递一个包括等号和逗号的随机字符串作为类选项pgfopts
?
答案1
按照 Marmot 先生的要求:)
这里发生的事情与 无关pgfopts
。任何其他键值解析器都会遇到同样的问题。LaTeX 内核,由设计,从选项中去除空格,因此,例如,\documentclass[12 pt]{article}
其含义与\documentclass[12pt]{article}
(解释)。
实施的空间删除方法加上 TeX 的参数抓取规则将其转换为:
\documentclass[mystuff = {hello=SE,test=1}]{\jobname}
变成这样:
\documentclass[mystuff=hello=SE,test=1]{\jobname}
这意味着该mystuff
选项将收到,并且选项列表中hello
会出现一个流浪者。=SE,test=1
但是,如果你使用:
\documentclass[mystuff={hello=SE,test=1}]{\jobname}
然后选项列表被正确传递,因为没有空格需要删除(再次,请参阅上面链接的帖子以获得详细解释)。
LaTeX 的参数解析器不是设计来处理键值对的,而是处理在代码中打开或关闭某些内容的简单选项,所以当时并不担心这个问题。
要解决这个问题,基本上有两个选择:
删除空格。请注意,如果您在那里留下空格,选项将被误解,并且不会出现错误消息(
Unused global option
日志中的警告除外)。在(使用) 之前或将选项传递给的任何包之前加载该
kvoptions-patch
包。此包重新实现了 LaTeX 的大部分选项解析器,因此大部分这些问题都已消除。\documentclass
\RequirePackage{kvoptions-patch}