将文件内容 `\input` 放入 `hyperref` 的 `pdfkeywords` 中

将文件内容 `\input` 放入 `hyperref` 的 `pdfkeywords` 中

我使用 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}
    

相关内容