如何在 \documentclass 级别传递以逗号分隔的 (xkeyval) 值列表中的逗号值?

如何在 \documentclass 级别传递以逗号分隔的 (xkeyval) 值列表中的逗号值?

\usepackage级别上,xkeyval允许我们在逗号分隔的值列表的值中插入逗号:将包含逗号的值括在括号中就足够了。例如,以下 MCE 效果很好。

\begin{filecontents*}{mypackage.sty}
\NeedsTeXFormat{LaTeX2e}[1999/12/01]%
\ProvidesClass{mypackage}[2013/11/17 v0.1 A test package]%
%
\RequirePackage{xkeyval}%
%
\def\@separator{}%
%
\DeclareOptionX{separator}[]{\def\@separator{#1}}%
\ExecuteOptionsX{separator}%
\ProcessOptionsX\relax%
%
\newcommand{\twoseparatedvalues}[2]{#1\@separator#2}%
%
\end{filecontents*}
%
\documentclass{article}
\usepackage[separator={,}]{mypackage}
%
\begin{document}
\twoseparatedvalues{foo}{bar}
\end{document}

但 AFAICS,在\documentclass级别上,将值括在括号中是不可能的。例如,编译以下 MCE:

\begin{filecontents*}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}[1999/12/01]%
\ProvidesClass{myclass}[2013/11/17 v0.1 A test class]%
%
\RequirePackage{xkeyval}%
%
\def\@separator{}%
%
\DeclareOptionX{separator}[]{\def\@separator{#1}}%
\ExecuteOptionsX{separator}%
\ProcessOptionsX\relax%
%
\newcommand{\twoseparatedvalues}[2]{#1\@separator#2}%
%
\LoadClass{article}%
\end{filecontents*}
%
\documentclass[separator={,}]{myclass}
%
\begin{document}
\twoseparatedvalues{foo}{bar}
\end{document}

引发错误:

! LaTeX Error: Missing \begin{document}.

顺便说一句,在级别上传递没有逗号的值\documentclass,然后在括号中传递带有逗号的值,效果很好,如下面的 MCE 所示。

\begin{filecontents*}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}[1999/12/01]%
\ProvidesClass{myclass}[2013/11/17 v0.1 A test class]%
%
\RequirePackage{xkeyval}%
%
\def\@separator{}%
%
\DeclareOptionX{separator}[]{\def\@separator{#1}}%
\ExecuteOptionsX{separator}%
\ProcessOptionsX\relax%
%
\newcommand{\twoseparatedvalues}[2]{#1\@separator#2}%
%
\LoadClass{article}%
\end{filecontents*}
%
\documentclass[separator=--]{myclass}
%
\begin{document}
\twoseparatedvalues{foo}{bar}

\setkeys{myclass.cls}{separator={,}}{}%
\twoseparatedvalues{foo}{bar}
\end{document}

因此我的问题是:如何在\documentclass级别上传递(xkeyval)逗号分隔的值列表中的逗号值?

答案1

在 keyval 包的文档中,kvoptionsseparat 包kvoptions-patch也有文档记录。

LATEX 的包/类选项系统有一些严重的限制,如果选项用作键和值对,则尤其会影响值部分。

因此,为了解决一些限制,您可以加载包kvoptions-patch而不会失去 -- 的功能,xkeyval但您也可以切换到kvoptions;-)

\begin{filecontents*}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}[1999/12/01]%
\ProvidesClass{myclass}[2013/11/17 v0.1 A test class]%
%
\RequirePackage{kvoptions-patch}%%%NEW
\RequirePackage{xkeyval}%
%
\def\@separator{}%
%
\DeclareOptionX{separator}[]{\def\@separator{#1}}%
\ExecuteOptionsX{separator}%
\ProcessOptionsX\relax%
%
\newcommand{\twoseparatedvalues}[2]{#1\@separator#2}%
%
\LoadClass{article}%
\end{filecontents*}
%
\documentclass[separator={,}]{myclass}
%
\begin{document}
\twoseparatedvalues{foo}{bar}
\end{document}

相关内容