编辑:显然hyperxmp
和pdfx
不相容。
我使用pdfx
,然后使用\hypersetup
和hyperxmp
包来根据需要设置元数据。我遇到了两个问题。
- 我现在使用的元数据似乎没有设置
pdfx
。 - “pdftitle 已设置”等警告。
有什么建议么?
平均能量损失
\documentclass{scrartcl}
\usepackage[a-3u,pdf17]{pdfx}
\title{BMC}
\subtitle{Pret\ldots}
\author{me}
\usepackage{hyperref}
\usepackage{hyperxmp}
\hypersetup{
pdftitle={\@title},
pdfauthor={\@author},
pdfcreator=pdfLaTeX,
pdfproducer={\@author},
pdfapart=3, % need hyperxmp for this
pdfaconformance=U % need hyperxmp for this
}
\begin{document}
Hello
\end{document}
答案1
我对 一无所知hyperxmp
,但可以肯定的是,pdfx
包加载xmpincl
可以处理预期的 XMP 元数据。您的问题可能是由于轻微的语法混乱引起的。
1. 你的方法
\hypersetup{
pdftitle={\@title},
pdfauthor={\@author},
pdfcreator=pdfLaTeX,
pdfproducer={\@author},
}
应该可以工作,只要:
- 你已经加载
hyperref
- 你还没有加载
pdfx
(见pdfx
手动的 第 17 页) - 你没有使用
\maketitle
默认情况下清空\@title
两者\@author
一位 MWE 表示:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{blindtext} % for example text only
\title{A simple title}
\author{A cute author}
\usepackage{hyperref}
\makeatletter
\hypersetup{
pdftitle={\@title},
pdfauthor={\@author},
pdfcreator={pdfLaTeX with hyperref},
pdfproducer={\@author},
pdfsubject={Some answer about metadata},
pdfkeywords={LateX hyperref},
}
\makeatother
\begin{document}
\blindtext
\end{document}
以及 PDF-Xchange 和 Adobe Reader 中显示的元数据:
。
2. 另一种选择,无需hyperref
,使用 pdfLaTeX 的命令\pdfinfo
,用法如下:
\pdfinfo {
/Title (\@title)
/Author (\@author)
/Subject (\@suject)
/Keywords (\@keywords)
}
马德里理工学院:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{blindtext}
\title{A simple title}
\author{A cute author}
%\usepackage{hyperref}
\makeatletter
\pdfinfo {
/Title (\@title)
/Author (\@author)
/Subject (Some answer about metadata)
/Keywords (LateX hyperref)
}
\makeatother
\begin{document}
\blindtext
\end{document}
3. 如果你加载 pdfx
,元数据集依赖于\jobname.xmpdata
看起来像的文件(参见pdfx
手动的 第 6 页):
\Title{Baking through the ages}
\Author{A. Baker\sep C. Kneader}
\Language{en-GB}
\Keywords{cookies\sep muffins\sep cakes}
\Publisher{Baking International}
\CoverDisplayDate{1er\ avril\ 1999}
\CoverDate{1999-04-01}
正如1.中所说,\hypersetup
方法被禁用。
第三个 MWE:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{blindtext}
\usepackage[a-3b,pdf17]{pdfx}
\title{A simple title}
\author{A cute author}
%\usepackage{hyperref}
\begin{filecontents*}{\jobname .xmpdata}
\Title{Another simple title}
\Author{A cute author}
\Subject{Some answer about metadata}
\Keywords{LateX \sep hyperref}
\end{filecontents*}
\begin{document}
\blindtext
\end{document}
请注意:
- 根据@UlrikeFischer 的回答,我用的
pdfa-3b
并不适合pdfa-3u
- 在第三种方案(pdfx)中,标题是在中编写的
.xmpdata
,独立于\title
主文档 - 创作者、制作人以及其他同类关键词通常由
pdflatex
和自动设置pdfx
,如果您真的想要自定义它们,则可能需要付出更多的努力。
答案2
pdfx
截至 2020 年 3 月,xmpincl
其使用与 不兼容的格式hyperxmp
。但您可能不需要 pdfx。Hyperxmp 是处理元数据的更优雅的方式,因为它与 无缝集成,hyperref
并且\maketitle
不需要外部文件。它适用于 PDF/A-1b 和 PDF/A-3u。
%\pdfobjcompresslevel=0 %uncomment for Texlive
\documentclass{scrartcl}
\usepackage[pdfa]{hyperref}
\usepackage{hyperxmp}
\usepackage{mmap} %only needed for pdfTeX
\title{BMC}
\subtitle{Pret\ldots}
\author{me}
\hypersetup{%
pdfapart=1,
pdfaconformance=b
}
\immediate\pdfobj stream attr{/N 3} file{sRGB.icc}
\pdfcatalog{%
/OutputIntents [
<<
/Type /OutputIntent
/S /GTS_PDFA1
/DestOutputProfile \the\pdflastobj\space 0 R
/OutputConditionIdentifier (sRGB)
/Info (sRGB)
>>
]
}
\begin{document}
lorem ipsum
\end{document}
答案3
是的,使用解决方案 1 和 2,即没有 pdfx,您可以使用\@title
\@author
和\@date
。前提是您在之前完成此操作\maketitle
,或者对其进行修补以避免被擦除。
我的回答与解决方案 3 有关,因为环境中的宏将逐字写入文件中。因此,如果您使用 128 个 ASCII 范围之外的字母,则filecontents
需要特定的编码,但编码问题较小。\write