如何将包含空格的选项传递给LaTeX/Xeletex中的包

如何将包含空格的选项传递给LaTeX/Xeletex中的包,latex,tex,xelatex,Latex,Tex,Xelatex,当我声明一个包含空格的选项时,LaTeX/Xeletex会吃掉它 在main.tex中,我有: \usepackage[test font]{test} 在我的.sty文件中,我有: \DeclareOption*{\newfontfamily\testfont[Scale=1]{\CurrentOption}} \ProcessOptions 但是Tex引擎将传递到包testfont选项,而不是testfont 所以问题是如何将包含空格的选项传递给包。试试看 \catcode`\ =11

当我声明一个包含空格的选项时,LaTeX/Xeletex会吃掉它

在main.tex中,我有:

\usepackage[test font]{test}
在我的.sty文件中,我有:

\DeclareOption*{\newfontfamily\testfont[Scale=1]{\CurrentOption}}
\ProcessOptions
但是Tex引擎将传递到包testfont选项,而不是testfont

所以问题是如何将包含空格的选项传递给包。

试试看


\catcode`\ =11
\usepackage[test font]{test}
\catcode`\ =10
这很可能会失败,但失败可能是我们目前所取得的进展。

用大括号保护它

\usepackage[{test font}]{test}

是的,这将失败,但只要稍作更改,它将编译无误:在.tex文件\catcode
\=11\usepackage[test font]{test}和.sty文件\DeclareOption*{\typeout{What's\CurrentOption}中\ProcessOptions\catcode
\=10问题是移动.sty文件中的第一个catcode不起作用。我忘了这里实际上需要两组大括号:\documentclass{article}\begin{filecontents}{test.sty}\def\Options{}\DeclareOption*{%\edef\Options{\Options\Options\CurrentOption}\AtBeginDocument{\Options}\ProcessOptions\end{filecontents}\usepackage[{{option here}}]{test}\begin{document}\end{document}不幸的是,内核在包获取任何内容之前进行空间剥离。通常的替代方法不是在加载包时获取数据,而是在加载后使用一个set up宏处理数据。这避免了丢失空格。是的,使用2个大括号它可以工作,但我不能要求用户这样做。因此我建议在加载时不要使用这些选项,而是使用一个只包含前导码的宏来完成同样的任务。