如何在LaTeX/XeLaTeX中将包含空格的选项传递给软件包

7
当我声明一个包含空格的选项时,LaTeX/XeLaTeX会忽略它。
在主要的.tex文件中,我有:
\usepackage[test font]{test}

在我的 .sty 文件中,我有:

\DeclareOption*{\newfontfamily\testfont[Scale=1]{\CurrentOption}}
\ProcessOptions

但是Tex引擎传递给包的选项是testfont而不是test font

因此问题是如何将包含空格的选项传递给该包。

2个回答

7

使用大括号保护它

\usepackage[{test font}]{test}

我忘记了这里实际上需要两组大括号:\documentclass{article} \begin{filecontents}{test.sty} \def\Options{} \DeclareOption*{% \edef\Options{\Options,\CurrentOption} \AtBeginDocument{\Options} } \ProcessOptions \end{filecontents} \usepackage[{{选项在此}}]{test} \begin{document} \end{document}不幸的是,内核在你的包获取任何内容之前进行空格剥离。通常的替代方法不是在包加载时获取数据,而是有一个设置宏,在加载后处理事情。这避免了失去空格。 - Joseph Wright
1
是的,用两个括号可以解决问题,但我不能要求用户这样做。 - anno
因此,我的建议是不要在加载时选择选项,而是使用仅限于前言的宏来完成相同的事情。 - Joseph Wright

1

尝试


\catcode`\ =11
\usepackage[test font]{test}
\catcode`\ =10

这很可能会失败,但失败可能是我们迄今为止所取得进展。


1
是的,这会失败,但稍作更改后,它将编译无误:在 .tex 文件中 \catcode`\ =11 \usepackage[test font]{test}在 .sty 文件中\DeclareOption*{\typeout{What's \CurrentOption}} \ProcessOptions \catcode`\ =10问题在于将 .sty 文件中的第一个 catcode 移动不起作用。 - anno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接