我尝试向我自己的包“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
不支持键值对。也就是说,允许使用10pt
、11pt
和等选项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,不需要这种解决方法。