我使用 git 来管理我的 LaTeX 文档的开发,并且我有一个生成文件我使用 LaTeX 源来构建 PDF。为了确保来源,我想将最新的 git 提交哈希嵌入到生成的 PDF 的元数据中。这样,我就可以发送 PDF 并有机会找出它们的来源。
我的方法是在 makefile 中添加一些代码,将当前提交哈希存储在临时文件中,然后使用如下指令将该文件的内容读入包pdfkeywords
的字段中:hyperref
\input
\documentclass[letterpaper,12pt]{article}
\usepackage[pdftex,colorlinks=true,hidelinks]{hyperref}
\hypersetup{
pdftitle={A method for embedding git hash into PDF metadata},
pdfauthor={Joshua R. Smith},
pdfsubject={},
pdfkeywords={\input{contains_git_hash.txt}},
pdfcreator={pdfTeX}
}
\begin{document}
\maketitle
\section{Git should play well with \LaTeX}
But does it?
\end{document}
不幸的是,上述代码只是将字符串“contains_git_hash.txt”嵌入到生成的 PDF 的“关键字”元数据字段中,而不是文件的内容。
我错过了什么?
答案1
您可以使用包将catchfile
文件的内容存储在宏中:
\documentclass[letterpaper,12pt]{article}
\usepackage[pdftex,colorlinks=true,hidelinks]{hyperref}
\usepackage{catchfile}
\usepackage{trimspaces}
\CatchFileDef{\GitHash}{contains_git_hash.txt}{}
\makeatletter
\trim@spaces@in\GitHash
\makeatother
\hypersetup{
pdftitle={A method for embedding git hash into PDF metadata},
pdfauthor={Joshua R. Smith},
pdfsubject={},
pdfkeywords={\GitHash},
pdfcreator={pdfTeX}
}
\begin{document}
\title{...}
\maketitle
\section{Git should play well with \LaTeX}
But does it?
\end{document}
评论:
包
trimspaces
用于删除最后一个空格。如果文件只包含一行,也可以通过以下方式删除最后一个空格\endlinechar=-1
:\CatchFileDef{\GitHash}{contains_git_hash.txt}{\endlinechar=-1\relax}