我正在尝试创建自己的样式文件 ( .sty
-file),其中或多或少定义了整个前言。背后的原因是,我的样式文件的用户只需使用我的包,而不必关心样式。
在我的样式文件中,我创建了一些新命令,如下所示:
\newcommand{\theversion}{Version 1.0}
\newcommand{\thedocumenttitle}{My Basic Title}
\newcommand{\theauthor}{John Doe}
\newcommand{\thedate}{\today}
我的样式文件的用户现在可以在他们的实际主文件中“覆盖”这些设置,renewcommand
如下所示:
\renewcommand{\theversion}{Version 2.0}
\renewcommand{\thedocumenttitle}{My Overwritten Title}
现在我的问题如下:我使用hyperref
stylefile 中的包并且还使用以下hypersetup
命令:
\hypersetup{
pdftitle={\thedocumenttitle{} - \theversion{}},
pdfauthor={\theauthor{}},
linkcolor={black},
urlcolor={black},
citecolor={black}}
虽然我在主文件中更新了命令,但 中仍使用旧值,hypersetup
因为hypersetup
是在样式中定义的,而不是在主文件中。更新发生在主文件中,因此后我猜是命令hypersetup
。
我的问题是:
- 总的来说:在样式文件中定义命令并让样式文件的用户在需要时更新这些命令是一种好方法吗?
- 我该如何解决我的
hypersetup
问题?当然,我可以将 放在hypersetup
主文件中的renewcommand
s 后面。但我不希望样式文件的用户关心这些事情。还有其他(更好的)方法吗?
答案1
您可以延迟执行\hypersetup
信息条目。但是,必须设置前 hyperref
使用它。通常这个时候是\begin{document}
,也就是说,\AtBeginDocument
可以使用前 hyperref
已加载:
\AtBeginDocument{%
\hypersetup{%
pdftitle={\thedocumenttitle\space - \theversion},%
pdfauthor={\theauthor},%
}%
}
\RequirePackage{hyperref}
评论:
- 请勿在条目内使用空括号 (
\theauthor{}
)。宏\theauthor
没有参数,括号将保留在条目中。