我可以调用两次 hypersetup 吗?

我可以调用两次 hypersetup 吗?

我已经嵌套了 Latex 类。基类设置了公司范围的样式,并包含以下内容:

\ProvidesClass{companydoc}
\LoadClass{report}
\RequirePackage{hyperref}

\hypersetup{
    colorlinks=true,
    linkcolor=blue,
    filecolor=magenta,
    urlcolor=cyan,
    bookmarks=true,
}

下一个类用于需要批准的报告。它需要添加一些自定义元数据字段:

\ProvidesClass{approvaldoc}
\LoadClass{companydoc}

\necommand{\SetApprovalData}[2]{
  \hypersetup{
    pdfinfo={
      ApprovingManager={#1},
      ApprovalDate={#2}
    }
  }
}

approvaldoc意志 会覆盖\hypersetup还是companydoc增强\hypersetup

假设增强是可能的,如果我想更进一步,下一个类专门用于费用报告:

\ProvidesClass{expensereport}
\LoadClass{approvaldoc}

\newcommand{\SetExpenseTotal}[1]{
  \hypersetup{
    pdfinfo={
      ExpenseTotal={#1}
    }
  }
}

这里,我假设我们将覆盖approvaldocpdfinfo如果是这样,我可以获取 的当前值pdfinfo,以便向其附加数据吗?

答案1

您可以根据需要随时使用它。使用经典 hyperref 时,pdfinfo 会设置在第一页的末尾。因此,如果您运行此文档

\documentclass{article}
\usepackage{hyperref}
\hypersetup{pdfinfo={ABC=aaa}}
\hypersetup{pdfinfo={CDE=ccc}}
\hypersetup{pdfinfo={CDE=ddd}}
\begin{document}
aaa
\hypersetup{pdfinfo={FGH=fff}}

\newpage 

bbbb
\hypersetup{pdfinfo={XYZ=xxx}}
\end{document}

你将获得这些条目

/ABC(\376\377\000a\000a\000a)
/CDE(\376\377\000d\000d\000d)
/FGH(\376\377\000f\000f\000f)

因此第二个 CDE 获胜,而最后一页的 XYZ 丢失。

如果您通过在开头添加来使用新的 pdfmanagement \DocumentMetadata,那么新的 hyperref 驱动程序将在文档末尾设置信息字典,并且 XYZ 也会被使用。

\DocumentMetadata{} 
\documentclass{article}
\usepackage{hyperref}
\hypersetup{pdfinfo={ABC=aaa}}
\hypersetup{pdfinfo={CDE=ccc}}
\hypersetup{pdfinfo={CDE=ddd}}
\begin{document}
aaa
\hypersetup{pdfinfo={FGH=fff}}

\newpage 

bbbb
\hypersetup{pdfinfo={XYZ=xxx}}
\end{document}

给出

/ABC <FEFF006100610061>
/CDE <FEFF006400640064>
/FGH <FEFF006600660066>
/XYZ <FEFF007800780078>

请注意,在 PDF 2.0 中,信息字典已被弃用,而应在 XMP 元数据中设置此类数据。

相关内容