pfgopts 选项中的空格

pfgopts 选项中的空格

有没有一种简单的方法可以在使用 的包选项中使用空格来处理pgfopts它们,这种方法对于该包来说是本地的,即我不必在 之前在主文档中包含某些包\documentclass。我想做的是fontspec使用 将字体名称传递到包内部pgfopts

答案1

基本上,这里的答案是“不”。在将任何内容传递给或任何其他键值处理包之前,LaTeX2e 内核会从类(和包)选项中删除空格pgfopts。为此存在的两个补丁(xkvltxpkvoptions-patch) 都必须在使用它们“保护”的任何选项之前加载,这意味着\documentclass在类选项之前加载。

您可以使用括号保护选项不被空格剥离,例如

\documentclass[foo={bar baz}]{mycls}

但这可能会导致问题,因为内核在执行“重复删除”时可能会出现问题。因此,一般来说,在加载包或类时最好不要使用包含空格的选项:之后再设置选项。

答案2

11年过去了,事情发生了变化。

LaTeX 内核的最新版本提供了选项列表,一次作为删除空格的处理列表,一次作为未进行任何此类更改的原始列表。

不幸的是,大多数软件包不支持处理那些空格未被删除的原始选项。我目前知道的解决方案是:

  • LaTeX 内核本身支持 key=value 选项,通过使用\DeclareKeys[<module>]{<key-definitions>}来定义键、\SetKeys[<module>]{<key=val-list>}将键设置为值以及\ProcessKeyOptions[<module>]处理当前包或类文件的选项。所有这些<module>默认为当前文件名(删除文件扩展名)。

  • expkv-opt(的一部分expkv-bundle),以获得一个与之相当的键定义前端,pgfkeys或者\DeclareKeys您还必须加载expkv-def,然后您可以\ekvdefinekeys{<set>}{<key-definitions>}定义键,\ekvset{<set>}{<key=val-list>}将键设置为值,并\ekvoProcessOptions{<set>}处理当前包或类文件的选项。

使用这两种解决方案,您只需使用

\documentclass[foo=bar baz]{mycls}

一切正常。

这里有一个关于这两种解决方案的很小的例子:

文档文件

该文件适用于以下两个类文件。

\documentclass[foo=bar baz]{mycls}

\begin{document}
The value was \texttt{\myfoo}.
\end{document}

类文件expkv-opt

\ProvidesClass{mycls}[adhoc class for an example]
\LoadClass{article}

\RequirePackage{expkv-opt,expkv-def}

\ekvdefinekeys{mycls}{store foo = \myfoo}
\ekvoProcessOptions{mycls}

使用 LaTeX 内置机制的类文件

\ProvidesClass{mycls}[adhoc class for an example]
\LoadClass{article}

\DeclareKeys{foo .store = \myfoo}
\ProcessKeyOptions\relax

在这两种情况下,输出都如下所示:

在此处输入图片描述

相关内容