我创建了一个类,我想在其中传递一些参数。我需要传递给包的\documentclass[parameters]{}
参数是pdftitle
和。我成功做到了,但如果标题中存在空格,它们就会消失。到目前为止,我在我的课程中写了以下内容:pdfsubject
hyperref
\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}
您可以在选项中看到pdftitle
并pdfsubject
删除了空格:
尽管我可以简单地在文档中写下这些选项,但它们必须位于类文件中。所以我的问题是:如何保留作为参数传递的字符串中的空格?我正在用 编译它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 解析的一个特性。
有一些计划可以选择不在这里删除空格,但这是一个棘手的领域,改变任何东西都有可能破坏每个乳胶文档......