如何在 pgfopts 的类选项中使用等号

如何在 pgfopts 的类选项中使用等号

我使用 创建了一个带有键值选项的自定义类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}

相关内容