如何优雅地用XeLaTeX设置PDF元数据

所谓PDF元数据,就是你用pdf浏览器查看其属性时会显示的“标题”、“作者”、“主题”、“关键字”等。我们可以直接通过pdf浏览器进行修改,但是,由于每次编译.tex文件时,都会刷新对应的PDF,所以直接修改显然是不现实的。

首先介绍一个简易方法:使用宏包hyperref:

\usepackage{hyperref}

然后进行设置:

\hypersetup{
pdftitle={aaa},
pdfauthor={bbb},
pdfsubject={ccc},
pdfkeywords={ddd}
}

那么你在浏览其属性时,就会显示该PDF的标题为aaa,作者为bbb,主题为ccc,关键字为ddd

此外,在加了hyperref这一宏包之后,文章中具有链接的地方都会被红框框住。取消这个红框可以

\hypersetup{hidelinks}

此外,当我们用比较正规的pdf浏览器,如Adobe Acrobat浏览PDF时,会注意到有些文件是符合PDF/A标准,如图:

这代表我们不能通过pdf浏览器直接修改其属性中的标题、作者、主题、关键字等等。也就是一种保护的状态。这一状态我们可以通过宏包pdfx来实现。

但是,这一宏包主要是适用于以pdfLaTeX编译的文档。所以,我才特意写下这篇文章,介绍在XeLaTeX中如何使用宏包pdfx.

首先,我们在.tex文件的首行(在\documentclass之前)加入:

\providecommand{\pdfxopt}{a-1b}
\begin{filecontents*}{\jobname.xmpdata}
\Title{aaa}
\Author{bbb}
\Subject{ccc}
\Keywords{ddd}
\end{filecontents*}

然后紧接着写\documentclass之类正常的东西。

(值得一提的是,pdfx宏包会自动覆盖hyperref中对元数据的修改,所以我们如果加载了宏包pdfx,那么就必须通过上述方法,而非通过hyperset的方法来修改元数据)。

接着载入宏包

\usepackage[\pdfxopt]{pdfx}

完成这一个example.tex之后,由于XeLaTeX的特殊性,直接编译会报错,需要-shell-escape。那么,有两种解决方法:

如果你只是偶尔需要用到这个功能,可以直接通过命令行来编译:

进入example.tex所在的文件夹,执行

xelatex -shell-escape example.tex

即可。

如果你是经常需要使用到这个功能,不妨利用我上一篇文章中的方法(修改TeXShop的编译行为),直接修改编译行为:

进入~/Library/TeXShop/Engines中,找到XeLaTeX.engine文件。为了保证以后还可以用到不含-shell-escape的编译器,对它进行复制,并给一个好听的名字,我用的是XeLaTeX-shellescape.tex, 对副本进行操作:

打开文件,其最后一行应该是

xelatex  -file-line-error -synctex=1 "$1"

将其修改为

xelatex  -file-line-error -synctex=1 --shell-escape "$1"

保存后,即可在TeXShop中,“排版”键右侧的的程序栏中找到了你创建的新的编译方式,我的是XeLaTeX-shellescape. 选择这个以后直接进行排版即可。

发布于 2018-06-20

文章被以下专栏收录