经过大量工作后,我用 LaTeX 完成了我的博士论文。然而,当我读到必须将 PDF 作为 PDF/A 文件提交时,我遇到了一个大问题。首先,我尝试使用 Acrobat Professional 软件进行转换(IT 人员完成了转换),但是失败了。因此,我退一步尝试通过 LaTeX 构建 PDF/A 文件,并遇到了 pdfx 包。使用此包时,我无法使用它,因为usepackage[utf8]{inputenc}
它是包的依赖项pdfx
。但是,在更改了一些已经在使用或不再存在的命令和其他数学运算符(例如)后,我遇到了变音符号不再起作用\bullet
的问题。ä ü ö ß
更新该问题与 未更新的版本有关pdfx package
。更新后,\usepackage[utf8]{inputenc}
可以使用并且一切正常。
第二个问题是生成的 PDF 不符合 PDF/A 标准。preflight and veraPDF
出现了一堆我无法处理的错误。有什么想法吗?
我希望有人能给我一些建议。
提前感谢 Tobi
答案1
更新:底部添加了 pdfx 补丁(2018 年 2 月 23 日)
今天,我对使用 LaTeX 生成 PDF/A 文件这一主题进行了一些研究,并pdfx package
找到了解决方案。实际上,我将介绍两个版本以及使用该veraPDF
应用程序进行的验证检查。好的,让我们开始吧。最简单的方法是使用 Acrobat Professional(如果有的话)。
使用 Acrobat Professional
- 将 LaTeX 文件直接编译为 PDF
- 使用已安装 Adobe 软件的电脑打开 PDF
- 使用打印机打印文件
Adobe PDF
并选择 PDF/A 选项 - 检查
veraPDF
或preflight
-> 有效 - 完成并快乐
就我而言,我无法直接转换,因为出现了一些错误。我不知道为什么,但唯一可行的方法就是上面提到的那个。
pdfx
在 LaTeX 中使用包
- 确保有最新的
pdfx
软件包可用。为此,您可以简单地使用kpsewhere pdfx.sty
Linux 中的功能来获取文件路径并检查版本(使用编辑器打开它)。就我而言,我有一个较旧的软件包,必须更新该软件包(https://ctan.org/pkg/pdfx?lang=en) - 文档中提供了所有信息以及进一步的想法,例如
how to add the meta keywords
。
例如,我使用input
函数在第一个位置添加了一个新文件(注意:在文档类定义之前)。
\input{Pre/Pre_MetaData}
\documentclass[...]
\input{Pre/Pre_Packages}
\input{Pre/Pre_Settings}
而在Pre_MetaData
文件中我们会发现这种代码(可以根据pdfx
包的文档进行扩展):
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
\begin{filecontents*}{\jobname.xmpdata}
\Title{Your Title of the work}
\Author{Tobias Holzmann\sep And Others}
\Keywords{Your\sep Keywords\sep}
\Publisher{...}
\Copyright{...}
\end{filecontents*}
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
pdfx
如果一个人在工作结束时使用该包(我的意思是你写了一本书或一篇论文并意识到你必须建立一个 PDF/A 文件),那么你可能不得不自己制作一个变通的生成命令。所以我建议所有直接知道它必须是 PDF/A 文件的人直接开始包含pdfx package
。此外 - 正如文档中所述 - 最好首先加载该包。之后,您可以重新编译文档并生成 PDF/A pdf。总结:
- 确保安装了最新的
pdfx
软件包 - 在开头就包含元数据(在文档类开始之前)
pdfx
首先包含该包(也阅读依赖列表:例如,该hyperref
包不需要再由用户包含,因为pdfx
正在加载它......)- 将配色方案添加到你的 LaTeX 项目中(你可以在源文件或此处找到一个)http://www.color.org/iccprofile.xalter)
- 消除自己定义的命令的问题(如果有的话)
- 用 pdflatex 编译它(我就是这么做的)
- 检查一下
veraPDF
,你可能会看到一堆错误,下面总结并解决了这些错误 - 如果一切顺利,恭喜你,你就完成了:)
veraPDF
和的错误pdfx
我意识到,使用第一种方法(Acrobat Pro
)时,我得到了有效的 PDF/A 结果,而使用 LaTeX 和该软件包时,preflight
我却没有通过很多检查。然而,这告诉我该软件包或 LaTeX 编写的 PDF 存在一些问题。veraPDF
pdfx
pdfx
veraPDF
在使用和验证由 LaTeX 生成的 PDF/A 文件时,我收到了一系列错误消息。preflight
一开始,我有超过五十万次检查失败,约 543,000 次。大多数错误与未包含的配色方案有关(上面列表中的第 4 点)。只需添加配色方案即可轻松解决此问题。
另一组错误很难弄清楚,它们与透明度图形和其他功能有关,而这些功能(现在我知道了)不受 pdf 版本 1.4 的支持。在我的 LaTeX 项目中,有超过 50 个 eps 文件使用该epstopdf
包转换为 pdf。这里的问题是pdfx
基于该包引入的问题而开始的。我猜这是一个错误,我已经向创建者发送了一条消息。
- 无论如何,
pdfx
软件包都会将我们创建的 PDF 版本设置为版本 1.4,该版本符合 2005 年发布的 PDF/A-1 标准;参见 ISO 190005-1(https://en.wikipedia.org/wiki/PDF/A)。 - 但是,任何为该包设置的设置/选项都
pdfx
将导致 PDF 版本 1.4。即使 PDF/A-2 规范已完成。这实际上应该会给出 PDF 版本 1.7。 - 问题就出在这里,因为
epstopdf
生成的 pdf 是 pdf 版本 1.5,而 LaTeX 文档是版本 1.4。这是不兼容的,版本 1.5 的图形 pdf 确实具有版本 1.4 不支持的功能 - 版本的差异导致了许多
veraPDF
与图形的透明度和不透明度相关的错误,尤其是ca
值等方面的错误。(https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Part-1-rules)
顺便说一句,您可以使用命令来找出 Linux 中 pdf 的版本pdfinfo myPDF.pdf
。
为了解决这个问题,我们必须破解pdfx
软件包以设置 pdf 的正确版本。为此,我们必须再次pdfx.sty
使用找到文件路径kpsewhere pdfx.sty
,然后使用自己喜欢的编辑器打开它(sudo it):
sudo vim /usr/share/texlive/texmf-dist/tex/latex/pdfx/pdfx.sty
搜索该评论 - 第 750 行(版本 v1.5.84)
%% Hyperref options for PDF/A and PDF/E
并在hyperref
内容之后添加以下行,同时根据您想要的 pdf 版本更改版本。
\thepdfminorversion=6 % Corresponds to version 1.6
为了更好地说明我的情况,我将其添加到第 815 行:
\ifpdfx@x
\@ifpackageloaded{hyperref}{%
\ifxetex
\expandafter\hypersetup\expandafter{\pdfx@pdfX@opts@xetex}
\else\ifluatex
\expandafter\hypersetup\expandafter{\pdfx@pdfX@opts@luatex}
\else
\expandafter\hypersetup\expandafter{\pdfx@pdfX@opts@pdftex}
\fi\fi
}{%
\ifxetex
\expandafter\RequirePackage\expandafter[\pdfx@pdfX@opts@xetex]{hyperref}
\else\ifluatex
\expandafter\RequirePackage\expandafter[\pdfx@pdfX@opts@luatex]{hyperref}
\else
\expandafter\RequirePackage\expandafter[\pdfx@pdfX@opts@pdftex]{hyperref}
\fi\fi
}%
\else
\ifpdfx@e
\@ifpackageloaded{hyperref}{%
\ifxetex
\expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@xetex}
\else\ifluatex
\expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@luatex}
\else
\expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@pdftex}
\fi\fi
}{%
\ifxetex
\expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@xetex]{hyperref}
\else\ifluatex
\expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@luatex]{hyperref}
\else
\expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@pdftex]{hyperref}
\fi\fi
}%
\else % generating PDF/A or ...
\@ifpackageloaded{hyperref}{%
\ifxetex
\expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@xetex}%
\else\ifluatex
\expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@luatex}%
\else
\expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@pdftex}%
\fi\fi
}{%
\ifxetex
\expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@xetex]{hyperref}
\else\ifluatex
\expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@luatex]{hyperref}
\else
\expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@pdftex]{hyperref}
\fi\fi
}%
\fi\fi
\hypersetup{pdfencoding=auto}% unicode
\expandafter\ifx\csname KV@Hyp@psdextra\endcsname\relax\else
\hypersetup{psdextra}
\fi
\thepdfminorversion=6 % Corresponds to version 1.6
之后保存文件并更新 TeX 环境:sudo texhash
。完成。现在重新编译你的 pdf,你将获得所需的 pdf 版本(用于pdfinfo
检查)。使用Acrobat Pro -> preflight
PDF/A 文件重新检查 pdf 后,我很高兴。对于该veraPDF
工具,我仍然收到 1 个与字体程序相关的错误Rule 6.3.4-1
(https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Part-1-rules#rule-634-1),但我不知道它告诉我什么。欢迎任何评论。
pdfx
包裹
在我对这个包进行调查时,pdfx
我发现作者有很多可能的选项,但这些选项没有在文档中列出。但是,这些选项不会影响任何东西(据我所知);例如,pdf16
应该将 pdf 版本更改为 1.6 的选项。但是,我意识到hyperref
上面给出的代码片段是变量\thepdfminorversion
无论如何都会更改为 4 的部分。我把它写给了创作者,希望得到一些反馈——也许你们中的一个也感兴趣,可以找出更多(我不太熟悉 LaTeX 语法)。
veraPDF
只需对此做几点说明veraPDF application
。
- 一方面,在分析错误的过程中,我能够找出问题的根源
- 另一方面,规则描述并没有提供太多信息(至少对我来说)。特别是我根据不同的 pdf 版本(最终的 pdf 文件 v1.4 和 eps 转换的 pdf v1.5)得到的错误并没有直接提示我拥有不同版本的不同 PDF。顺便说一下,这是规则 6.4-1(https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Part-1-rules#rule-64-1) 及规则 6.4-2 (https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Part-1-rules#rule-64-2)。
preflight
我根据错误的 PDF 版本和 LaTeX 的输出获得了有关 PDF 版本的想法,其中 LaTeX 用我的图片说明了版本 1.4 和 1.5 的一些内容。
抱歉,现在答案很长,但也许有人可以从中获得一些新信息并解决问题。如果我收到创作者的任何反馈,我会发表评论
最后:pdfx
现在对我的博士论文来说效果很好。感谢大家的评论,当然,如果你使用,lualatex
我想你可以使用 RobtAll 解释的方式。很棒的论坛,很棒的人!谢谢 Tobi
pdfx
修补
现在我正与 Ross Moore 联系,他给我发了一些比我的修复更合适的补丁。它现在还没有更新到官方存储库,所以我在这里分享它。