传递给类的字符串参数使单词之间的空格消失

传递给类的字符串参数使单词之间的空格消失

我创建了一个类,我想在其中传递一些参数。我需要传递给包的\documentclass[parameters]{}参数是pdftitle和。我成功做到了,但如果标题中存在空格,它们就会消失。到目前为止,我在我的课程中写了以下内容:pdfsubjecthyperref

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{klass}[2019/01/02]
\LoadClass[12pt,a4paper]{report}

\RequirePackage{xkeyval}

\def\pdftitle{} % define the token to be called in the options
%   sets the token to be a recognizable command in the class options:
\define@key{klass.cls}{pdftitle}[]{\def\pdftitle{#1}}

\def\pdfsubject{}
\define@key{klass.cls}{pdfsubject}[]{\def\pdfsubject{#1}}

\ExecuteOptionsX{pdftitle,pdfsubject}
\ProcessOptionsX

\RequirePackage{hyperref}
    \hypersetup{
        pdftitle = \pdftitle,
        pdfsubject = \pdfsubject
    }

下面是该类的使用示例:

\documentclass[
    pdftitle = Do You See Spaces Here?,
    pdfsubject = Where Are My Spaces?
    ]{klass}

\begin{document}
    dummy text
\end{document}

您可以在选项中看到pdftitlepdfsubject删除了空格:

标题和主题中没有空格

尽管我可以简单地在文档中写下这些选项,但它们必须位于类文件中。所以我的问题是:如何保留作为参数传递的字符串中的空格?我正在用 编译它LuaLaTeX

答案1

你可以让这个工作:

Title:          Do You See Spaces Here?
Subject:        Where Are My Spaces?

使用输入

\documentclass[
    pdftitle = {{Do You See Spaces Here?}} ,
    pdfsubject = {{Where Are My Spaces?}}
    ]{klass}

\begin{document}
    dummy text
\end{document}

事实上,需要用括号来保护空格是核心乳胶选项处理的一个不幸的特性,而需要双括号和逗号前的空格似乎是xkeyval版本的 key=value 解析的一个特性。

有一些计划可以选择不在这里删除空格,但这是一个棘手的领域,改变任何东西都有可能破坏每个乳胶文档......

相关内容