除了印刷版书籍外,还计划推出电子书版本,出版商需要为其设置某些 XMP 元数据。更具体地说Title
,、和。就我个人而言Author
,我还想存储创建它的 git 哈希。Copyright-Status
Copyright-Notice
Copyright-URL
这是我尝试过的:
\documentclass{scrbook}
\immediate\write18{git log -1 --format="\@percentchar H " > currentVersionLong}
\usepackage{hyperxmp}
\usepackage{hyperref}
\hypersetup{%
pdftitle={The title},
pdfauthor={The author},
pdfcopyright={\textcopyright\ 2020 by the publisher},
% pdfversionid={\IfFileExists{currentVersionLong}{\input{currentVersionLong}}{No version information}},
pdflicenseurl={https://tex.stackexchange.com}
}
\begin{document}
Just an empty document
\end{document}
然而有两个问题:
我不应该在这里看到数据吗,或者我是否需要检查未压缩的 PDF 文件Notepad++
?
- 我想从命令行读取当前 git 的内容,并通过 将其写入文件。但是hyperxmp 不喜欢
write18
该行。有什么想法吗?我可以先将其读入宏中,然后以这种方式使用它?pdfversionid={\IfFileExists{currentVersionLong}{\input{currentVersionLong}}{No version information}},
答案1
hyperxmp 填充了所谓的 xmp 元数据。您可以通过查看 pdf 来检查它们(通常它们未压缩,即使 pdf 的其余部分已压缩。它们以
<<
/Type /Metadata /Subtype /XML
/Length 8178
>>
stream
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
....
问题中的屏幕截图主要显示了 Info 字典的内容(Adobe Reader 还将使用 xmp 元数据中的值,因此可能是两者的混合)。您可以使用以下命令在其中添加更多值pdfinfo
:
\hypersetup{%
pdftitle={The title},
pdfauthor={The author},
pdfinfo={Copyright=some copyright info,
licence=https://tex.stackexchange.com}
}
会给
您可以使用 catchfile 包来捕获宏内的某些文件内容,然后在元数据中使用。
答案2
尝试这个
\documentclass{scrbook}
\usepackage{hyperxmp}
\usepackage{hyperref}
\usepackage{gitver}
\title{The title}
\author{The author}
\hypersetup{%
pdfcopyright={\textcopyright\ 2020 by the publisher},
pdfversionid=\gitVer,
pdflicenseurl={https://tex.stackexchange.com}
}
\begin{document}
Just an empty document
\end{document}
由于我没有 git 存储库,因此值为“未知”。