memoir、hyperref 和 hyperxmp 之间是否存在有害相互作用?

memoir、hyperref 和 hyperxmp 之间是否存在有害相互作用?

另一个现在相当令人困惑的问题,我正在努力将版权信息纳入由 制作的 PDF 中memoir

到目前为止的调查已经得出了这个有问题的 MWE:

% !TEX TS-program = XeLaTeX
% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage{lipsum}
\usepackage{hyperref}
\usepackage{hyperxmp}
\hypersetup{
    pdfauthor={Brent Longborough},
    pdftitle={O Hai},
    pdfcopyright={Copyright © 2012 by Brent Longborough. All rights reserved.},
    }
\begin{document}
\lipsum[1]
\end{document}

生成的 PDF 已成功将版权声明包含在元数据中,且“PDF 制作器”设置为“XeTeX 0.9997”

但是,如果我将文档类更改为:

\documentclass{memoir}

那么我就收不到版权声明,并且 PDF 制作器现在设置为“xdvipdfmx (0.7.8)”。

经过一个小时左右的搜索memoir.stymemhfixc.sty我感到很困惑。有人知道下一步该看哪里吗?

答案1

这实际上是一个时间问题:元数据必须在最后一个\clearpage命令之前插入,否则,它不会再写入 PDF 文档。然而,memoir问题\clearpage

\AtBeginDocument{\AtEndDocument{\clearpage\dol@stsheet\dol@stpage}}

因此使用的代码hyperxmp

\AtBeginDocument{%
   % [...]
      \AtEndDocument{%
        \hyxmp@find@metadata
        \hyxmp@embed@packet
      }%
   % [...]
}

为时已晚,因为\hyxmp@find@metadata\hyxmp@embed@packet在之后被执行\clearpage

为了解决这个问题,你可以手动发出

\makeatletter
  \AtEndDocument{\hyxmp@find@metadata\hyxmp@embed@packet}
\makeatother

在您的文档的序言中。

最小测试代码:

% !TEX TS-program = XeLaTeX
% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage{lipsum}
\usepackage{hyperref}
\usepackage{hyperxmp}
\makeatletter
  \AtEndDocument{\hyxmp@find@metadata\hyxmp@embed@packet}
\makeatother
\hypersetup{
    pdfauthor={Brent Longborough},
    pdftitle={O Hai},
    pdfcopyright=Copyright © 2012 by Brent Longborough. All rights reserved.}
\begin{document}
\lipsum[1]
\end{document}

相关内容