diff options
author | Karl Berry <karl@freefriends.org> | 2019-04-02 21:12:27 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-04-02 21:12:27 +0000 |
commit | 67e8fdf0c52653c7559b4665070a96c9c97d0d25 (patch) | |
tree | 39156da400b34cff0c515d46d36f394375360b85 /Master/texmf-dist/source/latex | |
parent | a538e0c7c47ec0e5a275e4d86ea8e748a3854346 (diff) |
hyperxmp (2apr19)
git-svn-id: svn://tug.org/texlive/trunk@50713 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r-- | Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex | 349 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx | 1698 |
2 files changed, 1399 insertions, 648 deletions
diff --git a/Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex b/Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex index 793996a4ff6..d12291b4fc6 100644 --- a/Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex +++ b/Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex @@ -8,208 +8,153 @@ \begin{alltt} <?xpacket begin="\string\357\string\273\string\277" id="W5M0MpCehiHzreSzNTczkc9d"?> - <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-702"> - <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> - <rdf:Description rdf:about="" - xmlns:pdf="http://ns.adobe.com/pdf/1.3/"> - <pdf:Keywords> - \metavalue{energy quanta, Hertz effect, quantum physics} - </pdf:Keywords> - <pdf:Producer>\metavalue{pdfTeX-1.40.10}</pdf:Producer> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:xmpRights="http://ns.adobe.com/xap/1.0/rights/"> - <xmpRights:Marked>\metavalue{True}</xmpRights:Marked> - <xmpRights:WebStatement> - \metavalue{http://creativecommons.org/licenses/by-nc-nd/3.0/} - </xmpRights:WebStatement> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:dc="http://purl.org/dc/elements/1.1/"> - <dc:format>\metavalue{application/pdf}</dc:format> - <dc:title> - <rdf:Alt> - <rdf:li xml:lang="en"> - \metavalue{On a heuristic viewpoint concerning the production and - transformation of light} - </rdf:li> - <rdf:li xml:lang="x-default"> - \metavalue{On a heuristic viewpoint concerning the production and - transformation of light} - </rdf:li> - <rdf:li xml:lang="de"> - \metavalue{\"Uber einen die Erzeugung und Verwandlung des Lichtes - betreffenden heuristischen Gesichtspunkt} - </rdf:li> - </rdf:Alt> - </dc:title> - <dc:description> - <rdf:Alt> - <rdf:li xml:lang="en">\metavalue{photoelectric effect}</rdf:li> - <rdf:li xml:lang="x-default">\metavalue{photoelectric effect}</rdf:li> - </rdf:Alt> - </dc:description> - <dc:rights> - <rdf:Alt> - <rdf:li xml:lang="en"> - \metavalue{Copyright (C) 1905, Albert Einstein} - </rdf:li> - <rdf:li xml:lang="x-default"> - \metavalue{Copyright (C) 1905, Albert Einstein} - </rdf:li> - </rdf:Alt> - </dc:rights> - <dc:creator> - <rdf:Seq> - <rdf:li>\metavalue{Albert Einstein}</rdf:li> - </rdf:Seq> - </dc:creator> - <dc:subject> - <rdf:Bag> - <rdf:li>\metavalue{energy quanta}</rdf:li> - <rdf:li>\metavalue{Hertz effect}</rdf:li> - <rdf:li>\metavalue{quantum physics}</rdf:li> - </rdf:Bag> - </dc:subject> - <dc:date> - <rdf:Seq> - <rdf:li>\metavalue{1905-03-17}</rdf:li> - </rdf:Seq> - </dc:date> - <dc:language> - <rdf:Bag> - <rdf:li>\metavalue{en}</rdf:li> - </rdf:Bag> - </dc:language> - <dc:type> - <rdf:Bag> - <rdf:li>\metavalue{Text}</rdf:li> - </rdf:Bag> - </dc:type> - <dc:source>\metavalue{einstein.tex}</dc:source> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"> - <photoshop:AuthorsPosition> - \metavalue{Technical Assistant, Level III} - </photoshop:AuthorsPosition> - <photoshop:CaptionWriter>\metavalue{Scott Pakin}</photoshop:CaptionWriter> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/" - xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#" - xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#" - xmlns:pdfaType="http://www.aiim.org/pdfa/ns/type#" - xmlns:pdfaField="http://www.aiim.org/pdfa/ns/field#"> - <pdfaExtension:schemas> - <rdf:Bag> - <rdf:li rdf:parseType="Resource"> - <pdfaSchema:schema>IPTC Core Schema</pdfaSchema:schema> - <pdfaSchema:namespaceURI>http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/</pdfaSchema:namespaceURI> - <pdfaSchema:prefix>Iptc4xmpCore</pdfaSchema:prefix> - <pdfaSchema:property> - <rdf:Seq> - <rdf:li rdf:parseType="Resource"> - <pdfaProperty:name>CreatorContactInfo</pdfaProperty:name> - <pdfaProperty:valueType>contactinfo</pdfaProperty:valueType> - <pdfaProperty:category>external</pdfaProperty:category> - <pdfaProperty:description>contact information for the document's creator</pdfaProperty:description> - </rdf:li> - </rdf:Seq> - </pdfaSchema:property> - <pdfaSchema:valueType> - <rdf:Seq> - <rdf:li rdf:parseType="Resource"> - <pdfaType:type>contactinfo</pdfaType:type> - <pdfaType:namespaceURI>http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/</pdfaType:namespaceURI> - <pdfaType:prefix>Iptc4xmpCore</pdfaType:prefix> - <pdfaType:description>contact information</pdfaType:description> - <pdfaType:field> - <rdf:Seq> - <rdf:li rdf:parseType="Resource"> - <pdfaField:name>CiAdrExtadr</pdfaField:name> - <pdfaField:valueType>Text</pdfaField:valueType> - <pdfaField:description>contact address</pdfaField:description> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <pdfaField:name>CiAdrCity</pdfaField:name> - <pdfaField:valueType>Text</pdfaField:valueType> - <pdfaField:description>contact city</pdfaField:description> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <pdfaField:name>CiAdrRegion</pdfaField:name> - <pdfaField:valueType>Text</pdfaField:valueType> - <pdfaField:description>contact region</pdfaField:description> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <pdfaField:name>CiAdrPcode</pdfaField:name> - <pdfaField:valueType>Text</pdfaField:valueType> - <pdfaField:description>contact postal code</pdfaField:description> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <pdfaField:name>CiAdrCtry</pdfaField:name> - <pdfaField:valueType>Text</pdfaField:valueType> - <pdfaField:description>contact country</pdfaField:description> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <pdfaField:name>CiTelWork</pdfaField:name> - <pdfaField:valueType>Text</pdfaField:valueType> - <pdfaField:description>contact telephone number</pdfaField:description> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <pdfaField:name>CiEmailWork</pdfaField:name> - <pdfaField:valueType>Text</pdfaField:valueType> - <pdfaField:description>contact email address</pdfaField:description> - </rdf:li> - <rdf:li rdf:parseType="Resource"> - <pdfaField:name>CiUrlWork</pdfaField:name> - <pdfaField:valueType>Text</pdfaField:valueType> - <pdfaField:description>contact url</pdfaField:description> - </rdf:li> - </rdf:Seq> - </pdfaType:field> - </rdf:li> - </rdf:Seq> - </pdfaSchema:valueType> - </rdf:li> - </rdf:Bag> - </pdfaExtension:schemas> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/"> - <Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource"> - <Iptc4xmpCore:CiAdrExtadr>\metavalue{Kramgasse 49}</Iptc4xmpCore:CiAdrExtadr> - <Iptc4xmpCore:CiAdrCity>\metavalue{Bern}</Iptc4xmpCore:CiAdrCity> - <Iptc4xmpCore:CiAdrPcode>\metavalue{3011}</Iptc4xmpCore:CiAdrPcode> - <Iptc4xmpCore:CiAdrCtry>\metavalue{Switzerland}</Iptc4xmpCore:CiAdrCtry> - <Iptc4xmpCore:CiTelWork>\metavalue{031 312 00 91}</Iptc4xmpCore:CiTelWork> - <Iptc4xmpCore:CiEmailWork>\metavalue{aeinstein@ipi.ch}</Iptc4xmpCore:CiEmailWork> - <Iptc4xmpCore:CiUrlWork> - \metavalue{http://einstein.biz/, - https://www.facebook.com/AlbertEinstein} - </Iptc4xmpCore:CiUrlWork> - </Iptc4xmpCore:CreatorContactInfo> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:xmp="http://ns.adobe.com/xap/1.0/"> - <xmp:CreateDate>\metavalue{\todayISO}</xmp:CreateDate> - <xmp:ModifyDate>\metavalue{\todayISO}</xmp:ModifyDate> - <xmp:MetadataDate>\metavalue{\todayISO}</xmp:MetadataDate> - <xmp:CreatorTool>\metavalue{LaTeX with hyperref package}</xmp:CreatorTool> - <xmp:BaseURL> - \metavalue{http://mirror.ctan.org/macros/latex/contrib/hyperxmp/} - </xmp:BaseURL> - </rdf:Description> - <rdf:Description rdf:about="" - xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"> - <xmpMM:DocumentID> - \metavalue{uuid:6d1ac9ec-4ff2-515a-954b-648eeb4853b0} - </xmpMM:DocumentID> - <xmpMM:InstanceID> - \metavalue{uuid:059b675f-2bb6-4262-80a3-9b6c9b6759b6} - </xmpMM:InstanceID> - </rdf:Description> - </rdf:RDF> + <x:xmpmeta xmlns:x="adobe:ns:meta/"> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <rdf:Description rdf:about="" + xmlns:pdf="http://ns.adobe.com/pdf/1.3/" + xmlns:xmpRights="http://ns.adobe.com/xap/1.0/rights/" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" + xmlns:xmp="http://ns.adobe.com/xap/1.0/" + xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" + xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" + xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/" + xmlns:prism="http://prismstandard.org/namespaces/basic/3.0/" + xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/" + xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/" + xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#" + xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#" + xmlns:pdfaType="http://www.aiim.org/pdfa/ns/type#" + xmlns:pdfaField="http://www.aiim.org/pdfa/ns/field#"> + <pdfaExtension:schemas> + <rdf:Bag> +\end{alltt} +\begin{center} + $\vdots$\par + \emph{[over 100 lines of boilerplate definitions not shown]}\par + $\vdots$\par +\end{center} +\begin{alltt} + </rdf:Bag> + </pdfaExtension:schemas> + <pdf:Keywords> + \metavalue{energy quanta, Hertz effect, quantum physics} + </pdf:Keywords> + <pdf:Producer>\metavalue{pdfTeX-1.40.19}</pdf:Producer> + <pdf:PDFVersion>\metavalue{1.5}</pdf:PDFVersion> + <xmpRights:Marked>\metavalue{True}</xmpRights:Marked> + <xmpRights:WebStatement> + \metavalue{http://creativecommons.org/licenses/by-nc-nd/3.0/} + </xmpRights:WebStatement> + <dc:format>\metavalue{application/pdf}</dc:format> + <dc:title> + <rdf:Alt> + <rdf:li xml:lang="en"> + \metavalue{On a heuristic viewpoint concerning the production + and transformation of light} + </rdf:li> + <rdf:li xml:lang="x-default"> + \metavalue{On a heuristic viewpoint concerning the production + and transformation of light} + </rdf:li> + <rdf:li xml:lang="de"> + \metavalue{\"Uber einen die Erzeugung und Verwandlung des Lichtes + betreffenden heuristischen Gesichtspunkt} + </rdf:li> + </rdf:Alt> + </dc:title> + <dc:description> + <rdf:Alt> + <rdf:li xml:lang="en">\metavalue{photoelectric effect}</rdf:li> + <rdf:li xml:lang="x-default">\metavalue{photoelectric effect}</rdf:li> + </rdf:Alt> + </dc:description> + <dc:rights> + <rdf:Alt> + <rdf:li xml:lang="en"> + \metavalue{Copyright (C) 1905, Albert Einstein} + </rdf:li> + <rdf:li xml:lang="x-default"> + \metavalue{Copyright (C) 1905, Albert Einstein} + </rdf:li> + </rdf:Alt> + </dc:rights> + <dc:creator> + <rdf:Seq> + <rdf:li>\metavalue{Albert Einstein}</rdf:li> + </rdf:Seq> + </dc:creator> + <dc:subject> + <rdf:Bag> + <rdf:li>\metavalue{energy quanta}</rdf:li> + <rdf:li>\metavalue{Hertz effect}</rdf:li> + <rdf:li>\metavalue{quantum physics}</rdf:li> + </rdf:Bag> + </dc:subject> + <dc:date> + <rdf:Seq> + <rdf:li>\metavalue{1905-03-17}</rdf:li> + </rdf:Seq> + </dc:date> + <dc:language> + <rdf:Bag> + <rdf:li>\metavalue{en}</rdf:li> + </rdf:Bag> + </dc:language> + <dc:type> + <rdf:Bag> + <rdf:li>\metavalue{Text}</rdf:li> + </rdf:Bag> + </dc:type> + <dc:source>\metavalue{einstein.tex}</dc:source> + <photoshop:AuthorsPosition> + \metavalue{Technical Assistant, Level III} + </photoshop:AuthorsPosition> + <photoshop:CaptionWriter>\metavalue{Scott Pakin}</photoshop:CaptionWriter> + <xmp:CreateDate>\metavalue{2019-03-16T23:07:38-06:00}</xmp:CreateDate> + <xmp:ModifyDate>\metavalue{2019-03-16T23:07:38-06:00}</xmp:ModifyDate> + <xmp:MetadataDate>\metavalue{2019-03-16T23:07:38-06:00}</xmp:MetadataDate> + <xmp:CreatorTool>\metavalue{LaTeX with hyperref package}</xmp:CreatorTool> + <xmpMM:DocumentID> + \metavalue{uuid:6d1ac9ec-4ff2-515a-954b-648eeb4853b0} + </xmpMM:DocumentID> + <xmpMM:InstanceID> + \metavalue{uuid:3e4c4182-b182-46c9-995f-754c41d13390} + </xmpMM:InstanceID> + <xmpMM:VersionID>\metavalue{2.998e8}</xmpMM:VersionID> + <Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource"> + <Iptc4xmpCore:CiAdrExtadr>\metavalue{Kramgasse 49}</Iptc4xmpCore:CiAdrExtadr> + <Iptc4xmpCore:CiAdrCity>\metavalue{Bern}</Iptc4xmpCore:CiAdrCity> + <Iptc4xmpCore:CiAdrPcode>\metavalue{3011}</Iptc4xmpCore:CiAdrPcode> + <Iptc4xmpCore:CiAdrCtry>\metavalue{Switzerland}</Iptc4xmpCore:CiAdrCtry> + <Iptc4xmpCore:CiTelWork>\metavalue{031 312 00 91}</Iptc4xmpCore:CiTelWork> + <Iptc4xmpCore:CiEmailWork>\metavalue{aeinstein@ipi.ch}</Iptc4xmpCore:CiEmailWork> + <Iptc4xmpCore:CiUrlWork> + \metavalue{http://einstein.biz/,} + \metavalue{https://www.facebook.com/AlbertEinstein} + </Iptc4xmpCore:CiUrlWork> + </Iptc4xmpCore:CreatorContactInfo> + <prism:complianceProfile>\metavalue{three}</prism:complianceProfile> + <prism:subtitle xml:lang="en-US"> + \metavalue{Putting that bum Maxwell in his place} + </prism:subtitle> + <prism:publicationName xml:lang="de"> + \metavalue{Annalen der Physik} + </prism:publicationName> + <prism:aggregationType>\metavalue{journal}</prism:aggregationType> + <prism:volume>\metavalue{322}</prism:volume> + <prism:number>\metavalue{6}</prism:number> + <prism:pageRange>\metavalue{132-148}</prism:pageRange> + <prism:issn>\metavalue{0003-3804}</prism:issn> + <prism:eIssn>\metavalue{1521-3889}</prism:eIssn> + <prism:doi>\metavalue{10.1002/andp.19053220607}</prism:doi> + <prism:url> + \metavalue{http://www.physik.uni-augsburg.de/annalen/history/einstein-papers/190517132-148.pdf} + </prism:url> + <prism:byteCount>\metavalue{56884}</prism:byteCount> + <prism:pageCount>\metavalue{17}</prism:pageCount> + </rdf:Description> + </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?> \end{alltt} diff --git a/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx b/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx index dd4cd3b9d4c..c52380e5734 100644 --- a/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx +++ b/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx @@ -22,7 +22,7 @@ %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<package>\ProvidesPackage{hyperxmp} %<*package> - [2019/02/25 v3.5a Store hyperref metadata in XMP format] + [2019/03/31 v4.0 Store hyperref metadata in XMP format] %</package> % %<*driver> @@ -38,7 +38,7 @@ \usepackage{needspace} \usepackage{varioref} \usepackage{alltt} -\usepackage{needspace} +\usepackage{multicol} \usepackage[utf8]{inputenc} \usepackage{hyperxmp} \usepackage[unicode,bookmarksopen,bookmarksopenlevel=2,bookmarksnumbered]{hyperref} @@ -47,9 +47,13 @@ \RecordChanges % Specify this document's metadata. +\GetFileInfo{hyperxmp.dtx} \title{The \pkgname{hyperxmp} package\thanks{This document corresponds to \pkgname{hyperxmp}~\fileversion, dated \filedate.}} \author{Scott Pakin \\ \texttt{scott+hyxmp@pakin.org}} +\makeatletter +\edef\versionnumber{\expandafter\@gobble\fileversion} % Drop the "v" in the file version. +\makeatother \hypersetup{% pdfauthor={Scott Pakin}, pdftitle={The hyperxmp package}, @@ -60,8 +64,10 @@ pdfcaptionwriter={Scott Pakin}, pdfcontactemail={scott+hyxmp@pakin.org}, pdfcontacturl={http://www.pakin.org/\xmptilde scott/}, + pdfversionid={\versionnumber}, pdflang={en-US}, - baseurl={http://mirror.ctan.org/macros/latex/contrib/hyperxmp/hyperxmp.pdf} + pdfurl={http://mirror.ctan.org/macros/latex/contrib/hyperxmp/hyperxmp.pdf}, + baseurl={http://mirror.ctan.org/macros/latex/contrib/hyperxmp/} } \begin{document} @@ -82,7 +88,7 @@ %</driver> % \fi % -% \CheckSum{1845} +% \CheckSum{2082} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -130,8 +136,10 @@ % \protect\pkgname{hyperxmp} code} % \changes{v3.4}{2017/11/04}{Use \protect\pkgname{ifmtarg} to test for % empty arguments, including non-empty but all spaces} +% \changes{v4.0}{2019/03/14}{Include all metadata within a single +% \protect\xmpterm{rdf:Description} block} % -% \GetFileInfo{hyperxmp.dtx} +% ^^A \GetFileInfo{hyperxmp.dtx} % % \DoNotIndex{,\,\ ,\!,\",\#,\(,\),\*,\<,\>,\@cons,\@empty} % \DoNotIndex{\@ifpackageloaded,\@ifundefined,\@nil,\@tempcnta,\@tempcntb} @@ -152,7 +160,7 @@ % \ifx\xmptermopt\@empty % \mbox{\textsf{#2}}^^A % \else -% \mbox{\textsf{#2}}\slash\mbox{\textsf{#1}}^^A +% \mbox{\textsf{#2}}.\mbox{\textsf{#1}}^^A % \SortIndex{#1}{\textsf{#1}}^^A % \fi % \SortIndex{#2}{\textsf{#2}}^^A @@ -165,6 +173,12 @@ % \SortIndex{#1}{\textsf{#1} (option)}^^A % \index{options=\textsf{#1}}^^A % } +% ^^A \moptname is the same as \optname but also typesets the +% ^^A option name in the margin. +% \DeclareRobustCommand{\moptname}[1]{^^A +% \optname{#1}^^A +% \marginpar{\raggedleft\strut\mbox{\textsf{#1}}}^^A +% } % \DeclareRobustCommand{\acrostyle}[1]{\textsc{\MakeLowercase{#1}}} % \DeclareRobustCommand{\acro}[1]{^^A % \mbox{\acrostyle{#1}}^^A @@ -172,7 +186,7 @@ % } % \newcounter{note} % \newcommand{\usagenote}[1]{^^A -% \addtocounter{note}{1}^^A +% \refstepcounter{note}^^A % \paragraph{Note~\thenote: #1}% % } % @@ -305,37 +319,53 @@ % \pkgname{hyperxmp} knows how to embed all of the following types of % metadata within a document: % +% \label{page:begin-metadata-list} % \begin{itemize} \raggedright -% \item authors (\xmpterm{dc:creator}) -% \item base \acro{URL} (\xmpterm{xmp:BaseURL}) -% \item contact address +% \item address of primary author % (\xmpterm[CiAdrExtadr]{Iptc4xmpCore:CreatorContactInfo}, % \xmpterm[CiAdrCity]{Iptc4xmpCore:CreatorContactInfo}, % \xmpterm[CiAdrRegion]{Iptc4xmpCore:CreatorContactInfo}, % \xmpterm[CiAdrPcode]{Iptc4xmpCore:CreatorContactInfo}, and % \xmpterm[CiAdrCtry]{Iptc4xmpCore:CreatorContactInfo}) -% \item contact email address(es) (\xmpterm[CiEmailWork]{Iptc4xmpCore:CreatorContactInfo}) -% \item contact telephone number(s) (\xmpterm[CiTelWork]{Iptc4xmpCore:CreatorContactInfo}) -% \item contact \acro{URL}(s) (\xmpterm[CiUrlWork]{Iptc4xmpCore:CreatorContactInfo}) +% \item author(s) (\xmpterm{dc:creator}) +% \item base \acro{URL} for relative references (\xmpterm{xmp:BaseURL}) +% \item book edition (\xmpterm{prism:bookEdition}) % \item copyright (\xmpterm{dc:rights} and \xmpterm{xmpRights:Marked}) % \item date (\xmpterm{dc:date}, \xmpterm{xmp:CreateDate}, % \xmpterm{xmp:ModifyDate}, and \xmpterm{xmp:MetadataDate}) -% \item document identifier (\xmpterm{xmpMM:DocumentID}) -% \item document instance identifier (\xmpterm{xmpMM:InstanceID}) -% \item document type (\xmpterm{dc:type}) +% \item \acro{DOI} (\xmpterm{prism:doi}) +% \item email address(es) of primary author (\xmpterm[CiEmailWork]{Iptc4xmpCore:CreatorContactInfo}) % \item file format (\xmpterm{dc:format}) +% \item file name of main \LaTeX\ source file (\xmpterm{dc:source}) +% \item file size in bytes (\xmpterm{prism:byteCount}) +% \item \acro{ISBN} (\xmpterm{prism:isbn}) +% \item \acro{ISSN}---both print (\xmpterm{prism:issn}) and electronic (\xmpterm{prism:eIssn}) +% \item issue number of parent publication (\xmpterm{prism:number}) % \item keywords (\xmpterm{pdf:Keywords} and \xmpterm{dc:subject}) -% \item language (\xmpterm{dc:language}) -% \item \LaTeX\ file name (\xmpterm{dc:source}) +% \item language used (\xmpterm{dc:language}) % \item license \acro{URL} (\xmpterm{xmpRights:WebStatement}) % \item metadata writer (\xmpterm{photoshop:CaptionWriter}) +% \item page count (\xmpterm{prism:pageCount}) +% \item page range(s) (\xmpterm{prism:pageRange}) % \item \acro{PDF} version (\xmpterm{pdf:PDFVersion}) % \item \acro{PDF}-generating tool (\xmpterm{pdf:Producer} and \xmpterm{xmp:CreatorTool}) % \item \acro{PDF/A} compliance level and version (\xmpterm{pdfaid:part} and \xmpterm{pdfaid:conformance}) -% \item primary author's position/title (\xmpterm{photoshop:AuthorsPosition}) +% \item position/title of primary author (\xmpterm{photoshop:AuthorsPosition}) +% \item publication name of parent publication (\xmpterm{prism:publicationName}) % \item summary (\xmpterm{dc:description}) +% \item subtitle (\xmpterm{prism:subtitle}) +% \item telephone number(s) of primary author (\xmpterm[CiTelWork]{Iptc4xmpCore:CreatorContactInfo}) % \item title (\xmpterm{dc:title}) +% \item type of document (\xmpterm{dc:type}) +% \item type of parent publication (\xmpterm{prism:aggregationType}) +% \item \acro{URL} of the document (\xmpterm{prism:url}) +% \item \acro{URL}(s) of the primary author (\xmpterm[CiUrlWork]{Iptc4xmpCore:CreatorContactInfo}) +% \item \acro{UUID} for the document (\xmpterm{xmpMM:DocumentID}) +% \item \acro{UUID} for the document instance (\xmpterm{xmpMM:InstanceID}) +% \item version identifier for the document (\xmpterm{xmpMM:VersionID}) +% \item volume number of parent publication (\xmpterm{prism:volume}) % \end{itemize} +% \label{page:end-metadata-list} % % \noindent % More types of metadata may be added in a future release. @@ -371,7 +401,9 @@ % |\hypersetup{|\dots|}|). \pkgname{hyperxmp} will construct its % \acro{XMP} data using the following \pkgname{hyperref} options: % -% \begin{itemize} +% \begin{multicols}{3} +% \raggedcolumns +% \begin{itemize} % \item \optname{baseurl} % \item \optname{pdfauthor} % \item \optname{pdfcreationdate} @@ -381,17 +413,22 @@ % \item \optname{pdfproducer} % \item \optname{pdfsubject} % \item \optname{pdftitle} -% \end{itemize} +% \end{itemize} +% \end{multicols} % % \noindent % \mbox{}\label{page:begin-new-options} % \pkgname{hyperxmp} instructs \pkgname{hyperref} also to accept the % following options, which have meaning only to \pkgname{hyperxmp}: % -% \begin{itemize} +% \begin{multicols}{3} +% \raggedcolumns +% \begin{itemize} % \item \optname{pdfaconformance} % \item \optname{pdfapart} % \item \optname{pdfauthortitle} +% \item \optname{pdfbookedition} +% \item \optname{pdfbytes} % \item \optname{pdfcaptionwriter} % \item \optname{pdfcontactaddress} % \item \optname{pdfcontactcity} @@ -404,43 +441,167 @@ % \item \optname{pdfcopyright} % \item \optname{pdfdate} % \item \optname{pdfdocumentid} +% \item \optname{pdfdoi} +% \item \optname{pdfeissn} % \item \optname{pdfinstanceid} +% \item \optname{pdfisbn} +% \item \optname{pdfissn} +% \item \optname{pdfissuenum} % \item \optname{pdflicenseurl} % \item \optname{pdfmetadate} % \item \optname{pdfmetalang} +% \item \optname{pdfpagecount} +% \item \optname{pdfpagerange} +% \item \optname{pdfpublication} +% \item \optname{pdfpubtype} % \item \optname{pdfsource} +% \item \optname{pdfsubtitle} % \item \optname{pdftype} -% \end{itemize} +% \item \optname{pdfurl} +% \item \optname{pdfversionid} +% \item \optname{pdfvolumenum} +% \end{itemize} +% \end{multicols} % \label{page:end-new-options} % -% The two most obscure---but alphabetically first---of the above, -% \optname{pdfaconformance} and \optname{pdfapart}, are used in -% conjunction with \pkgname{hyperref}'s \optname{pdfa} option to claim a -% particular \acro{PDF/A} standard by which the document abides. They -% default to \optname{pdfapart}=|1| and \optname{pdfaconformance}=|B|, -% indicating the \acro{PDF/A}-\textsc{1b} standard. These can be -% changed (with caution) to assert that the document abides by a -% different standard (e.g.,~\acro{PDF/A}-\textsc{2u}). -% -% \optname{pdfauthortitle} indicates the primary author's position or -% title. \optname{pdfcaptionwriter} specifies the name of the person +% +% \subsection{Option descriptions} +% +% The document title is specified as normal for \pkgname{hyperref} with +% \moptname{pdftitle}, but see Note~\ref{note:multilingual} on +% page~\pageref{note:multilingual} for instructions on how to specify a +% title in multiple languages. \pkgname{hyperxmp} introduces a +% complementary \moptname{pdfsubtitle} option: +% +% \begin{verbatim} +% pdftitle={Frankenstein}, +% pdfsubtitle={The Modern Prometheus}, +% \end{verbatim} +% +% Unfortunately, the subtitle can appear in only one language. It +% assumed to be the same language as the document language +% (\optname{pdflang}) but can be overridden by preceding the text with a +% bracketed \acro{ISO} \mbox{639-1} two-letter language code and an +% optional \acro{ISO} \mbox{3166-1} two-letter region code. See the +% example below for \optname{pdfpublication}. +% +% \Needspace{6\baselineskip} +% \moptname{pdfauthortitle} indicates the primary author's position or +% title. \moptname{pdfcaptionwriter} specifies the name of the person % who added the metadata to the document. The next eight items describe % how to contact the person or institution responsible for the document -% (the ``contact''). \optname{pdfcontactaddress} is the contact's +% (the ``contact''). \moptname{pdfcontactaddress} is the contact's % street address and can include the institution name if the contact is -% an institution; \optname{pdfcontactcity} is the contact's city. -% \optname{pdfcontactcountry} is the contact's country; -% \optname{pdfcontactemail} is the contact's email address (or multiple, -% comma-separated email addresses); \optname{pdfcontactphone} is the -% contact's telephone number (or multiple, comma-separated telephone -% numbers); \optname{pdfcontactpostcode} is the contact's postal code; -% \optname{pdfcontactregion} is the contact's state or province; and -% \optname{pdfcontacturl} is the contact's \acro{URL} (or multiple, -% comma-separated \acro{URL}s). +% an institution; \moptname{pdfcontactcity} is the contact's city; +% \moptname{pdfcontactcountry} is the contact's country; +% \moptname{pdfcontactemail} is the contact's email address (or +% multiple, comma-separated email addresses); \moptname{pdfcontactphone} +% is the contact's telephone number (or multiple, comma-separated +% telephone numbers); \moptname{pdfcontactpostcode} is the contact's +% postal code; \moptname{pdfcontactregion} is the contact's state or +% province; and \moptname{pdfcontacturl} is the contact's \acro{URL} (or +% multiple, comma-separated \acro{URL}s). +% +% \Needspace{2\baselineskip} +% \moptname{pdfcopyright} defines the copyright text, and +% \moptname{pdflicenseurl} identifies a \acro{URL} that points to the +% document's license agreement. +% +% \moptname{pdfmetalang} indicates the natural language in which certain +% metadata---specifically, the document's title, subject, and copyright +% statement---are written. The language should be specified using an +% \acro{IETF} language tag~\cite{IANA2011:lang-tags}, for example, +% ``|en|'' for English, ``|en-US|'' for specifically United States +% English, ``|de|'' for German, and so forth. If \optname{pdfmetalang} +% is not specified, \pkgname{hyperxmp} assumes the metadata language is +% the same as the document language (\pkgname{hyperref}'s +% \moptname{pdflang} option). If neither \optname{pdfmetalang} nor +% \optname{pdflang} is specified, \pkgname{hyperxmp} uses only +% ``|x-default|'' as the metadata language. Note that ``|x-default|'' +% metadata are always included in addition to the specified metadata +% language, as the user reading the document may not have specified a +% language preference. +% +% \acro{XMP} can include a universally unique identifier (\acro{UUID}) +% for each document and for each instance of a given document. By +% default, \pkgname{hyperxmp} assigns a version~4 (i.e.,~pseudorandom) +% \acro{UUID}~\cite{Leach2005:uuid} for each of these. However, a +% document can alternatively specify a particular document identifier +% using \moptname{pdfdocumentid} and (not normally recommended) a +% particular instance identifier using \moptname{pdfinstanceid}. These +% should be of the form +% \texttt{uuid:}\textit{xxxxxxxx}\texttt{-}\textit{xxxx}\texttt{-}\textit{xxxx}\texttt{-}\textit{xxxx}\texttt{-}\textit{xxxxxxxxxxxx}, +% where ``\textit{x}'' is a lowercase hexadecimal number. For example, +% \texttt{uuid:53ab7f19-a48c-5177-8bb2-403ad907f632} is a valid argument +% to \optname{pdfdocumentid} (or \optname{pdfinstanceid}). See Leach, +% Mealling, and Salz's \acro{UUID} specification document for details on +% how to produce the various forms of +% \acro{UUID}s~\cite{Leach2005:uuid}. A more freeform mechanism than +% \optname{pdfinstanceid} for versioning documents is available via +% \moptname{pdfversionid}. The version specified by +% \optname{pdfversionid} can be incremented as~|1|, |2|, |3|,~\dots; +% identified with a hierarchical numbering scheme (e.g.,~this document +% is versioned \texttt{\versionnumber} to match the package version); or +% labeled using any other approach. One possibility is to use a +% revision number or commit hash from the version-control software +% maintaining the document. For example, the |\gitVer| macro from the +% \pkgname{gitver} package is an expandable (see +% Note~\ref{note:expandable} on page~\pageref{note:expandable}) version +% of the current \href{https://git-scm.com/}{Git} hash that can suitably +% be passed to \optname{pdfversionid}. +% +% Already-published documents can be identified in a number of ways. +% \moptname{pdfisbn} specifies the \acro{ISBN}. \moptname{pdfissn} +% refers to the \acro{ISSN} of the \emph{print} version of the document +% while \moptname{pdfeissn} refers to the \acro{ISSN} of the +% \emph{electronic} version of the document. \moptname{pdfdoi} +% specifies the \acro{DOI} and should include only the \acro{DOI} name +% without any \acro{URL} prefix. For example, specify +% |pdfdoi={10.1145/3149526.3149532}|, \emph{not} +% |pdfdoi={https://doi.org/10.1145/3149526.3149532}|. +% \moptname{pdfurl} points to the complete \acro{URL} for the document. +% In contrast, \moptname{baseurl} points one level up and is used to +% resolve relative \acro{URL}s. +% +% Already-published documents can further be identified by the +% publication in which they appear. \moptname{pdfpublication} specifies +% the title of the journal, magazine, or other parent document. The +% title language is assumed to be the same as the document language +% (\optname{pdflang}) but can be overridden by preceding the text with a +% bracketed \acro{ISO} \mbox{639-1} two-letter language code and an +% optional \acro{ISO} \mbox{3166-1} two-letter region code. For +% example, |pdfpublication={[fr]Charlie Hedbo}| indicates a +% French-language title. Were the language or pronunciation differences +% significant, |fr-FR| would indicate specifically the French spoken in +% France, as opposed to that spoken in, say, Canada (|fr-CA|) or Belgium +% (|fr-BE|). +% +% \moptname{pdfpubtype} indicates the type of publication in which the +% document was published. This should be one of the \acro{PRISM} +% aggregation types~\cite{PRISM2012:cont-voc} such as |book|, |journal|, +% |magazine|, |manual|, |report|, or |whitepaper|. For publications in +% journals, magazines, and similar periodicals, a document can specify +% the volume number with \moptname{pdfvolumenum} and the issue number +% within the volume with \moptname{pdfissuenum}. +% \moptname{pdfpagerange} indicates the page numbers at which the +% document appears within the publication. The intention is that this +% be a comma-separated list of dash-separated ranges, as in +% |pdfpagerange={1,4-5}|. See Note~\ref{note:page-counting} on +% page~\pageref{note:page-counting} for advice on how to assign +% \optname{pdfpagerange} semi-automatically. For books, +% \moptname{pdfbookedition} names the edition of the book. This is +% specified as text, not a number. As with \optname{pdfpublication} +% (above), \optname{pdfbookedition} accepts a bracketed language code, +% as in |pdfbookedition={[en]Second| |edition}|. +% +% The number of pages in the published, print version of the document +% can be expressed with \moptname{pdfnumpages}. +% Note~\ref{note:page-counting} on page~\pageref{note:page-counting} +% explains how to automatically assign a value to \optname{pdfnumpages}. % % \acro{XMP} metadata can include a number of dates (in fact, % timestamps, as they include both date and time components). -% \optname{pdfdate} specifies the document date. It is analogous to the +% \moptname{pdfdate} specifies the document date. It is analogous to the % \LaTeX\ |\date| command, and, like |\date|, defaults to the date the % document was built. It must be specified in either \acro{XMP} % format~\cite{Adobe2012:XMP} or \acro{PDF} format~\cite{Adobe2008:PDF}. @@ -453,16 +614,16 @@ % midnight U.S. Mountain Daylight Time (UTC-6) on the 23rd day of % September in the year~2014 should be written as % \texttt{2014-09-23T14:15:09-06:00}. This can be truncated (with loss -% of information) to \texttt{2014-09-23T14:15:09} or -% \texttt{2014-09-23T14:15} or \texttt{2014-09-23} or \texttt{2014-09} +% of information) to \texttt{2014-09-23T14:15:09}, +% \texttt{2014-09-23T14:15}, \texttt{2014-09-23}, \texttt{2014-09}, % or \texttt{2014} but no other subsets. \acro{PDF} dates are written % in the form |D:|\textsc{yyyymmdd}hhmmss|+|\textsc{tt}|'|tt|'|. The % same date in the preceding example would be written as % \texttt{D:20140923141509-06'00'} in \acro{PDF} format. % % The document's creation date, modification date, and metadata date are -% normally set automatically, but \optname{pdfcreationdate}, -% \optname{pdfmoddate}, and \optname{pdfmetadate} can be used to +% normally set automatically, but \moptname{pdfcreationdate}, +% \moptname{pdfmoddate}, and \moptname{pdfmetadate} can be used to % override the defaults. Like \optname{pdfdate}, \optname{pdfmetadate} % can be specified in either \acro{XMP} or \acro{PDF} format. However, % because \pkgname{hyperref} defines \optname{pdfcreationdate} and @@ -472,119 +633,123 @@ % would need to specify any of \optname{pdfcreationdate}, % \optname{pdfmoddate}, or \optname{pdfmetadate}. % -% \optname{pdfcopyright} defines the copyright text, and -% \optname{pdflicenseurl} identifies a \acro{URL} that points to the -% document's license agreement. -% -% \acro{XMP} can include a universally unique identifier (\acro{UUID}) -% for each document and for each instance of a given document. By -% default, \pkgname{hyperxmp} assigns a version~4 (i.e.,~pseudorandom) -% \acro{UUID}~\cite{Leach2005:uuid} for each of these. However, a -% document can alternatively specify a particular document identifier -% using \optname{pdfdocumentid} and (not normally recommended) a -% particular instance identifier using \optname{pdfinstanceid}. These -% should be of the form -% \texttt{uuid:}\textit{xxxxxxxx}\texttt{-}\textit{xxxx}\texttt{-}\textit{xxxx}\texttt{-}\textit{xxxx}\texttt{-}\textit{xxxxxxxxxxxx}, -% where ``\textit{x}'' is a lowercase hexadecimal number. For example, -% \texttt{uuid:53ab7f19-a48c-5177-8bb2-403ad907f632} is a valid argument -% to \optname{pdfdocumentid} (or \optname{pdfinstanceid}). See Leach, -% Mealling, and Salz's \acro{UUID} specification document for details on -% how to produce the various forms of -% \acro{UUID}s~\cite{Leach2005:uuid}. -% -% \optname{pdfmetalang} indicates the natural language in which certain -% metadata---specifically, the document's title, subject, and copyright -% statement---are written. The language should be specified using an -% \acro{IETF} language tag~\cite{IANA2011:lang-tags}, for example, -% ``|en|'' for English, ``|en-US|'' for specifically United States -% English, ``|de|'' for German, and so forth. If \optname{pdfmetalang} -% is not specified, \pkgname{hyperxmp} assumes the metadata language is -% the same as the document language (\pkgname{hyperref}'s -% \optname{pdflang} option). If neither \optname{pdfmetalang} nor -% \optname{pdflang} is specified, \pkgname{hyperxmp} uses only -% ``|x-default|'' as the metadata language. Note that ``|x-default|'' -% metadata are always included in addition to the specified metadata -% language, as the user reading the document may not have specified a -% language preference. +% \moptname{pdftype} describes the type of document being produced. +% This refers to ``the nature or genre of the +% resource''~\cite{Adobe2012:XMP} such as |poem|, |novel| or |working| +% |paper|, as opposed to the file format (always |application/pdf| when +% generated by \pkgname{hyperxmp}). Although \optname{pdftype} can be +% assigned an arbitrary piece of text, the \acro{XMP} specification +% recommends selecting types from a ``controlled vocabulary'' such as +% the \acro{DCMI} Type Vocabulary~\cite{DCMI2012:meta-terms}. The +% \acro{DCMI} Type Vocabulary currently consists of only |Collection|, +% |Dataset|, |Event|, |Image|, |InteractiveResource|, |MovingImage|, +% |PhysicalObject|, |Service|, |Software|, |Sound|, |StillImage|, and +% |Text|. \optname{pdftype} defaults to |Text|, which refers to +% ``books, letters, dissertations, poems, newspapers, articles, archives +% of mailing lists,''~\cite{DCMI2012:meta-terms} and other forms of +% text---all things \LaTeX\ is commonly used to typeset. % -% A rarely needed option, \optname{pdfsource}, overrides the name of the -% \LaTeX\ source file. It defaults to ``|\jobname.tex|'' but can be +% The \moptname{pdfbytes} option expresses the document's file size in +% bytes. The intention is for this to be used to display an estimate of +% download time to a user or to serve as a quick check on whether a file +% was transmitted correctly between systems. This feature is easiest to +% use in conjunction with \pdfTeX's |\pdffilesize| primitive: +% ``|pdfbytes={\pdffilesize{\jobname.pdf}}|''. Note that this requires +% a second run of |pdftex| because it queries the size of the \acro{PDF} +% file from the \emph{previous} run. +% +% A rarely needed option, \moptname{pdfsource}, overrides the name of +% the \LaTeX\ source file. It defaults to |\jobname.tex| but can be % replaced by any other string. If \optname{pdfsource} is given an % empty argument, no document source will be specified at all. % -% \optname{pdftype} describes the type of document being produced. This -% refers to ``the nature or genre of the resource''~\cite{Adobe2012:XMP} -% such as ``|poem|'', ``|novel|'' or ``|working paper|'', as opposed to -% the file format (always ``|application/pdf|'' when generated by -% \pkgname{hyperxmp}). Although \optname{pdftype} can be assigned an -% arbitrary piece of text, the \acro{XMP} specification recommends -% selecting types from a ``controlled vocabulary'' such as the DCMI Type -% Vocabulary~\cite{DCMI2012:meta-terms}. The DCMI Type Vocabulary -% currently consists of only ``|Collection|'', ``|Dataset|'', -% ``|Event|'', ``|Image|'', ``|InteractiveResource|'', -% ``|MovingImage|'', ``|PhysicalObject|'', ``|Service|'', -% ``|Software|'', ``|Sound|'', ``|StillImage|'', and ``|Text|''. -% \optname{pdftype} defaults to ``|Text|'', which refers to ``books, -% letters, dissertations, poems, newspapers, articles, archives of -% mailing lists,''~\cite{DCMI2012:meta-terms} and other forms of -% text---all things \LaTeX\ is commonly used to typeset. +% Two other rarely needed options, \moptname{pdfaconformance} and +% \moptname{pdfapart}, are used in conjunction with \pkgname{hyperref}'s +% \optname{pdfa} option to claim a particular \acro{PDF/A} standard by +% which the document abides. They default to \optname{pdfapart}=|1| and +% \optname{pdfaconformance}=|B|, indicating the \acro{PDF/A}-\textsc{1b} +% standard. These can be changed (with caution) to assert that the +% document abides by a different standard +% (e.g.,~\acro{PDF/A}-\textsc{2u}). +% +% \bigskip % % It is usually more convenient to provide values for those options using % \pkgname{hyperref}'s |\hypersetup| command than on the |\usepackage| % command line. See % \href{http://mirrors.ctan.org/macros/latex/contrib/hyperref/hyperref.pdf}{the -% \pkgname{hyperref} manual} for more information. The following is a -% sample \LaTeX\ document that provides values for most of the metadata -% options that \pkgname{hyperxmp} recognizes: +% \pkgname{hyperref} manual} for more information. +% +% +% \subsection{A complete example} +% +% The following is a sample \LaTeX\ document that provides values for +% most of the metadata options that \pkgname{hyperxmp} recognizes: % % \Needspace{4\baselineskip} % \refstepcounter{pagelabel} % \label{page:begin-sample-doc} % \begin{verbatim} -% \documentclass{article} -% \usepackage{hyperxmp} -% \usepackage[unicode]{hyperref} -% \title{% -% On a heuristic viewpoint concerning the production and -% transformation of light} -% \author{Albert Einstein} -% \date{March 17, 1905} -% \hypersetup{% -% pdftitle={% -% On a heuristic viewpoint concerning the production and -% transformation of light}, -% pdfauthor={Albert Einstein}, -% pdfauthortitle={Technical Assistant, Level III}, -% pdfdate={1905-03-17}, -% pdfcopyright={Copyright (C) 1905, Albert Einstein}, -% pdfsubject={photoelectric effect}, -% pdfkeywords={energy quanta, Hertz effect, quantum physics}, -% pdflicenseurl={http://creativecommons.org/licenses/by-nc-nd/3.0/}, -% pdfcaptionwriter={Scott Pakin}, -% pdfcontactaddress={Kramgasse 49}, -% pdfcontactcity={Bern}, -% pdfcontactpostcode={3011}, -% pdfcontactcountry={Switzerland}, -% pdfcontactphone={031 312 00 91}, -% pdfcontactemail={aeinstein@ipi.ch}, -% pdfcontacturl={% -% http://einstein.biz/, -% https://www.facebook.com/AlbertEinstein -% }, -% pdfdocumentid={uuid:6d1ac9ec-4ff2-515a-954b-648eeb4853b0}, -% pdflang={en}, -% pdfmetalang={en}, -% baseurl={http://mirror.ctan.org/macros/latex/contrib/hyperxmp/} -% } -% \XMPLangAlt{de}{pdftitle={Ãœber einen die Erzeugung und Verwandlung -% des Lichtes betreffenden heuristischen Gesichtspunkt}} -% \begin{document} -% \maketitle -% A profound formal difference exists between the theoretical -% concepts that physicists have formed about gases and other -% ponderable bodies, and Maxwell's theory of electromagnetic -% processes in so-called empty space\dots -% \end{document} +% \documentclass{article} +% \usepackage[utf8]{inputenc} +% \usepackage{hyperxmp} +% \usepackage[unicode]{hyperref} +% +% \title{% +% On a heuristic viewpoint concerning the production and +% transformation of light} +% \author{Albert Einstein} +% \date{March 17, 1905} +% +% \hypersetup{% +% pdftitle={% +% On a heuristic viewpoint concerning the production and +% transformation of light}, +% pdfsubtitle={[en-US]Putting that bum Maxwell in his place}, +% pdfauthor={Albert Einstein}, +% pdfauthortitle={\xmpquote{Technical Assistant\xmpcomma\ Level III}}, +% pdfdate={1905-03-17}, +% pdfcopyright={Copyright (C) 1905, Albert Einstein}, +% pdfsubject={photoelectric effect}, +% pdfkeywords={energy quanta, Hertz effect, quantum physics}, +% pdflicenseurl={http://creativecommons.org/licenses/by-nc-nd/3.0/}, +% pdfcaptionwriter={Scott Pakin}, +% pdfcontactaddress={Kramgasse 49}, +% pdfcontactcity={Bern}, +% pdfcontactpostcode={3011}, +% pdfcontactcountry={Switzerland}, +% pdfcontactphone={031 312 00 91}, +% pdfcontactemail={aeinstein@ipi.ch}, +% pdfcontacturl={% +% http://einstein.biz/, +% https://www.facebook.com/AlbertEinstein +% }, +% pdfdocumentid={uuid:6d1ac9ec-4ff2-515a-954b-648eeb4853b0}, +% pdfversionid={2.998e8}, +% pdfpublication={[de]Annalen der Physik}, +% pdfpubtype={journal}, +% pdfvolumenum={322}, +% pdfissuenum={6}, +% pdfpagerange={132-148}, +% pdfnumpages={17}, +% pdfissn={0003-3804}, +% pdfeissn={1521-3889}, +% pdflang={en}, +% pdfmetalang={en}, +% pdfurl={http://www.physik.uni-augsburg.de/annalen/history/einstein-papers/1905_17_132-148.pdf}, +% pdfdoi={10.1002/andp.19053220607}, +% pdfbytes={\pdffilesize{\jobname.pdf}} % Requires pdflatex +% } +% \XMPLangAlt{de}{pdftitle={Ãœber einen die Erzeugung und Verwandlung des +% Lichtes betreffenden heuristischen Gesichtspunkt}} +% +% \begin{document} +% \maketitle +% A profound formal difference exists between the theoretical +% concepts that physicists have formed about gases and other +% ponderable bodies, and Maxwell's theory of electromagnetic +% processes in so-called empty space\dots +% \end{document} % \end{verbatim} % \refstepcounter{pagelabel} % \label{page:end-sample-doc} @@ -635,51 +800,68 @@ % \label{fig:xmp-metadata-2} % \end{figure} % -% \usagenote{Acrobat \pdfterm{Author} bug} -% \label{page:author-bug} -% A bug in Adobe Acrobat---at least in versions~10.0.1 and -% earlier---causes that \acro{PDF} reader to confuse the \acro{XMP} and -% non-\acro{XMP} author lists when displaying the document's metadata. -% Specifically, the first author is displayed as the concatenated list -% of authors from the non-\acro{XMP} data (\pdfterm{Author}) while the -% remaining authors are displayed from the \acro{XMP} data -% (\xmpterm{dc:creator}). For example, suppose that a document's authors -% are Jack Napier, Edward Nigma, and Harvey Dent. When displaying the -% document properties, Adobe Acrobat replaces ``Jack Napier'' with a -% single author named ``Jack Napier, Edward Nigma, Harvey Dent'' and -% leaves ``Edward Nigma'' and ``Harvey Dent'' as the second and third -% authors, respectively. -% -% \DescribeMacro{\XMPTruncateList} -% The \pkgname{hyperxmp} package provides a workaround for this bug in -% the form of the |\XMPTruncateList| macro. |\XMPTruncateList| takes -% the name of a list (a \pkgname{hyperref} option name) and replaces the -% list with the value of its first element. Currently, the only -% meaningful usage is to put % +% \subsection{Usage notes} +% +% \usagenote{Conflicting metadata in PDF/A documents} +% A \acro{PDF} file includes an \pdfterm{Info} dictionary containing +% \pdfterm{Author}, \pdfterm{Title}, \pdfterm{Subject}, and +% \pdfterm{Keywords} keys. The \pkgname{hyperref} package's +% \optname{pdfauthor}, \optname{pdftitle}, \optname{pdfsubject}, and +% \optname{pdfkeywords} options assign values to those keys. The +% \pkgname{hyperxmp} package additionally uses those options to assign +% values to various \acro{XMP} metadata: \xmpterm{dc:creator}, +% \xmpterm{dc:title}, \xmpterm{dc:description}, and +% \xmpterm{pdf:Keywords}. The \acro{PDF/A} specification indicates that +% values that appear in both the \acro{PDF} \pdfterm{Info} dictionary +% and \acro{XMP} packet must match. The problem is that in \acro{XMP}, +% the author and keywords can be proper lists, as in +% +% \Needspace{7\baselineskip} % \begin{verbatim} -% \XMPTruncateList{pdfauthor} +% <dc:creator> +% <rdf:Seq> +% <rdf:li>Curly Howard</rdf:li> +% <rdf:li>Larry Fine</rdf:li> +% <rdf:li>Moe Howard</rdf:li> +% </rdf:Seq> +% </dc:creator> % \end{verbatim} % % \noindent -% in your document's preamble. This will cause Adobe Acrobat to -% properly display all of the authors but at the cost of other -% \acro{PDF} readers likely displaying only the first author. +% while in \acro{PDF}, the author and keywords are specified as flat +% strings. Alas, there is no definition of how a list should be +% collapsed to a flat string: ``\texttt{Curly Howard, Larry Fine, Moe +% Howard}'' or ``\texttt{Curly Howard; Larry Fine; Moe Howard}'' or +% something else. I have not yet found a form of flat string that +% passes all \acro{PDF/A} validators. Furthermore, when Adobe +% Acrobat---at least Adobe Acrobat DC (2019) and earlier +% versions---converts a \acro{PDF} file to \acro{PDF/A} format, it does +% so by discarding all but the first author, which is an unsatisfying +% solution. +% +% Starting with version~4.0, \pkgname{hyperxmp}'s solution is to +% suppress writing metadata to the \acro{PDF} \pdfterm{Info} dictionary +% and write it only to the \acro{XMP} packet. This appears to pacify +% \acro{PDF/A} validators yet retains the author and keyword lists in +% their non-truncated form. If desired, the \pdfterm{Info} dictionary +% can be retained by passing the \optname{keeppdfinfo} option to +% \cs{hypersetup}. % % \usagenote{Acrobat multiline-field bug} % The \acro{IPTC} Photo Metadata schema states that ``the [contact] % address is a multiline field''~\cite{IPTC2010:photo-meta}. % \pkgname{hyperxmp} converts commas in \optname{pdfcontactaddress}'s % argument to line breaks in the generated \acro{XML}\@. Unfortunately, -% A bug in Adobe Acrobat---at least in versions~10.0.1 and -% earlier---causes that \acro{PDF} reader to discard line breaks in the -% contact address. Interestingly, Adobe Illustrator CS5 correctly -% displays the contact address. -% \DescribeMacro{\xmplinesep} -% If you find Adobe Acrobat's behavior bothersome, you can redefine the -% |\xmplinesep| macro as a string to use as an address-line separator. -% For example, the following replaces all commas appearing in -% \optname{pdfcontactaddress}'s argument with semicolons: +% A bug in Adobe Acrobat---at least in Adobe Acrobat DC (2019) and +% earlier versions---causes that \acro{PDF} reader to discard line +% breaks in the contact address. Interestingly, Adobe Illustrator CS5 +% correctly displays the contact address. If you find Adobe Acrobat's +% behavior bothersome, you can redefine the +% \DescribeMacro{\xmplinesep}|\xmplinesep| macro as a string to use as +% an address-line separator. For example, the following replaces all +% commas appearing in \optname{pdfcontactaddress}'s argument with +% semicolons: % % \begin{verbatim} % \renewcommand*{\xmlinesep}{;} @@ -800,6 +982,7 @@ % a modicum of \acro{XMP} metadata with no additional effort. % % \usagenote{Multilingual metadata} +% \label{note:multilingual} % The \optname{pdfmetalang} option specifies the language in which the % document's metadata is written. It defaults to the value of % \optname{pdflang}, which specifies the document language. @@ -836,6 +1019,7 @@ % \end{verbatim} % % \usagenote{Expandable arguments} +% \label{note:expandable} % All arguments passed to \pkgname{hyperxmp} options must be expandable, % in \tex\ terminology. This implies that any macros that are used in % arguments are limited to a relatively small set of operations (such as @@ -870,12 +1054,77 @@ % package in the output file to ensure that any macros used in arguments % to \pkgname{hyperxmp} options produced the expected output. % +% \usagenote{Automatic page counting} +% \label{note:page-counting} +% Although \optname{pdfnumpages} and \optname{pdfpagerange} are intended +% to refer to pages in the final, published version of a document, it +% would be convenient for them to be generated automatically when +% producing a standalone \acro{PDF} file that is not intended to be +% incorporated into a book, journal, or other publication (or if it is +% known that the pages will not be renumbered for publication). One +% approach is to use the \pkgname{totpages} package to keep track of the +% number of pages. +% +% \begin{verbatim} +% \hypersetup{% +% pdfnumpages={\ref*{TotPages}} +% } +% \end{verbatim} +% +% \pkgname{totpages} can likewise help generate \optname{pdfpagerange}. +% For documents numbered from~1 to~$n$, a simple +% +% \begin{verbatim} +% \hypersetup{% +% pdfpagerange={1-\ref*{TotPages}} +% } +% \end{verbatim} +% +% \noindent +% should suffice. A bit more effort is needed for documents that change +% numbering schemes, such as using lowercase Roman numerals for the +% front matter and Arabic numerals for the main matter and back matter. +% One approach is to use \cs{label} to mark the first and last page of +% each numbering scheme and specify \optname{pdfpagerange} as in the +% following: +% +% \Needspace{6\baselineskip} +% \begin{verbatim} +% \hypersetup{% +% pdfpagerange={% +% \pageref*{page:begin-front}-\pageref*{page:end-front},% +% 1-\pageref*{TotPages}% +% } +% } +% \end{verbatim} +% +% I don't know how unnumbered pages (e.g.,~blank pages and the title +% page) are supposed to be handled. I suppose blank pages can be +% omitted from \optname{pdfpagerange}, and title page can be either +% omitted or listed as |title|, for example. +% +% It appears that at least with version~2.00 of \pkgname{totpages}, the +% |TotPages| label is not defined until after the |\begin{document}|. +% Consequently, using |TotPages| within a \cs{hypersetup} invocation in +% the document's preamble will produce ``|??|'' as the page count in the +% \acro{XMP} packet. The solution is either to assign +% \optname{pdfnumpages} and \optname{pdfpagerange} after the +% |\begin{document}| or to ask \LaTeX\ to do that on your behalf: +% +% \begin{verbatim} +% \AtBeginDocument{% +% \hypersetup{% +% pdfnumpages={\ref*{TotPages}}, +% pdfpagerange={1-\ref*{TotPages}} +% }% +% } +% \end{verbatim} +% % % \StopEventually{^^A -% \section{Future Work} -% \label{sec:future-work} +% \section{Help Wanted} % -% \paragraph{Help wanted} +% \paragraph{Comma handling} % Ideally, \texttt{\string\xmpquote} should automatically replace all % commas with \texttt{\string\xmpcomma}. Unfortunately, my \tex\ skills % are insufficient to pull that off. If you know a way to make @@ -886,7 +1135,7 @@ % % \appendix % -% \section{Sample XMP packet} +% \section{Sample XMP Packet} % \label{sec:sample-packet} % % The following is an example of a complete \acro{XMP} packet as may be @@ -901,32 +1150,32 @@ % \begin{thebibliography}{1} % \bibitem{Adobe2010:pdfmark} % Adobe Systems, Inc., San Jose, California. -% \newblock {\em {A}dobe {A}crobat~{X} {SDK} Help, pdfmark Reference}. +% \newblock \emph{{A}dobe {A}crobat~{X} {SDK} Help, pdfmark Reference}. % \newblock Available from % \url{http://www.adobe.com/devnet/acrobat/documentation.html}. % % \bibitem{Adobe1996:postscript} % {Adobe Systems, Inc.} -% \newblock {\em {P}ost{S}cript Language Reference Manual}. +% \newblock \emph{{P}ost{S}cript Language Reference Manual}. % \newblock Addison-Wesley, 2nd edition, January 1996, ISBN: \mbox{0-201-18127-4}. % % \bibitem{Adobe2008:PDF} % Adobe Systems, Inc., San Jose, California. -% \newblock {\em Document Management---Portable Document Format---Part 1: +% \newblock \emph{Document Management---Portable Document Format---Part 1: % PDF~1.7}, July 2008. % \newblock ISO \mbox{32000-1} standard document. Available from % \url{http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf}. % % \bibitem{Adobe2012:XMP} % Adobe Systems, Inc., San Jose, California. -% \newblock {\em {XMP} Specification Part~1: Data model, Serialization, and Core +% \newblock \emph{{XMP} Specification Part~1: Data model, Serialization, and Core % Properties}, April 2012. % \newblock Available from % \url{http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/cc-201306/XMPSpecificationPart1.pdf}. % % \bibitem{DCMI2012:meta-terms} % DCMI Usage Board -% \newblock {\em DCMI Metadata Terms}, June~14, 2012. +% \newblock \emph{DCMI Metadata Terms}, June~14, 2012. % \newblock Available from \url{http://dublincore.org/documents/dcmi-terms/}. % % \bibitem{Downes1994:ATB15} @@ -937,9 +1186,23 @@ % \newblock Archived by Google at % \url{http://groups.google.com/group/comp.text.tex/msg/7da7643b9e8f3b48}. % +% \bibitem{PRISM2012:basic-meta} +% International Digital Enterprise Alliance, Inc. +% \newblock \emph{Publishing Requirements for Industry Standard Metadata, +% Version~3.0: {PRISM} Basic Metadata Specification}, October~12, 2012. +% \newblock Available from +% \url{http://www.prismstandard.org/specifications/3.0/PRISM_Basic_Metadata_3.0.htm}. +% +% \bibitem{PRISM2012:cont-voc} +% International Digital Enterprise Alliance, Inc. +% \newblock \emph{Publishing Requirements for Industry Standard Metadata, +% Version~3.0: {PRISM} Controlled Vocabularies Specification}, October~4, 2012. +% \newblock Available from +% \url{http://www.prismstandard.org/specifications/3.0/PRISM_CV_Spec_3.0.pdf}. +% % \bibitem{IPTC2010:photo-meta} % International Press Telecommunications Council. -% \newblock {\em {IPTC} Photo Metadata: Core 1.1/Extension 1.1}, July 2010. +% \newblock \emph{{IPTC} Photo Metadata: Core 1.1/Extension 1.1}, July 2010. % \newblock Revision~1. Available from % \url{http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata-201007_1.pdf}. % @@ -959,14 +1222,14 @@ % % \bibitem{PDFA2008:xmp-props} % PDF/A Competence Center, Berlin, Germany. -% \newblock {\em {T}ech{N}ote~0008: Predefined {XMP} Properties in {PDF/A-1}}, +% \newblock \emph{{T}ech{N}ote~0008: Predefined {XMP} Properties in {PDF/A-1}}, % March~20, 2008. % \newblock Available from % \url{http://www.pdfa.org/wp-content/uploads/2011/08/tn0008_predefined_xmp_properties_in_pdfa-1_2008-03-20.pdf}. % % \bibitem{PDFA2008:ext-schemas} % PDF/A Competence Center, Berlin, Germany. -% \newblock {\em {T}ech{N}ote~0009: {XMP} Extension Schemas in {PDF/A-1}}, +% \newblock \emph{{T}ech{N}ote~0009: {XMP} Extension Schemas in {PDF/A-1}}, % March~20, 2008. % \newblock Available from % \url{http://www.pdfa.org/wp-content/uploads/2011/08/tn0009_xmp_extension_schemas_in_pdfa-1_2008-03-20.pdf}. @@ -1100,7 +1363,7 @@ % \begin{macro}{\@pdfdatetime} % Prepare to store the document's date and (optionally) time. Whether % specified by the author in \acro{XMP} format or \acro{PDF} format -% (cf.~Section~\ref{sec:date-manip}) we always store |\@pdfdatetime| as +% (see Section~\ref{sec:date-manip}) we always store |\@pdfdatetime| as % an \acro{XMP}-format string. % \begin{macrocode} \def\@pdfdatetime{} @@ -1125,7 +1388,7 @@ % \begin{macro}{\@pdfmetadatetime} % Prepare to store the document's metadata date and (optionally) time. % Whether specified by the author in \acro{XMP} format or \acro{PDF} -% format (cf.~Section~\ref{sec:date-manip}) we always store +% format (see Section~\ref{sec:date-manip}) we always store % |\@pdfmetadatetime| as an \acro{XMP}-format string. % \begin{macrocode} \def\@pdfmetadatetime{} @@ -1246,6 +1509,139 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\@pdfversionid} +% Prepare to store a \acro{UUID} that represents the current version of +% the document. +% \begin{macrocode} +\def\@pdfversionid{} +\define@key{Hyp}{pdfversionid}{\hyxmp@pdfstringdef\@pdfversionid{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfpublication} +% Prepare to store the name of the publication in which the +% document was published. +% \begin{macrocode} +\def\@pdfpublication{} +\define@key{Hyp}{pdfpublication}{\hyxmp@pdfstringdef\@pdfpublication{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfpubtype} +% Prepare to store the type of the publication in which the +% document was published. +% \begin{macrocode} +\def\@pdfpubtype{} +\define@key{Hyp}{pdfpubtype}{\hyxmp@pdfstringdef\@pdfpubtype{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfbytes} +% Prepare to store the size of the file in bytes. +% \begin{macrocode} +\def\@pdfbytes{} +\define@key{Hyp}{pdfbytes}{\hyxmp@pdfstringdef\@pdfbytes{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfnumpages} +% Prepare to store the number of pages in the file. +% \begin{macrocode} +\def\@pdfnumpages{} +\define@key{Hyp}{pdfnumpages}{\hyxmp@pdfstringdef\@pdfnumpages{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfissn} +% Prepare to store the \acro{ISSN} of the publication in which the +% document was published. +% \begin{macrocode} +\def\@pdfissn{} +\define@key{Hyp}{pdfissn}{\hyxmp@pdfstringdef\@pdfissn{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfeissn} +% Prepare to store the \acro{ISSN} of the electronic version of the +% publication in which the document was published. +% \begin{macrocode} +\def\@pdfeissn{} +\define@key{Hyp}{pdfeissn}{\hyxmp@pdfstringdef\@pdfeissn{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfisbn} +% Prepare to store the \acro{ISBN} of the publication in which the +% document was published. +% \begin{macrocode} +\def\@pdfisbn{} +\define@key{Hyp}{pdfisbn}{\hyxmp@pdfstringdef\@pdfisbn{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfbookedition} +% Prepare to store the edition of the book in which the document +% was published. +% \begin{macrocode} +\def\@pdfbookedition{} +\define@key{Hyp}{pdfbookedition}{\hyxmp@pdfstringdef\@pdfbookedition{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfvolumenum} +% Prepare to store the volume identifier of the publication in which the +% document was published. +% \begin{macrocode} +\def\@pdfvolumenum{} +\define@key{Hyp}{pdfvolumenum}{\hyxmp@pdfstringdef\@pdfvolumenum{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfissuenum} +% Prepare to store the identifier of the issue within a volume of the +% publication in which the document was published. +% \begin{macrocode} +\def\@pdfissuenum{} +\define@key{Hyp}{pdfissuenum}{\hyxmp@pdfstringdef\@pdfissuenum{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfpagerange} +% Prepare to store the document's range of pages within the publication +% in which the document was published. +% \begin{macrocode} +\def\@pdfpagerange{} +\define@key{Hyp}{pdfpagerange}{\hyxmp@pdfstringdef\@pdfpagerange{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfdoi} +% Prepare to store a \acro{DOI} that represents the current instance of +% the document. +% \begin{macrocode} +\def\@pdfdoi{} +\define@key{Hyp}{pdfdoi}{\hyxmp@pdfstringdef\@pdfdoi{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfurl} +% Prepare to store a \acro{URL} that represents where the document +% can be found. Note that we do not prepend \optname{baseurl} to +% the value provided. +% \begin{macrocode} +\def\@pdfurl{} +\define@key{Hyp}{pdfurl}{\hyxmp@pdfstringdef\@pdfurl{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfsubtitle} +% Prepare to store the document's subtitle. +% \begin{macrocode} +\def\@pdfsubtitle{} +\define@key{Hyp}{pdfsubtitle}{\hyxmp@pdfstringdef\@pdfsubtitle{#1}} +% \end{macrocode} +% \end{macro} +% % The following eight macros---|\@pdfcontactaddress|, % |\@pdfcontactcity|, |\@pdfcontactregion|, |\@pdfcontactpostcode|, % |\@pdfcontactcountry|, |\@pdfcontactphone|, |\@pdfcontactemail|, and @@ -1342,6 +1738,25 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\hyxmp@suppress@pdf@metadata} +% Suppress \pkgname{hyperref} from writing \pdfterm{Author}, +% \pdfterm{Title}, \pdfterm{Subject}, and other \acro{PDF} metadata into +% the \pdfterm{Info} dictionary. This prevents conflicts between the +% \acro{PDF} metadata and the \acro{XMP} metadata, which cause +% \acro{PDF/A} validation to fail. The \acro{PDF} metadata can be +% restored by passing the \optname{keeppdfinfo} option to +% |\hypersetup|. +% \changes{v4.0}{2019/03/31}{Added this macro} +% \begin{macrocode} +\def\hyxmp@suppress@pdf@metadata{% + \global\let\PDF@FinishDoc=\@empty +} +\define@key{Hyp}{keeppdfinfo}[true]{% + \gdef\hyxmp@suppress@pdf@metadata{}% +} +% \end{macrocode} +% \end{macro} +% % \changes{v2.1}{2012/09/16}{Enabled \protect\pkgname{hyperxmp} and % \protect\pkgname{hyperref} to be loaded in either order. This addresses % a bug report by Yury Donskoy} @@ -1536,6 +1951,8 @@ \@baseurl \@pdfauthor \@pdfauthortitle + \@pdfbookedition + \@pdfbytes \@pdfcaptionwriter \@pdfcontactaddress \@pdfcontactcity @@ -1548,14 +1965,27 @@ \@pdfcopyright \@pdfcreationdate \@pdfdatetime + \@pdfdoi + \@pdfeissn + \@pdfisbn + \@pdfissn + \@pdfissuenum \@pdfkeywords \@pdflang \@pdflicenseurl \@pdfmetadatetime \@pdfmoddate + \@pdfnumpages + \@pdfpagerange + \@pdfpublication + \@pdfpubtype \@pdfsubject + \@pdfsubtitle \@pdftitle \@pdftype + \@pdfurl + \@pdfversionid + \@pdfvolumenum }% \ifx\hyxmp@concated@metadata\@empty \PackageWarningNoLine{hyperxmp}{% @@ -1653,6 +2083,7 @@ provide metadata values to hyperxmp}% % and thereby \pkgname{hyperxmp}. % \begin{macrocode} \hyxmp@at@end{% + \hyxmp@suppress@pdf@metadata \hyxmp@find@metadata \hyxmp@embed@packet }% @@ -1795,17 +2226,22 @@ disabled}% % \changes{v2.3b}{2013/07/18}{Made all definitions local to avoid % spurious \texttt{Too many unprocessed floats} errors when running % with \string\pkgname{memoir}} +% \changes{v4.0}{2019/03/31}{Deprecated this macro} % \begin{macro}{\hyxmp@temp@str} % \begin{macro}{\hyxmp@temp@list} % \begin{macro}{\@elt} -% As a workaround for Adobe Acrobat's inability to display author lists -% correctly (cf.~``Acrobat \pdfterm{Author} bug'' on -% page~\pageref{page:author-bug}) we introduce a hack that replaces a +% As a workaround for the inability of older Adobe Acrobat versions to +% display author lists correctly we introduce a hack that replaces a % list with its first element. One can then write % ``|\XMPTruncateList{pdfauthor}|'' and have Adobe Acrobat display the -% author list correctly. It's sad that this is necessary, though. +% author list correctly. % \begin{macrocode} \newcommand{\XMPTruncateList}[1]{{% + \PackageWarning{hyperxmp}{% + \noexpand\XMPTruncateList has been deprecated since\MessageBreak + hyperxmp 4.0 and may be removed in future\MessageBreak + versions of the package. \noexpand\XMPTruncateList\MessageBreak + was found}% \edef\hyxmp@temp@str{\csname hyxmp@#1\endcsname}% \hyxmp@commas@to@list{\hyxmp@temp@list}{\hyxmp@temp@str}% \def\@elt##1{% @@ -2310,7 +2746,7 @@ disabled}% \newcommand*{\hyxmp@xmlify}[1]{% \gdef\hyxmp@xmlified{}% % \end{macrocode} -% Escaped PDF string~$\rightarrow$ \term{PDFDocEncoding}/\term{Unicode} +% Escaped \acro{PDF} string~$\rightarrow$ \term{PDFDocEncoding}/\term{Unicode} % \begin{macrocode} \EdefUnescapeString\hyxmp@text{#1}% \ifhyxmp@unicodetex @@ -3090,10 +3526,6 @@ _______________________________________________________________^^J% % even when empty. Florian Breitwieser noted that this is necessary % for \protect\acro{PDF/A}-1b compliance} % \begin{macrocode} - \hyxmp@add@to@xml{% -______<rdf:Description rdf:about=""^^J% -___________xmlns:pdf="http://ns.adobe.com/pdf/1.3/">^^J% - }% \hyxmp@add@simple@var{pdf:Keywords}{@pdfkeywords}% \hyxmp@add@simple@var{pdf:Producer}{@pdfproducer}% \@ifundefined{pdfvariable}{% @@ -3114,15 +3546,20 @@ ___________xmlns:pdf="http://ns.adobe.com/pdf/1.3/">^^J% % \begin{macrocode} \hyxmp@add@simple{pdf:PDFVersion}{1.\the\pdfvariable minorversion}% }% - \hyxmp@add@to@xml{% -______</rdf:Description>^^J% - }% } % \end{macrocode} % \end{macro} % +% \begin{macro}{\hyxmp@extra@indent} +% This macro is used internally to increase the amount of indentation +% when writing certain \acro{XML} data. It is normally defined as empty +% but can temporarily be redefined to a sequence of |\space| characters. +% \begin{macrocode} +\newcommand*{\hyxmp@extra@indent}{} +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\hyxmp@add@simple} -% \begin{macro}{\hyxmp@string} % Given an \acro{XMP} tag~(|#1|) and a string~(|#2|), if the string is % nonempty, add a begin tag, the string, and an end tag to the packet. % The ``|simple|'' in the macro name indicates that the string is output @@ -3130,18 +3567,15 @@ ______</rdf:Description>^^J% % \changes{v2.0}{2012/08/25}{Added this macro} % \begin{macrocode} \newcommand*{\hyxmp@add@simple}[2]{% - \edef\hyxmp@string{#2}% - \ifx\hyxmp@string\@empty - \else - \hyxmp@xmlify{\hyxmp@string}% + \@ifnotmtargexp{#2}{% + \hyxmp@xmlify{#2}% \hyxmp@add@to@xml{% -_________<#1>\hyxmp@xmlified</#1>^^J% + \hyxmp@extra@indent______<#1>\hyxmp@xmlified</#1>^^J% }% - \fi + }% } % \end{macrocode} % \end{macro} -% \end{macro} % % \begin{macro}{\hyxmp@add@simple@var} % Given an \acro{XMP} tag~(|#1|) and a variable name~(|#2|), if the @@ -3158,13 +3592,64 @@ _________<#1>\hyxmp@xmlified</#1>^^J% \else \hyxmp@xmlify{\csname#2\endcsname}% \hyxmp@add@to@xml{% -_________<#1>\hyxmp@xmlified</#1>^^J% + \hyxmp@extra@indent______<#1>\hyxmp@xmlified</#1>^^J% }% \fi } % \end{macrocode} % \end{macro} % +% \begin{macro}{\hyxmp@add@simple@lang} +% Given an \acro{XMP} tag~(|#1|) and a string~(|#2|), if the string is +% nonempty, add a begin tag, the string, and an end tag to the packet. +% The ``|simple|'' in the macro name indicates that the string is output +% without variations for different languages. However, if the string +% begins with a language code in square brackets, specify that as the +% (sole) language for the tag. +% \changes{v4.0}{2019/03/12}{Added this macro} +% \begin{macrocode} +\newcommand*{\hyxmp@add@simple@lang}[2]{% + \@ifnotmtarg{#2}{% + \hyxmp@xmlify{#2}% + \expandafter\hyxmp@add@simple@lang@i\hyxmp@xmlified\relax{#1}% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyxmp@add@simple@lang@i} +% This is a helper macro for |\hyxmp@add@simple@lang|. It takes an +% optional language code (in brackets), text up to |\relax|, and a tag, +% and typesets the text within the \acro{XML} tag. +% \begin{macrocode} +\newcommand*{\hyxmp@add@simple@lang@i}{% + \@ifnextchar[\hyxmp@add@simple@lang@ii{\hyxmp@add@simple@lang@ii[]}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyxmp@add@simple@lang@ii} +% This is another helper macro for |\hyxmp@add@simple@lang|. It takes +% an mandatory language code (in brackets; can be empty), text up to +% |\relax|, and a tag, and typesets the text within the \acro{XML} tag. +% \begin{macrocode} +\def\hyxmp@add@simple@lang@ii[#1]#2\relax#3{% + \@ifnotmtarg{#2}{% + \hyxmp@xmlify{#2}% + \@ifmtarg{#1}{% + \hyxmp@add@to@xml{% +______<#3>\hyxmp@xmlified</#3>^^J% + }% + }{% + \hyxmp@add@to@xml{% +______<#3 xml:lang="#1">\hyxmp@xmlified</#3>^^J% + }% + }% + }% +} +% \end{macrocode} +% \end{macro} +% % % \subsubsection{The Dublin Core schema} % \label{sec:dublin-core} @@ -3201,18 +3686,18 @@ _________<#1>\hyxmp@xmlified</#1>^^J% % \begin{macrocode} \let\hyxmp@value=\hyxmp@xmlified \hyxmp@add@to@xml{% -_________<dc:#2>^^J% -____________<rdf:Alt>^^J% +______<dc:#2>^^J% +________<rdf:Alt>^^J% }% \ifx\@pdfmetalang\hyxmp@x@default \else \hyxmp@xmlify{\@pdfmetalang}% \hyxmp@add@to@xml{% -_______________<rdf:li xml:lang="\hyxmp@xmlified">\hyxmp@value</rdf:li>^^J% +__________<rdf:li xml:lang="\hyxmp@xmlified">\hyxmp@value</rdf:li>^^J% }% \fi \hyxmp@add@to@xml{% -_______________<rdf:li xml:lang="\hyxmp@x@default">\hyxmp@value</rdf:li>^^J% +__________<rdf:li xml:lang="\hyxmp@x@default">\hyxmp@value</rdf:li>^^J% }% % \end{macrocode} % Include variants of the text expressed in other languages, as specified by @@ -3221,7 +3706,7 @@ _______________<rdf:li xml:lang="\hyxmp@x@default">\hyxmp@value</rdf:li>^^J% \def\do##1##2{ \hyxmp@xmlify{##2}% \hyxmp@add@to@xml{% -_______________<rdf:li xml:lang="##1">\hyxmp@xmlified</rdf:li>^^J% +__________<rdf:li xml:lang="##1">\hyxmp@xmlified</rdf:li>^^J% }% }% \csname hyxmp@alt@#2\endcsname @@ -3229,8 +3714,8 @@ _______________<rdf:li xml:lang="##1">\hyxmp@xmlified</rdf:li>^^J% % Complete this \acro{XMP} element. % \begin{macrocode} \hyxmp@add@to@xml{% -____________</rdf:Alt>^^J% -_________</dc:#2>^^J% +________</rdf:Alt>^^J% +______</dc:#2>^^J% }% \fi }% @@ -3260,8 +3745,8 @@ _________</dc:#2>^^J% % \begin{macrocode} \if@tempswa \hyxmp@add@to@xml{% -_________<dc:#2>^^J% -____________<rdf:#3>^^J% +______<dc:#2>^^J% +________<rdf:#3>^^J% }% \bgroup % \end{macrocode} @@ -3274,14 +3759,14 @@ ____________<rdf:#3>^^J% \hyxmp@commas@to@list\hyxmp@list{\hyxmp@xmlified}% \def\@elt##1{% \hyxmp@add@to@xml{% -_______________<rdf:li>##1</rdf:li>^^J% +__________<rdf:li>##1</rdf:li>^^J% }% }% \hyxmp@list \egroup \hyxmp@add@to@xml{% -____________</rdf:#3>^^J% -_________</dc:#2>^^J% +________</rdf:#3>^^J% +______</dc:#2>^^J% }% \fi } @@ -3310,11 +3795,7 @@ _________</dc:#2>^^J% % \acro{XMP} specifications, a detail identified by Florian Breitwieser} % \begin{macrocode} \newcommand*{\hyxmp@dc@schema}{% - \hyxmp@add@to@xml{% -______<rdf:Description rdf:about=""^^J% -____________xmlns:dc="http://purl.org/dc/elements/1.1/">^^J% -_________<dc:format>application/pdf</dc:format>^^J% - }% + \hyxmp@add@simple{dc:format}{application/pdf}% \hyxmp@rdf@dc[\ifHy@pdfa]{title}{\@pdftitle}% \hyxmp@rdf@dc[\ifHy@pdfa]{description}{\@pdfsubject}% \hyxmp@rdf@dc{rights}{\@pdfcopyright}% @@ -3327,9 +3808,6 @@ _________<dc:format>application/pdf</dc:format>^^J% \else \hyxmp@add@simple{dc:source}{\@pdfsource}% \fi - \hyxmp@add@to@xml{% -______</rdf:Description>^^J% - }% } % \end{macrocode} % \end{macro} @@ -3374,32 +3852,11 @@ ______</rdf:Description>^^J% % \begin{macrocode} \ifx\hyxmp@rights\@empty \else -% \end{macrocode} -% Header -% \begin{macrocode} - \hyxmp@add@to@xml{% -______<rdf:Description rdf:about=""^^J% -___________xmlns:xmpRights="http://ns.adobe.com/xap/1.0/rights/">^^J% - }% -% \end{macrocode} -% Copyright indication -% \begin{macrocode} \ifx\@pdfcopyright\@empty \else - \hyxmp@add@to@xml{% -_________<xmpRights:Marked>True</xmpRights:Marked>^^J% - }% + \hyxmp@add@simple{xmpRights:Marked}{True}% \fi -% \end{macrocode} -% License \acro{URL} -% \begin{macrocode} \hyxmp@add@simple{xmpRights:WebStatement}{\@pdflicenseurl}% -% \end{macrocode} -% Trailer -% \begin{macrocode} - \hyxmp@add@to@xml{% -______</rdf:Description>^^J% - }% \fi } % \end{macrocode} @@ -3411,32 +3868,30 @@ ______</rdf:Description>^^J% % \label{sec:xmp-media} % % \begin{macro}{\hyxmp@mm@schema} -% Add properties defined by the \acro{XMP} Media Management schema to the -% |\hyxmp@xml| macro. According to the \acro{XMP} specification, the -% \xmpterm{xmpMM:DocumentID} property is supposed to uniquely identify a -% document, and the \xmpterm{xmpMM:InstanceID} property is supposed to -% change with each save operation~\cite{Adobe2012:XMP}. As seen in -% Section~\ref{sec:uuid-gen}, we do what we can to honor this intention -% from within a \tex-based workflow. +% Add properties defined by the \acro{XMP} Media Management schema to +% the |\hyxmp@xml| macro. According to the \acro{XMP} specification, +% the \xmpterm{xmpMM:DocumentID} property is supposed to uniquely +% identify a document, and the \xmpterm{xmpMM:InstanceID} property is +% supposed to change with each save operation~\cite{Adobe2012:XMP}. As +% seen in Section~\ref{sec:uuid-gen}, we do what we can to honor this +% intention from within a \tex-based workflow. We additionally support +% the \xmpterm{xmpMM:VersionID} property, whose value is supplied by +% the author using \optname{pdfversionid}. % \changes{v1.4}{2011/05/29}{Renamed the \texttt{xapMM} namespace % prefix to \texttt{xmpMM}} % \changes{v3.5}{2018/11/27}{Generate \protect\cs{hyxmp@DocumentID} and % \protect\cs{hyxmp@InstanceID} only if the document does not already % define these using the \protect\optname{pdfdocumentid} and % \protect\optname{pdfinstanceid} options} +% \changes{v4.0}{2019/03/09}{Include \protect\xmpterm{xmpMM:VersionID} in +% the \protect\acro{XMP} packet} % \begin{macrocode} \gdef\hyxmp@mm@schema{% \@ifmtargexp{\hyxmp@DocumentID}{\hyxmp@def@DocumentID}{}% \@ifmtargexp{\hyxmp@InstanceID}{\hyxmp@def@InstanceID}{}% - \hyxmp@add@to@xml{% -______<rdf:Description rdf:about=""^^J% -____________xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">^^J% - }% \hyxmp@add@simple{xmpMM:DocumentID}{\hyxmp@DocumentID}% \hyxmp@add@simple{xmpMM:InstanceID}{\hyxmp@InstanceID}% - \hyxmp@add@to@xml{% -______</rdf:Description>^^J% - }% + \hyxmp@add@simple{xmpMM:VersionID}{\@pdfversionid}% } % \end{macrocode} % \end{macro} @@ -3449,8 +3904,8 @@ ______</rdf:Description>^^J% % \begin{macro}{\hyxmp@createdate} % Define |\hyxmp@createdate| as the document's creation date but in % \acro{XMP} date format, not \acro{PDF} date format. We use -% |\hyxmp@createdate| for the \xmpterm{CreateDate}, -% \xmpterm{ModifyDate}, and \xmpterm{MetadataDate} fields. +% |\hyxmp@createdate| for the \xmpterm{xmp:CreateDate}, +% \xmpterm{xmp:ModifyDate}, and \xmpterm{xmp:MetadataDate} fields. % \begin{macrocode} \newcommand*{\hyxmp@define@createdate}{% \@ifundefined{pdffeedback}{% @@ -3484,8 +3939,8 @@ ______</rdf:Description>^^J% % \optname{baseurl}. % \changes{v2.0}{2012/08/26}{Added this macro} % \changes{v3.0}{2016/07/04}{Made the \protect\acro{XMP} -% \protect\xmpterm{CreateDate}, \protect\xmpterm{ModifyDate}, and -% \protect\xmpterm{MetadataDate} match the \protect\acro{PDF} +% \protect\xmpterm{xmp:CreateDate}, \protect\xmpterm{xmp:ModifyDate}, +% and \protect\xmpterm{xmp:MetadataDate} match the \protect\acro{PDF} % \protect\pdfterm{CreationDate}} % \changes{v3.2}{2017/01/22}{Honor \string\pkgname{hyperref}'s % \string\optname{pdfcreationdate} and \string\optname{pdfmoddate} @@ -3494,10 +3949,6 @@ ______</rdf:Description>^^J% % \protect\pkgname{hyperxmp} code} % \begin{macrocode} \newcommand*{\hyxmp@xmp@basic@schema}{% - \hyxmp@add@to@xml{% -______<rdf:Description rdf:about=""^^J% -____________xmlns:xmp="http://ns.adobe.com/xap/1.0/">^^J% - }% \hyxmp@define@createdate % \end{macrocode} % For the document's creation date, use the user-specified @@ -3544,9 +3995,6 @@ ____________xmlns:xmp="http://ns.adobe.com/xap/1.0/">^^J% % \begin{macrocode} \hyxmp@add@simple{xmp:CreatorTool}{\@pdfcreator}% \hyxmp@add@simple{xmp:BaseURL}{\@baseurl}% - \hyxmp@add@to@xml{% -______</rdf:Description>^^J% - }% } % \end{macrocode} % \end{macro} @@ -3566,27 +4014,38 @@ ______</rdf:Description>^^J% % \begin{macrocode} \gdef\hyxmp@photoshop@schema{% \edef\hyxmp@photoshop@data{\@pdfauthortitle\@pdfcaptionwriter}% - \ifx\hyxmp@photoshop@data\@empty - \else - \hyxmp@add@to@xml{% -______<rdf:Description rdf:about=""^^J% -____________xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">^^J% - }% - \fi \hyxmp@add@simple{photoshop:AuthorsPosition}{\@pdfauthortitle}% \hyxmp@add@simple{photoshop:CaptionWriter}{\@pdfcaptionwriter}% - \ifx\hyxmp@photoshop@data\@empty - \else - \hyxmp@add@to@xml{% -______</rdf:Description>^^J% - }% - \fi } % \end{macrocode} % \end{macro} % \end{macro} % % +% \subsubsection{The PDF/A Identification schema} +% \label{sec:pdfa-id} +% +% \begin{macro}{\hyxmp@pdfa@id@schema} +% Add properties defined by the \acro{PDF/A} Identification +% schema~\cite{PDFA2008:xmp-props} to the |\hyxmp@xml| macro. These +% properties identify a document as conforming to a particular +% \acro{PDF/A} standard. We default to \acro{PDF/A}-1b if any \acro{PDF/A} +% compliance is detected but let the author override the ``1'' with +% \optname{pdfapart} and the ``B'' with \optname{pdfaconformance}. +% \changes{v2.4}{2013/12/21}{Added this macro} +% \changes{v2.9}{2016/04/12}{Let the author specify the \protect\acro{PDF/A} +% part and conformance IDs, as requested by Leonid Sinev} +% \begin{macrocode} +\newcommand*{\hyxmp@pdfa@id@schema}{% + \ifHy@pdfa + \hyxmp@add@simple{pdfaid:part}{\@pdfapart}% + \hyxmp@add@simple{pdfaid:conformance}{\@pdfaconformance}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% % \subsubsection{The IPTC Photo Metadata schema} % \label{sec:photo-meta} % @@ -3615,7 +4074,7 @@ ______</rdf:Description>^^J% \@ifnotmtargexp{#2}{% \bgroup \hyxmp@add@to@xml{% -_________<#1>% + \hyxmp@extra@indent______<#1>% }% % \end{macrocode} % \begin{macro}{\@elt@first} @@ -3652,50 +4111,50 @@ _________<#1>% % \end{macro} % \end{macro} % -% \begin{macro}{\hyxmp@photometa@schema} +% \begin{macro}{\hyxmp@iptc@schema} +% Add properties defined by the \acro{IPTC} Photo Metadata +% schema~\cite{IPTC2010:photo-meta} to the |\hyxmp@xml| macro. We +% currently support only the \xmpterm{Iptc4xmpCore:CreatorContactInfo} +% property, although this is a structure containing multiple fields. % \changes{v2.2}{2012/12/07}{Added this macro} % \changes{v2.9}{2016/04/23}{Use \textsf{Iptc4xmpCore} instead of % \textsf{Iptc4ContInfo} as the contact-information metadata prefix. % Leonid Sinev reports that Acrobat's \acro{PDF/A} validator seems to % prefer \textsf{Iptc4xmpCore}} -% \begin{macro}{\hyxmp@photometa@data} -% Add properties defined by the \acro{IPTC} Photo Metadata -% schema~\cite{IPTC2010:photo-meta} to the |\hyxmp@xml| macro. We -% currently support only the contact-information details structure, -% viz.\ the \xmpterm[CiAdrExtadr]{Iptc4xmpCore:CreatorContactInfo}, -% \xmpterm[CiAdrCity]{Iptc4xmpCore:CreatorContactInfo}, -% \xmpterm[CiAdrRegion]{Iptc4xmpCore:CreatorContactInfo}, -% \xmpterm[CiAdrPcode]{Iptc4xmpCore:CreatorContactInfo}, -% \xmpterm[CiAdrCtry]{Iptc4xmpCore:CreatorContactInfo}, -% \xmpterm[CiTelWork]{Iptc4xmpCore:CreatorContactInfo}, -% \xmpterm[CiEmailWork]{Iptc4xmpCore:CreatorContactInfo}, and -% \xmpterm[CiUrlWork]{Iptc4xmpCore:CreatorContactInfo} properties. -% \begin{macrocode} -\gdef\hyxmp@photometa@schema{% - \edef\hyxmp@photometa@data{% - \@pdfcontactaddress - \@pdfcontactcity - \@pdfcontactregion - \@pdfcontactpostcode - \@pdfcontactcountry - \@pdfcontactphone - \@pdfcontactemail - \@pdfcontacturl - }% - \ifx\hyxmp@photometa@data\@empty +% \changes{v4.0}{2019/03/09}{Moved the definition of +% \protect\cs{hyxmp@iptc@data} from here into +% \protect\cs{hyxmp@check@iptc@data}} +% \changes{v4.0}{2019/03/16}{Renamed this macro to +% \protect\cs{hyxmp@iptc@schema} from +% \protect\cs{hyxmp@photometa@schema}} +% \changes{v4.0}{2019/03/16}{Rewrote this macro entirely to correct +% the use of fields within a structure} +% \begin{macrocode} +\gdef\hyxmp@iptc@schema{% +% \end{macrocode} +% Because we currently support only +% \xmpterm{Iptc4xmpCore:CreatorContactInfo} it suffices to check if we +% have any relevant data. If so, we instantiate a +% \xmpterm{Iptc4xmpCore:ContactInfo} structure with all available +% fields. +% \begin{macrocode} + \ifx\hyxmp@iptc@data\@empty \else - \hyxmp@iptc@extensions \hyxmp@add@to@xml{% -______<rdf:Description rdf:about=""^^J% -___________xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/">^^J% -_______<Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource">^^J% +______<Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource">^^J% }% - \fi - \hyxmp@list@to@lines{Iptc4xmpCore:CiAdrExtadr}{\@pdfcontactaddress}% - \hyxmp@add@simple{Iptc4xmpCore:CiAdrCity}{\@pdfcontactcity}% - \hyxmp@add@simple{Iptc4xmpCore:CiAdrRegion}{\@pdfcontactregion}% - \hyxmp@add@simple{Iptc4xmpCore:CiAdrPcode}{\@pdfcontactpostcode}% - \hyxmp@add@simple{Iptc4xmpCore:CiAdrCtry}{\@pdfcontactcountry}% +% \end{macrocode} +% We locally redefine |\hyxmp@extra@indent| to increase the indentation +% of the assignments to \xmpterm{Iptc4xmpCore:CreatorContactInfo}'s +% fields. +% \begin{macrocode} + \bgroup + \edef\hyxmp@extra@indent{\hyxmp@extra@indent\space\space}% + \hyxmp@list@to@lines{Iptc4xmpCore:CiAdrExtadr}{\@pdfcontactaddress}% + \hyxmp@add@simple{Iptc4xmpCore:CiAdrCity}{\@pdfcontactcity}% + \hyxmp@add@simple{Iptc4xmpCore:CiAdrRegion}{\@pdfcontactregion}% + \hyxmp@add@simple{Iptc4xmpCore:CiAdrPcode}{\@pdfcontactpostcode}% + \hyxmp@add@simple{Iptc4xmpCore:CiAdrCtry}{\@pdfcontactcountry}% % \end{macrocode} % \begin{macro}{\xmplinesep} % The \acro{IPTC} standard states that sets of telephone numbers, email @@ -3708,23 +4167,259 @@ _______<Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource">^^J% % |\hyxmp@list@to@lines| to insert the data. Unlike % |\hyxmp@add@simple|, this approach trims all spaces surrounding commas. % \begin{macrocode} - \bgroup - \def\xmplinesep{,}% - \hyxmp@list@to@lines{Iptc4xmpCore:CiTelWork}{\@pdfcontactphone}% - \hyxmp@list@to@lines{Iptc4xmpCore:CiEmailWork}{\@pdfcontactemail}% - \hyxmp@list@to@lines{Iptc4xmpCore:CiUrlWork}{\@pdfcontacturl}% - \egroup - \ifx\hyxmp@photometa@data\@empty - \else + \def\xmplinesep{,}% + \hyxmp@list@to@lines{Iptc4xmpCore:CiTelWork}{\@pdfcontactphone}% + \hyxmp@list@to@lines{Iptc4xmpCore:CiEmailWork}{\@pdfcontactemail}% + \hyxmp@list@to@lines{Iptc4xmpCore:CiUrlWork}{\@pdfcontacturl}% + \egroup \hyxmp@add@to@xml{% -_______</Iptc4xmpCore:CreatorContactInfo>^^J% -______</rdf:Description>^^J% +______</Iptc4xmpCore:CreatorContactInfo>^^J% }% \fi } % \end{macrocode} % \end{macro} % \end{macro} +% +% \subsubsection{The PRISM Basic Metadata schema} +% \label{sec:prism-meta} +% +% \begin{macro}{\hyxmp@prism@schema} +% \changes{v4.0}{2019/03/10}{Added this macro} +% Add properties defined by the \acro{PRISM} Basic Metadata +% schema~\cite{PRISM2012:basic-meta}. +% \begin{macrocode} +\newcommand*{\hyxmp@prism@schema}{% + \ifx\hyxmp@prism@data\@empty + \else + \hyxmp@add@simple{prism:complianceProfile}{three}% + \fi + \hyxmp@add@simple@lang{prism:subtitle}{\@pdfsubtitle}% + \hyxmp@add@simple@lang{prism:publicationName}{\@pdfpublication}% + \hyxmp@add@simple{prism:aggregationType}{\@pdfpubtype}% + \hyxmp@add@simple@lang{prism:bookEdition}{\@pdfbookedition}% + \hyxmp@add@simple{prism:volume}{\@pdfvolumenum}% + \hyxmp@add@simple{prism:number}{\@pdfissuenum}% + \hyxmp@add@simple{prism:pageRange}{\@pdfpagerange}% + \hyxmp@add@simple{prism:isbn}{\@pdfisbn}% + \hyxmp@add@simple{prism:issn}{\@pdfissn}% + \hyxmp@add@simple{prism:eIssn}{\@pdfeissn}% + \hyxmp@add@simple{prism:doi}{\@pdfdoi}% + \hyxmp@add@simple{prism:url}{\@pdfurl}% + \hyxmp@add@simple{prism:byteCount}{\@pdfbytes}% + \hyxmp@add@simple{prism:pageCount}{\@pdfnumpages}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{XMP extension schemata} +% \label{sec:extension-schemata} +% +% Not all of the schemata supported by \pkgname{hyperxmp} are predefined +% by \acro{XMP}. \acro{PDF/A} conversion would normally fail for +% documents that employ ``custom'' schemata. However, this problem can +% be circumvented by declaring non-standard schemata in the \acro{XMP} +% packet itself, following a technique described in a PDF Association +% technical note~\cite{PDFA2008:ext-schemas}. In this section, we +% declare only those schemata we actually use. +% +% \begin{macro}{\hyxmp@check@iptc@data} +% Define |\hyxmp@iptc@data| as the concatenation of all \acro{IPTC} +% photo metadata supplied by the document. +% \begin{macrocode} +\newcommand*{\hyxmp@check@iptc@data}{% +% \end{macrocode} +% \begin{macro}{\hyxmp@iptc@data} +% \begin{macrocode} + \edef\hyxmp@iptc@data{% + \@pdfcontactaddress + \@pdfcontactcity + \@pdfcontactregion + \@pdfcontactpostcode + \@pdfcontactcountry + \@pdfcontactphone + \@pdfcontactemail + \@pdfcontacturl + }% +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\hyxmp@check@prism@data} +% Define |\hyxmp@prism@data| as the concatenation of all \acro{PRISM} +% metadata supplied by the document. +% \begin{macrocode} +\newcommand*{\hyxmp@check@prism@data}{% +% \end{macrocode} +% \begin{macro}{\hyxmp@prism@data} +% \begin{macrocode} + \edef\hyxmp@prism@data{% + \@pdfbookedition + \@pdfbytes + \@pdfdoi + \@pdfeissn + \@pdfisbn + \@pdfissn + \@pdfissuenum + \@pdfnumpages + \@pdfpagerange + \@pdfpublication + \@pdfpubtype + \@pdfsubtitle + \@pdfurl + \@pdfvolumenum + }% +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\hyxmp@begin@extension@decls} +% Begin a block of \acro{XML} tags that indicates we're declaring one or +% more extension schemata. +% \begin{macrocode} +\newcommand*{\hyxmp@begin@extension@decls}{% + \hyxmp@add@to@xml{% +______<pdfaExtension:schemas>^^J% +________<rdf:Bag>^^J% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyxmp@end@extension@decls} +% End the block of \acro{XML} tags begun by |\hyxmp@begin@extension@decls|. +% \begin{macrocode} +\newcommand*{\hyxmp@end@extension@decls}{% + \hyxmp@add@to@xml{% +________</rdf:Bag>^^J% +______</pdfaExtension:schemas>^^J% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyxmp@begin@ext@decl} +% Begin the declaration of a single extension schema. +% |\hyxmp@begin@ext@decl| accepts the schema's name, prefix, and +% namespace URI. +% \changes{v4.0}{2019/03/15}{Added this macro} +% \begin{macrocode} +\newcommand*{\hyxmp@begin@ext@decl}[3]{% + \hyxmp@add@to@xml{% +__________<rdf:li rdf:parseType="Resource">^^J% +____________<pdfaSchema:schema>#1</pdfaSchema:schema>^^J% +____________<pdfaSchema:prefix>#2</pdfaSchema:prefix>^^J% +____________<pdfaSchema:namespaceURI>#3</pdfaSchema:namespaceURI>^^J% +____________<pdfaSchema:property>^^J% +______________<rdf:Seq>^^J% + }% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyxmp@end@ext@decl} +% End the declaration of a single extension schema. +% \changes{v4.0}{2019/03/15}{Added this macro} +% \begin{macrocode} +\newcommand*{\hyxmp@end@ext@decl}{% + \hyxmp@add@to@xml{% +______________</rdf:Seq>^^J% +____________</pdfaSchema:property>^^J% +__________</rdf:li>^^J% + }% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyxmp@declare@property} +% Declare a single extension-schema property. |\hyxmp@declare@property| +% takes as input an optional type (defaults to \xmpterm{Text}) and a +% mandatory name, category, and description. +% \changes{v4.0}{2019/03/15}{Added this macro} +% \begin{macrocode} +\newcommand{\hyxmp@declare@property}[4][Text]{% + \hyxmp@add@to@xml{% +________________<rdf:li rdf:parseType="Resource">^^J% +__________________<pdfaProperty:name>#2</pdfaProperty:name>^^J% +__________________<pdfaProperty:valueType>#1</pdfaProperty:valueType>^^J% +__________________<pdfaProperty:category>#3</pdfaProperty:category>^^J% +__________________<pdfaProperty:description>#4</pdfaProperty:description>^^J% +________________</rdf:li>^^J% + }% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyxmp@declare@field} +% Declare a single field in a custom datatype required by an extension +% schema. |\hyxmp@declare@field| takes as input an optional type +% (defaults to \xmpterm{Text}) and a mandatory name and description. +% \changes{v4.0}{2019/03/16}{Replaced +% \protect\cs{hyxmp@declare@resource} with this macro} +% \begin{macrocode} +\newcommand{\hyxmp@declare@field}[3][Text]{% + \hyxmp@add@to@xml{% +______________________<rdf:li rdf:parseType="Resource">^^J% +________________________<pdfaField:name>#2</pdfaField:name>^^J% +________________________<pdfaField:valueType>#1</pdfaField:valueType>^^J% +________________________<pdfaField:description>#3</pdfaField:description>^^J% +______________________</rdf:li>^^J% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyxmp@mm@extensions} +% Declare the \acro{XMP} Media Management schema. +% \changes{v4.0}{2019/03/15}{Added this macro} +% \begin{macrocode} +\newcommand*{\hyxmp@mm@extensions}{% + \hyxmp@begin@ext@decl + {XMP Media Management Schema}% + {xmpMM}% + {http://ns.adobe.com/xap/1.0/mm/}% + \hyxmp@declare@property + [URI] + {DocumentID}% + {internal}% + {UUID based identifier for all versions and renditions of a document}% + \hyxmp@declare@property + [URI] + {InstanceID}% + {internal}% + {UUID based identifier for specific incarnation of a document}% + \hyxmp@declare@property + {VersionID}% + {internal}% + {Document version identifier}% + \hyxmp@end@ext@decl +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyxmp@pdfa@id@extensions} +% Declare the \acro{PDF/A} Identification schema~\cite{PDFA2008:xmp-props}. +% \changes{v4.0}{2019/03/15}{Added this macro} +% \begin{macrocode} +\newcommand*{\hyxmp@pdfa@id@extensions}{% + \hyxmp@begin@ext@decl + {PDF/A Identification Schema}% + {pdfaid}% + {http://www.aiim.org/pdfa/ns/id/}% + \hyxmp@declare@property + [Integer]% + {part}% + {internal}% + {Part of PDF/A standard}% + \hyxmp@declare@property + {conformance}% + {internal}% + {Conformance level of PDF/A standard}% + \hyxmp@end@ext@decl +}% +% \end{macrocode} % \end{macro} % % \begin{macro}{\hyxmp@iptc@extensions} @@ -3734,124 +4429,204 @@ ______</rdf:Description>^^J% % \xmpterm{Iptc4xmpCore:CreatorContactInfo} fields a unique % \xmpterm{pdfaType:prefix} to better support conversion of the % document to \acro{PDF/A}} +% \changes{v4.0}{2019/03/09}{Moved the header code from here into +% \protect\cs{hyxmp@begin@extension@decls} and the trailer code +% from here into \protect\cs{hyxmp@end@extension@decls}} +% \changes{v4.0}{2019/03/16}{Rewrote to more closely honor the +% \acro{XMP} specification} % Because \acro{IPTC} metadata are not recognized by the \acro{PDF/A} % standard, \acro{PDF/A} conversion would normally fail for documents -% that utilize |\pdfcontactaddress|, |\pdfcontactcity|, etc. However, -% there exists a technique, described in a PDF Association technical -% note~\cite{PDFA2008:ext-schemas}, for describing nonstandard -% \acro{XMP} metadata within the \acro{XMP} packet itself. We use that -% technique here to describe all of the metadata that -% |\hyxmp@photometa@schema| can produce. Doing so enables the document -% to be converted to \acro{PDF/A} format. +% that utilize \acro{IPTC} metadata. Declaring the \acro{IPTC} +% metadata we support enables the document to be converted to +% \acro{PDF/A} format. % \begin{macrocode} \newcommand*{\hyxmp@iptc@extensions}{% + \hyxmp@begin@ext@decl + {IPTC Core Schema}% + {Iptc4xmpCore}% + {http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/}% + \hyxmp@declare@property + [ContactInfo] + {CreatorContactInfo} + {external} + {Document creator's contact information} +% \end{macrocode} +% We can't call |\hyxmp@end@ext@decl| because we need first need to +% define the \xmpterm{Iptc4xmpCore:ContactInfo} structure. +% \begin{macrocode} \hyxmp@add@to@xml{% -______<rdf:Description rdf:about=""^^J% -__________xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/"^^J% -__________xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema\hyxmp@hash"^^J% -__________xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property\hyxmp@hash"^^J% -__________xmlns:pdfaType="http://www.aiim.org/pdfa/ns/type\hyxmp@hash"^^J% -__________xmlns:pdfaField="http://www.aiim.org/pdfa/ns/field\hyxmp@hash">^^J% -________<pdfaExtension:schemas>^^J% -__________<rdf:Bag>^^J% -____________<rdf:li rdf:parseType="Resource">^^J% -______________<pdfaSchema:schema>IPTC Core Schema</pdfaSchema:schema>^^J% -______________<pdfaSchema:namespaceURI>http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/</pdfaSchema:namespaceURI>^^J% -______________<pdfaSchema:prefix>Iptc4xmpCore</pdfaSchema:prefix>^^J% -______________<pdfaSchema:property>^^J% -________________<rdf:Seq>^^J% -__________________<rdf:li rdf:parseType="Resource">^^J% -____________________<pdfaProperty:name>CreatorContactInfo</pdfaProperty:name>^^J% -____________________<pdfaProperty:valueType>contactinfo</pdfaProperty:valueType>^^J% -____________________<pdfaProperty:category>external</pdfaProperty:category>^^J% -____________________<pdfaProperty:description>contact information for the document's creator</pdfaProperty:description>^^J% -__________________</rdf:li>^^J% -________________</rdf:Seq>^^J% -______________</pdfaSchema:property>^^J% -______________<pdfaSchema:valueType>^^J% -________________<rdf:Seq>^^J% -__________________<rdf:li rdf:parseType="Resource">^^J% -____________________<pdfaType:type>contactinfo</pdfaType:type>^^J% -____________________<pdfaType:namespaceURI>http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/</pdfaType:namespaceURI>^^J% -____________________<pdfaType:prefix>Iptc4xmpCore</pdfaType:prefix>^^J% -____________________<pdfaType:description>contact information</pdfaType:description>^^J% -____________________<pdfaType:field>^^J% -______________________<rdf:Seq>^^J% +______________</rdf:Seq>^^J% +____________</pdfaSchema:property>^^J% +____________<pdfaSchema:valueType>^^J% +______________<rdf:Seq>^^J% +________________<rdf:li rdf:parseType="Resource">^^J% +__________________<pdfaType:type>ContactInfo</pdfaType:type>^^J% +__________________<pdfaType:namespaceURI>http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/</pdfaType:namespaceURI>^^J% +__________________<pdfaType:prefix>Iptc4xmpCore</pdfaType:prefix>^^J% +__________________<pdfaType:description>% + Basic set of information to get in contact with a person% + </pdfaType:description>^^J% +__________________<pdfaType:field>^^J% +____________________<rdf:Seq>^^J% }% -% \end{macrocode} -% \begin{macrocode} - \hyxmp@text@resource{CiAdrExtadr}{contact address}% - \hyxmp@text@resource{CiAdrCity}{contact city}% - \hyxmp@text@resource{CiAdrRegion}{contact region}% - \hyxmp@text@resource{CiAdrPcode}{contact postal code}% - \hyxmp@text@resource{CiAdrCtry}{contact country}% - \hyxmp@text@resource{CiTelWork}{contact telephone number}% - \hyxmp@text@resource{CiEmailWork}{contact email address}% - \hyxmp@text@resource{CiUrlWork}{contact url}% -% \end{macrocode} -% \begin{macrocode} + \hyxmp@declare@field + {CiAdrCity}% + {Contact information city}% + \hyxmp@declare@field + {CiAdrCtry}% + {Contact information country}% + \hyxmp@declare@field + {CiAdrExtadr}% + {Contact information address}% + \hyxmp@declare@field + {CiAdrPcode}% + {Contact information local postal code}% + \hyxmp@declare@field + {CiAdrRegion}% + {Contact information regional information such as state or province}% + \hyxmp@declare@field + {CiEmailWork}% + {Contact information email address(es)}% + \hyxmp@declare@field + {CiTelWork}% + {Contact information telephone number(s)}% + \hyxmp@declare@field + {CiUrlWork}% + {Contact information Web URL(s)}% \hyxmp@add@to@xml{% -______________________</rdf:Seq>^^J% -____________________</pdfaType:field>^^J% -__________________</rdf:li>^^J% -________________</rdf:Seq>^^J% -______________</pdfaSchema:valueType>^^J% -____________</rdf:li>^^J% -__________</rdf:Bag>^^J% -________</pdfaExtension:schemas>^^J% -______</rdf:Description>^^J% +____________________</rdf:Seq>^^J% +__________________</pdfaType:field>^^J% +________________</rdf:li>^^J% +______________</rdf:Seq>^^J% +____________</pdfaSchema:valueType>^^J% +__________</rdf:li>^^J% }% } % \end{macrocode} % \end{macro} % -% \begin{macro}{\hyxmp@text@resource} -% \changes{v2.2}{2012/12/13}{Added this macro} -% Output a single \xmpterm{Text} resource given its name and description. -% \begin{macrocode} -\newcommand*{\hyxmp@text@resource}[2]{% - \hyxmp@add@to@xml{% -________________________<rdf:li rdf:parseType="Resource">^^J% -__________________________<pdfaField:name>#1</pdfaField:name>^^J% -__________________________<pdfaField:valueType>Text</pdfaField:valueType>^^J% -__________________________<pdfaField:description>#2</pdfaField:description>^^J% -________________________</rdf:li>^^J% - } -} +% \begin{macro}{\hyxmp@prism@extensions} +% \changes{v4.0}{2019/03/15}{Added this macro} +% Because \acro{PRISM} metadata are not recognized by the \acro{PDF/A} +% standard, \acro{PDF/A} conversion would normally fail for documents +% that utilize \acro{PRISM} metadata. Declaring the \acro{PRISM} +% metadata we support enables the document to be converted to +% \acro{PDF/A} format. +% \begin{macrocode} +\newcommand*{\hyxmp@prism@extensions}{% + \hyxmp@begin@ext@decl + {PRISM Basic Metadata}% + {prism}% + {http://prismstandard.org/namespaces/basic/2.1/}% + \hyxmp@declare@property + {complianceProfile}% + {internal}% + {PRISM specification compliance profile to which this document adheres}% + \hyxmp@declare@property + {publicationName}% + {external}% + {Publication name}% + \hyxmp@declare@property + {aggregationType}% + {external}% + {Publication type}% + \hyxmp@declare@property + {bookEdition}% + {external}% + {Edition of the book in which the document was published}% + \hyxmp@declare@property + {volume}% + {external}% + {Publication volume number}% + \hyxmp@declare@property + {number}% + {external}% + {Publication issue number within a volume}% + \hyxmp@declare@property + {pageRange}% + {external}% + {Page range for the document within the print version of its publication}% + \hyxmp@declare@property + {issn}% + {external}% + {ISSN for the printed publication in which the document was published}% + \hyxmp@declare@property + {eIssn}% + {external}% + {ISSN for the electronic publication in which the document was published}% + \hyxmp@declare@property + {isbn}% + {external}% + {ISBN for the publication in which the document was published}% + \hyxmp@declare@property + {doi}% + {external}% + {Digital Object Identifier for the document}% + \hyxmp@declare@property + [URL] + {url}% + {external}% + {URL at which the document can be found}% + \hyxmp@declare@property + [Integer] + {byteCount}% + {internal}% + {Approximate file size in octets}% + \hyxmp@declare@property + [Integer] + {pageCount}% + {internal}% + {Number of pages in the print version of the document}% + \hyxmp@declare@property + {subtitle}% + {external}% + {Document's subtitle}% + \hyxmp@end@ext@decl +}% % \end{macrocode} % \end{macro} % -% \subsubsection{The PDF/A Identification schema} -% \label{sec:pdfa-id} -% -% \begin{macro}{\hyxmp@pdfa@id@schema} -% Add properties defined by the \acro{PDF/A} Identification -% schema~\cite{PDFA2008:xmp-props} to the |\hyxmp@xml| macro. These -% properties identify a document as conforming to a particular -% \acro{PDF/A} standard. We default to \acro{PDF/A}-1b if any \acro{PDF/A} -% compliance is detected but let the author override the ``1'' with -% \optname{pdfapart} and the ``B'' with \optname{pdfaconformance}. -% \changes{v2.4}{2013/12/21}{Added this macro} -% \changes{v2.9}{2016/04/12}{Let the author specify the \protect\acro{PDF/A} -% part and conformance IDs, as requested by Leonid Sinev} +% \begin{macro}{\hyxmp@declare@extensions} +% Declare all \acro{XMP} extension schemata. We'll always have at least +% one, the \acro{XMP} Media Management extensions, because we +% automatically generate \xmpterm{xmpMM:DocumentID} and +% \xmpterm{xmpMM:InstanceID} +% values. +% \begin{macrocode} +\newcommand*{\hyxmp@declare@extensions}{% + \hyxmp@begin@extension@decls +% \end{macrocode} +% Declare the \acro{XMP} Media Management extensions (always present). +% \begin{macrocode} + \hyxmp@mm@extensions +% \end{macrocode} +% Declare the \acro{PDF/A} Identification extensions, but only when +% generating a \acro{PDF/A} document. % \begin{macrocode} -\newcommand*{\hyxmp@pdfa@id@schema}{% \ifHy@pdfa - \hyxmp@add@to@xml{% -______<rdf:Description rdf:about=""^^J% -____________xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">^^J% - }% - \hyxmp@add@simple{pdfaid:part}{\@pdfapart}% - \hyxmp@add@simple{pdfaid:conformance}{\@pdfaconformance}% - \hyxmp@add@to@xml{% -______</rdf:Description>^^J% - }% + \hyxmp@mm@extensions + \fi +% \end{macrocode} +% Conditionally declare \acro{IPTC} photo metadata extensions. +% \begin{macrocode} + \ifx\hyxmp@iptc@data\@empty + \else + \hyxmp@iptc@extensions \fi +% \end{macrocode} +% Conditionally declare \acro{PRISM} basic metadata extensions. +% \begin{macrocode} + \ifx\hyxmp@prism@data\@empty + \else + \hyxmp@prism@extensions + \fi +% \end{macrocode} +% \begin{macrocode} + \hyxmp@end@extension@decls } % \end{macrocode} % \end{macro} % -% % \subsubsection{Combining schemata into an XMP packet} % \label{sec:combining-schemata} % @@ -3891,20 +4666,51 @@ ______</rdf:Description>^^J% \gdef\hyxmp@xml{}% \hyxmp@add@to@xml{<?xpacket begin="\hyxmp@bom" % id="W5M0MpCehiHzreSzNTczkc9d"?>^^J% -<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-702">^^J% -___<rdf:RDF +<x:xmpmeta xmlns:x="adobe:ns:meta/">^^J% +__<rdf:RDF % xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns\hyxmp@hash">^^J% +____<rdf:Description rdf:about=""^^J% +% \end{macrocode} +% Specify every namespace we can potentially use, even the ones we end +% up not actually using. +% \begin{macrocode} +_____________________xmlns:pdf="http://ns.adobe.com/pdf/1.3/"^^J% +_____________________xmlns:xmpRights="http://ns.adobe.com/xap/1.0/rights/"^^J% +_____________________xmlns:dc="http://purl.org/dc/elements/1.1/"^^J% +_____________________xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"^^J% +_____________________xmlns:xmp="http://ns.adobe.com/xap/1.0/"^^J% +_____________________xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"^^J% +_____________________xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent\hyxmp@hash"^^J% +_____________________xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/"^^J% +_____________________xmlns:prism="http://prismstandard.org/namespaces/basic/2.1/"^^J% +_____________________xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/"^^J% +_____________________xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/"^^J% +_____________________xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema\hyxmp@hash"^^J% +_____________________xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property\hyxmp@hash"^^J% +_____________________xmlns:pdfaType="http://www.aiim.org/pdfa/ns/type\hyxmp@hash"^^J% +_____________________xmlns:pdfaField="http://www.aiim.org/pdfa/ns/field\hyxmp@hash">^^J% }% +% \end{macrocode} +% Declare non-standard schemata. +% \begin{macrocode} + \hyxmp@check@iptc@data + \hyxmp@check@prism@data + \hyxmp@declare@extensions +% \end{macrocode} +% Insert all the metadata we know how to insert. +% \begin{macrocode} \hyxmp@pdf@schema \hyxmp@xmpRights@schema \hyxmp@dc@schema \hyxmp@photoshop@schema - \hyxmp@photometa@schema \hyxmp@xmp@basic@schema \hyxmp@pdfa@id@schema \hyxmp@mm@schema + \hyxmp@iptc@schema + \hyxmp@prism@schema \hyxmp@add@to@xml{% -___</rdf:RDF>^^J% +____</rdf:Description>^^J% +__</rdf:RDF>^^J% </x:xmpmeta>^^J% \hyxmp@padding <?xpacket end="w"?>^^J% @@ -3975,8 +4781,8 @@ ___</rdf:RDF>^^J% % uncompress \emph{every} \acro{PDF} stream. The solution, provided by % Hans Hagen on the |luatex| mailing list (thread: % \href{http://tug.org/pipermail/luatex/2016-July/006077.html}{``Leaving -% a single PDF object uncompressed''}, 6\,\textsc{Jul}\,2016), is to -% provide the |uncompressed| flag to |\pdfobj|. Our definition of +% a single \acro{PDF} object uncompressed''}, 6\,\textsc{Jul}\,2016), +% is to provide the |uncompressed| flag to |\pdfobj|. Our definition of % |\hyxmp@embed@packet@pdftex| uses the \pkgname{ifluatex} package to % distinguish the \pdfTeX\ case from the pre-0.85 \LuaTeX\ case. % |