更新:

更新:

我尝试向我自己的包“MyStyle.sty”添加一个变量标题字符串。

“MyStyle.sty” 仅包含一些用于样式指南/企业标识的包、pdf 设置和命令。

文档.tex

\documentclass[fontsize=12pt,paper=a4,headings=normal,titlepage=true]{scrbook}
\usepackage[tileString=My title]{MyStyle}
...
\begin{document}
...
\end{document}

MyStyle.sty

\usepackage{scrhack}
...
\hypersetup{ pdftitle={\titleString} }
...
\endinput

如何添加标题字串变量添加到我的包中?我需要解决方案来处理非 ASCII 字符,例如äüö我找到了类似的东西\DeclareOptions,但无法使用它。

答案1

LaTeX\DeclareOption不支持键值对。也就是说,允许使用10pt11pt和等选项12pt,但 选项fontsize=<10 or 11 or 12>不起作用。

有一些包实现了这个键值方案。下面是一个使用的解决方案kvoptions

MyStyle.sty

\RequirePackage{scrhack}

\RequirePackage{kvoptions}% load kvoptions

\SetupKeyvalOptions{%
  family=mysty@,% define the family and prefix of the options
  prefix=mysty@}

\DeclareStringOption{titleString}% declare a key-value option 'titleString'

% make kvoptions read the options passed to the package and evaluate them.
\ProcessKeyvalOptions{mysty@}

% you need hyperref to use hypersetup
\RequirePackage{hyperref}

% the value given to the option is stored in \mysty@titleString
\hypersetup{ pdftitle={\mysty@titleString} }

\endinput

文档.tex

\documentclass[fontsize=12pt,paper=a4,headings=normal,titlepage=true]{scrbook}

% you need braces to preserve spaces
\usepackage[titleString={My title}]{MyStyle}

\begin{document}

hello

\end{document}

更新:

使用包含非 ASCII 字符的选项

当你尝试使用包含非 ASCII 字符的选项时,你会收到很多警告hyperref

Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref)                removing `<something>' on input line <somewhere>.

那么在非 ASCII 字母的地方就会有一些数字。

Heiko Oberdiek 解释道这里,当\usepackage命令将选项传递给包时就会发生这种情况。

引用 Oberdiek 的话:

输入文件的 8 位字节具有类别代码 12(其他),如数字。\usepackage[utf8]{inputenc}使这些字节处于活动状态。然后,活动字符字节解码这些字节以获取 Unicode 字符表示的宏。

LaTeX 以困难的方式扩展选项(\edef),假设选项只是简单的 ASCII 字母和数字。

hyperref这种强制扩展活动 Unicode 字符的行为会生成在将元数据添加到 pdf 时拒绝的命令序列。

软件包kvoptions-patch修补了 LaTeX 选项解析,以支持键值设置值中的任意宏没有扩大它们。

因此,您必须kvoptions-patch在调用包之前加载MyStyle

\documentclass[fontsize=12pt,paper=a4,headings=normal,titlepage=true]{scrbook}
% This is necessary for unicode characters in pdfTeX
\usepackage[utf8]{inputenc}
% This patches LaTeX's package loading to allow unicode strings.
\usepackage{kvoptions-patch}

% you need braces to preserve spaces
\usepackage[titleString={größenordnungsmäßig}]{MyStyle}

\begin{document}

hello

\end{document}

当然,只有使用 pdfTeX 时才需要这样做。XeTeX 和 LuaTeX 默认支持 unicode,不需要这种解决方法。

相关内容