summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/hyperxmp
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-04-06 21:11:36 +0000
committerKarl Berry <karl@freefriends.org>2019-04-06 21:11:36 +0000
commit27bb1897864a47c3b5a67db781d1f0fc632a94ce (patch)
tree9fbe4059ac62195d8b1cca8036a93687b3deaf3f /Master/texmf-dist/source/latex/hyperxmp
parentc948fca8b9884315b8cfef4b23b922f0511c0d5c (diff)
hyperxmp (6apr19)
git-svn-id: svn://tug.org/texlive/trunk@50812 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/hyperxmp')
-rw-r--r--Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex5
-rw-r--r--Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx294
2 files changed, 181 insertions, 118 deletions
diff --git a/Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex b/Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex
index d12291b4fc6..f876012212a 100644
--- a/Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex
+++ b/Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex
@@ -79,6 +79,11 @@
</rdf:li>
</rdf:Alt>
</dc:rights>
+ <dc:publisher>
+ <rdf:Bag>
+ <rdf:li>\metavalue{Wiley-VCH}</rdf:li>
+ </rdf:Bag>
+ </dc:publisher>
<dc:creator>
<rdf:Seq>
<rdf:li>\metavalue{Albert Einstein}</rdf:li>
diff --git a/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx b/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx
index c52380e5734..a5aa24a146b 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/03/31 v4.0 Store hyperref metadata in XMP format]
+ [2019/04/05 v4.1 Store hyperref metadata in XMP format]
%</package>
%
%<*driver>
@@ -39,6 +39,7 @@
\usepackage{varioref}
\usepackage{alltt}
\usepackage{multicol}
+\usepackage{makeidx}
\usepackage[utf8]{inputenc}
\usepackage{hyperxmp}
\usepackage[unicode,bookmarksopen,bookmarksopenlevel=2,bookmarksnumbered]{hyperref}
@@ -88,7 +89,7 @@
%</driver>
% \fi
%
-% \CheckSum{2082}
+% \CheckSum{2095}
%
% \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
@@ -123,8 +124,8 @@
% to work within email addresses, as requested by Leonid Sinev}
% \changes{v2.6}{2014/09/24}{Added support for a new \protect\optname{pdfdate}
% key to explicitly specify the document date (and optionally time)}
-% \changes{v2.9}{2016/04/25}{Force inclusion of \protect\xmpterm{dc:creator},
-% \protect\xmpterm{dc:title}, and \protect\xmpterm{dc:description}---even if
+% \changes{v2.9}{2016/04/25}{Force inclusion of \protect\xmpprop{dc:creator},
+% \protect\xmpprop{dc:title}, and \protect\xmpprop{dc:description}---even if
% empty---when \protect\pkgname{hyperref} is loaded with the
% \protect\optname{pdfa} option (suggested by Leonid Sinev)}
% \changes{v2.9}{2016/04/26}{Introduced the \protect\optname{pdftype}
@@ -138,34 +139,44 @@
% 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}
+% \changes{v4.1}{2019/04/05}{Updated the documentation to refer to
+% \protect\cs{pdfnumpages} by its correct name. Thanks to Volker RW Schaa
+% for catching the discrepancy}
%
% ^^A \GetFileInfo{hyperxmp.dtx}
%
-% \DoNotIndex{,\,\ ,\!,\",\#,\(,\),\*,\<,\>,\@cons,\@empty}
-% \DoNotIndex{\@ifpackageloaded,\@ifundefined,\@nil,\@tempcnta,\@tempcntb}
-% \DoNotIndex{\MessageBreak,\\,\^,\^,\_,\advance,\afterassignment}
+% \DoNotIndex{\,,\&,\ ,\!,\",\#,\(,\),\*,\<,\>,\\,\^,\~,\^,\_}
+% \DoNotIndex{\@cons,\@empty,\@firstofone,\@firstoftwo,\@gobble,\@gobbletwo}
+% \DoNotIndex{\@ifpackageloaded,\@ifundefined,\@nil,\@secondoftwo}
+% \DoNotIndex{\@tempcnta,\@tempcntb,\MessageBreak,\advance,\afterassignment}
% \DoNotIndex{\aftergroup,\begin,\begingroup,\bgroup,\catcode,\csname,\def}
% \DoNotIndex{\divide,\edef,\egroup,\else,\end,\endcsname,\endgroup}
% \DoNotIndex{\expandafter,\fi,\futurelet,\g@addto@macro,\gdef,\global,\if}
% \DoNotIndex{\ifcase,\ifnum,\ifx,\immediate,\lccode,\let,\loop,\lowercase}
% \DoNotIndex{\multiply,\newcommand,\noexpand,\or,\relax,\repeat,\space}
-% \DoNotIndex{\string,\the,\toks,\uccode,\uppercase,\usepackage,\xdef,\~}
+% \DoNotIndex{\string,\the,\toks,\uccode,\uppercase,\usepackage,\xdef}
%
% ^^A Define a few logical styles.
% \DeclareRobustCommand{\term}[1]{#1\SortIndex{#1}{#1}}
% \DeclareRobustCommand{\pkgname}[1]{\mbox{\textsf{#1}}\SortIndex{#1}{\textsf{#1}}}
% \makeatletter
-% \DeclareRobustCommand{\xmpterm}[2][]{^^A
-% \def\xmptermopt{#1}^^A
-% \ifx\xmptermopt\@empty
+% \DeclareRobustCommand{\xmpprop}[2][]{^^A XMP property
+% \def\xmppropopt{#1}^^A
+% \ifx\xmppropopt\@empty
% \mbox{\textsf{#2}}^^A
% \else
% \mbox{\textsf{#2}}.\mbox{\textsf{#1}}^^A
% \SortIndex{#1}{\textsf{#1}}^^A
% \fi
% \SortIndex{#2}{\textsf{#2}}^^A
+% \index{properties, \acrostyle{XMP}&#2=\textsf{#2}}^^A
+% }
+% \DeclareRobustCommand{\xmpterm}[1]{^^A All other XMP terms
+% \mbox{\textsf{#1}}^^A
+% \SortIndex{#1}{\textsf{#1}}^^A
% }
% \makeatother
+% \index{XMP=\acrostyle {XMP}&properties|see{properties, \acrostyle{XMP}}}
% \DeclareRobustCommand{\pdfterm}[1]{\mbox{\textsf{#1}}\SortIndex{#1}{\textsf{#1}}}
% \DeclareRobustCommand{\cmdname}[1]{\mbox{\texttt{#1}}\SortIndex{#1}{\texttt{#1}}}
% \DeclareRobustCommand{\optname}[1]{^^A
@@ -173,7 +184,7 @@
% \SortIndex{#1}{\textsf{#1} (option)}^^A
% \index{options&#1=\textsf{#1}}^^A
% }
-% ^^A \moptname is the same as \optname but also typesets the
+% ^^A \moptname is the same as \optname but additionally typesets the
% ^^A option name in the margin.
% \DeclareRobustCommand{\moptname}[1]{^^A
% \optname{#1}^^A
@@ -303,7 +314,7 @@
%
% In the preceding code, the |dc| namespace refers to the
% \href{http://purl.org/DC/}{Dublin Core schema}, a collection of
-% metadata properties. The \xmpterm{dc:creator} property surrounds the
+% metadata properties. The \xmpprop{dc:creator} property surrounds the
% list of authors. The \textsf{rdf} namespace is the
% \href{http://www.w3.org/RDF/}{Resource Description Framework}, which
% defines \xmpterm{rdf:Seq} as an ordered list of values. Each author
@@ -322,48 +333,49 @@
% \label{page:begin-metadata-list}
% \begin{itemize} \raggedright
% \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 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 \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 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 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})
+% (\xmpprop[CiAdrExtadr]{Iptc4xmpCore:CreatorContactInfo},
+% \xmpprop[CiAdrCity]{Iptc4xmpCore:CreatorContactInfo},
+% \xmpprop[CiAdrRegion]{Iptc4xmpCore:CreatorContactInfo},
+% \xmpprop[CiAdrPcode]{Iptc4xmpCore:CreatorContactInfo}, and
+% \xmpprop[CiAdrCtry]{Iptc4xmpCore:CreatorContactInfo})
+% \item author(s) (\xmpprop{dc:creator})
+% \item base \acro{URL} for relative references (\xmpprop{xmp:BaseURL})
+% \item book edition (\xmpprop{prism:bookEdition})
+% \item copyright (\xmpprop{dc:rights} and \xmpprop{xmpRights:Marked})
+% \item date (\xmpprop{dc:date}, \xmpprop{xmp:CreateDate},
+% \xmpprop{xmp:ModifyDate}, and \xmpprop{xmp:MetadataDate})
+% \item \acro{DOI} (\xmpprop{prism:doi})
+% \item email address(es) of primary author (\xmpprop[CiEmailWork]{Iptc4xmpCore:CreatorContactInfo})
+% \item file format (\xmpprop{dc:format})
+% \item file name of main \LaTeX\ source file (\xmpprop{dc:source})
+% \item file size in bytes (\xmpprop{prism:byteCount})
+% \item \acro{ISBN} (\xmpprop{prism:isbn})
+% \item \acro{ISSN}---both print (\xmpprop{prism:issn}) and electronic (\xmpprop{prism:eIssn})
+% \item issue number of parent publication (\xmpprop{prism:number})
+% \item keywords (\xmpprop{pdf:Keywords} and \xmpprop{dc:subject})
+% \item language used (\xmpprop{dc:language})
+% \item license \acro{URL} (\xmpprop{xmpRights:WebStatement})
+% \item metadata writer (\xmpprop{photoshop:CaptionWriter})
+% \item page count (\xmpprop{prism:pageCount})
+% \item page range(s) (\xmpprop{prism:pageRange})
+% \item \acro{PDF} version (\xmpprop{pdf:PDFVersion})
+% \item \acro{PDF}-generating tool (\xmpprop{pdf:Producer} and \xmpprop{xmp:CreatorTool})
+% \item \acro{PDF/A} compliance level and version (\xmpprop{pdfaid:part} and \xmpprop{pdfaid:conformance})
+% \item position/title of primary author (\xmpprop{photoshop:AuthorsPosition})
+% \item publication name of parent publication (\xmpprop{prism:publicationName})
+% \item publisher of the document (\xmpprop{dc:publisher})
+% \item summary (\xmpprop{dc:description})
+% \item subtitle (\xmpprop{prism:subtitle})
+% \item telephone number(s) of primary author (\xmpprop[CiTelWork]{Iptc4xmpCore:CreatorContactInfo})
+% \item title (\xmpprop{dc:title})
+% \item type of document (\xmpprop{dc:type})
+% \item type of parent publication (\xmpprop{prism:aggregationType})
+% \item \acro{URL} of the document (\xmpprop{prism:url})
+% \item \acro{URL}(s) of the primary author (\xmpprop[CiUrlWork]{Iptc4xmpCore:CreatorContactInfo})
+% \item \acro{UUID} for the document (\xmpprop{xmpMM:DocumentID})
+% \item \acro{UUID} for the document instance (\xmpprop{xmpMM:InstanceID})
+% \item version identifier for the document (\xmpprop{xmpMM:VersionID})
+% \item volume number of parent publication (\xmpprop{prism:volume})
% \end{itemize}
% \label{page:end-metadata-list}
%
@@ -450,9 +462,10 @@
% \item \optname{pdflicenseurl}
% \item \optname{pdfmetadate}
% \item \optname{pdfmetalang}
-% \item \optname{pdfpagecount}
+% \item \optname{pdfnumpages}
% \item \optname{pdfpagerange}
% \item \optname{pdfpublication}
+% \item \optname{pdfpublisher}
% \item \optname{pdfpubtype}
% \item \optname{pdfsource}
% \item \optname{pdfsubtitle}
@@ -574,7 +587,8 @@
% 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|).
+% (|fr-BE|). The publisher itself can be named using
+% \moptname{pdfpublisher}.
%
% \moptname{pdfpubtype} indicates the type of publication in which the
% document was published. This should be one of the \acro{PRISM}
@@ -727,6 +741,7 @@
% pdfdocumentid={uuid:6d1ac9ec-4ff2-515a-954b-648eeb4853b0},
% pdfversionid={2.998e8},
% pdfpublication={[de]Annalen der Physik},
+% pdfpublisher={Wiley-VCH},
% pdfpubtype={journal},
% pdfvolumenum={322},
% pdfissuenum={6},
@@ -810,9 +825,9 @@
% \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 to various \acro{XMP} metadata: \xmpprop{dc:creator},
+% \xmpprop{dc:title}, \xmpprop{dc:description}, and
+% \xmpprop{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
@@ -1042,7 +1057,7 @@
% \end{verbatim}
%
% \noindent
-% Rather, it generates a \xmpterm{dc:rights} tag of the form
+% Rather, it generates a \xmpprop{dc:rights} tag of the form
% ``\texttt{Copyright \textcopyright\ =2=0=by-1by=0\the\year, Scott
% Pakin}''. The garbage in that line corresponds to the remnants of
% the |\printfdate| code after expanding all of the \tex\ primitives and
@@ -1588,6 +1603,14 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@pdfpublisher}
+% Prepare to store the name of the document's publisher.
+% \begin{macrocode}
+\def\@pdfpublisher{}
+\define@key{Hyp}{pdfpublisher}{\hyxmp@pdfstringdef\@pdfpublisher{#1}}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\@pdfvolumenum}
% Prepare to store the volume identifier of the publication in which the
% document was published.
@@ -1989,10 +2012,10 @@
}%
\ifx\hyxmp@concated@metadata\@empty
\PackageWarningNoLine{hyperxmp}{%
-\jobname.tex did not specify any metadata to\MessageBreak
-include in the XMP packet.\space\space Please see the\MessageBreak
-hyperxmp documentation for instructions on how to\MessageBreak
-provide metadata values to hyperxmp}%
+ \jobname.tex did not specify any metadata to\MessageBreak
+ include in the XMP packet.\space\space Please see the\MessageBreak
+ hyperxmp documentation for instructions on how to\MessageBreak
+ provide metadata values to hyperxmp}%
\fi
}
% \end{macrocode}
@@ -2077,23 +2100,36 @@ provide metadata values to hyperxmp}%
}%
{}%
% \end{macrocode}
+% Older versions of \pkgname{hyperref} write the \pdfterm{Info}
+% dictionary to the \acro{PDF} file at the end of the document. New
+% versions of \pkgname{hyperref} write the \pdfterm{Info} dictionary to
+% the \acro{PDF} file at the \emph{beginning} of the document. For
+% compatibility with both old and new \pkgname{hyperref} implementations
+% we suppress writing the \pdfterm{Info} dictionary here, at the
+% beginning of the document.
+% \changes{v4.1}{2019/04/02}{Invoke
+% \protect\cs{hyxmp@suppress@pdf@metadata} at the beginning of the
+% document, for compatibility with both newer and older versions of
+% \protect\pkgname{hyperref}}
+% \begin{macrocode}
+ \hyxmp@suppress@pdf@metadata
+% \end{macrocode}
% We wait until the end of the document to construct the \acro{XMP}
% packet and write it to the \acro{PDF} document catalog. This gives
% the author ample opportunity to provide metadata to \pkgname{hyperref}
% and thereby \pkgname{hyperxmp}.
% \begin{macrocode}
\hyxmp@at@end{%
- \hyxmp@suppress@pdf@metadata
\hyxmp@find@metadata
\hyxmp@embed@packet
}%
}{%
\PackageWarningNoLine{hyperxmp}{%
-\jobname.tex failed to include a\MessageBreak
-\string\usepackage\string{hyperref\string}
-in the preamble.\MessageBreak
-Consequently, all hyperxmp functionality will be\MessageBreak
-disabled}%
+ \jobname.tex failed to include a\MessageBreak
+ \string\usepackage\string{hyperref\string}
+ in the preamble.\MessageBreak
+ Consequently, all hyperxmp functionality will be\MessageBreak
+ disabled}%
}%
}
% \end{macrocode}
@@ -2473,7 +2509,7 @@ disabled}%
% different literal for |\hyxmp@xmp@to@pdf@date@vii|'s pattern-matching
% to work.
% \begin{macrocode}
-\let\@hyxmp@gobbletwo=\@gobbletwo
+\let\hyxmp@gobbletwo=\@gobbletwo
% \end{macrocode}
% \end{macro}
%
@@ -2497,7 +2533,7 @@ disabled}%
Z%
\fi
\ifx#3\relax
- \expandafter\@hyxmp@gobbletwo
+ \expandafter\hyxmp@gobbletwo
\fi
\@gobbletwo #4%
}
@@ -3082,8 +3118,8 @@ disabled}%
% \subsubsection{Providing metadata in multiple languages}
% \label{sec:lang-alt}
%
-% Certain \acro{XMP} tags---\xmpterm{dc:title},
-% \xmpterm{dc:description}, and \xmpterm{dc:rights} (and others? Let me
+% Certain \acro{XMP} tags---\xmpprop{dc:title},
+% \xmpprop{dc:description}, and \xmpprop{dc:rights} (and others? Let me
% know.)---can be expressed in multiple languages. The same text is
% used for both language \optname{pdfmetalang} (default:
% \optname{pdflang}) and language ``|x-default|''. To express the same
@@ -3168,8 +3204,8 @@ disabled}%
% We use a linear congruential generator to produce pseudorandom
% version~4 \acro{UUID}s~\cite{Leach2005:uuid}. True, this method has
% its flaws but it's simple to implement in \tex\ and is good enough for
-% producing the \acro{XMP} \xmpterm{xmpMM:DocumentID} and
-% \xmpterm{xmpMM:InstanceID} fields.
+% producing the \acro{XMP} \xmpprop{xmpMM:DocumentID} and
+% \xmpprop{xmpMM:InstanceID} fields.
%
% \begin{macro}{\hyxmp@modulo@a}
% Replace the contents of |\@tempcnta| with the contents modulo~|#1|.
@@ -3507,10 +3543,10 @@ _______________________________________________________________^^J%
\newcommand*{\hyxmp@pdf@schema}{%
% \end{macrocode}
% Add a block of \acro{XML} to |\hyxmp@xml| that lists the document's
-% keywords (the \xmpterm{pdf:Keywords} property), the tools used to
-% produce the \acro{PDF} file (the \xmpterm{pdf:Producer} property), and
+% keywords (the \xmpprop{pdf:Keywords} property), the tools used to
+% produce the \acro{PDF} file (the \xmpprop{pdf:Producer} property), and
% the version of the \acro{PDF} standard adhered to (the
-% \xmpterm{pdf:PDFVersion} property). Unlike most of the other schemata
+% \xmpprop{pdf:PDFVersion} property). Unlike most of the other schemata
% that \pkgname{hyperxmp} supports, the Adobe \acro{PDF} schema is
% \emph{always} included in the document, even if all of its keys are
% empty. This is because \acro{PDF/A}-1b requires the keywords and
@@ -3518,7 +3554,7 @@ _______________________________________________________________^^J%
% metadata. Because \pkgname{hyperref} always specifies the
% \pdfterm{Keywords} and \pdfterm{Producer} fields, even when they're
% empty, \pkgname{hyperxmp} has to follow suit and define
-% \xmpterm{pdf:Keywords} and \xmpterm{pdf:Producer} in the \acro{XMP}
+% \xmpprop{pdf:Keywords} and \xmpprop{pdf:Producer} in the \acro{XMP}
% packet.
% \changes{v2.4}{2013/12/21}{Made
% \texttt{\string\string\string\hyxmp@pdf@schema}
@@ -3774,23 +3810,44 @@ ______</dc:#2>^^J%
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\hyxmp@singleton@dc}
+% Given an optional list type (|Seq| or |Bag|), a Dublin Core property,
+% and a string, append a block of \acro{XML} representing a one-element
+% list consisting of the given string.
+% \changes{v4.1}{2019/04/05}{Added this macro}
+% \begin{macrocode}
+\newcommand{\hyxmp@singleton@dc}[3][Bag]{%
+ \@ifnotmtarg{#3}{%
+ \hyxmp@xmlify{#3}%
+ \hyxmp@add@to@xml{%
+______<dc:#2>^^J%
+________<rdf:#1>^^J%
+__________<rdf:li>\hyxmp@xmlified</rdf:li>^^J%
+________</rdf:#1>^^J%
+______</dc:#2>^^J%
+ }%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\hyxmp@dc@schema}
% Add properties defined by the Dublin Core schema to the |\hyxmp@xml|
-% macro. Specifically, we add entries for the \xmpterm{dc:title}
+% macro. Specifically, we add entries for the \xmpprop{dc:title}
% property if the author specified a \optname{pdftitle}, the
-% \xmpterm{dc:description} property if the author specified a
-% \optname{pdfsubject}, the \xmpterm{dc:rights} property if the author
-% specified a \optname{pdfcopyright}, the \xmpterm{dc:creator} property
+% \xmpprop{dc:description} property if the author specified a
+% \optname{pdfsubject}, the \xmpprop{dc:rights} property if the author
+% specified a \optname{pdfcopyright}, the \xmpprop{dc:creator} property
% if the author specified a \optname{pdfauthor}, the
-% \xmpterm{dc:subject} property if the author specified
-% \optname{pdfkeywords}, and the \xmpterm{dc:language} property if the
+% \xmpprop{dc:subject} property if the author specified
+% \optname{pdfkeywords}, and the \xmpprop{dc:language} property if the
% author specified \optname{pdflang}. We also specify the
-% \xmpterm{dc:date} property using the date the document was run through
-% \LaTeX\ and the \xmpterm{dc:source} property using the base name of
+% \xmpprop{dc:date} property using the date the document was run through
+% \LaTeX\ and the \xmpprop{dc:source} property using the base name of
% the source file with |.tex| appended.
-% \changes{v2.0}{2012/08/26}{Added support for \xmpterm{dc:language}
-% and \xmpterm{dc:source}}
-% \changes{v2.4}{2013/12/21}{Made \xmpterm{dc:language} a \xmpterm{Bag}
+% \changes{v2.0}{2012/08/26}{Added support for \xmpprop{dc:language}
+% and \xmpprop{dc:source}}
+% \changes{v2.4}{2013/12/21}{Made \xmpprop{dc:language} a \xmpterm{Bag}
% instead of an individual item so as to conform to the latest
% \acro{XMP} specifications, a detail identified by Florian Breitwieser}
% \begin{macrocode}
@@ -3799,11 +3856,12 @@ ______</dc:#2>^^J%
\hyxmp@rdf@dc[\ifHy@pdfa]{title}{\@pdftitle}%
\hyxmp@rdf@dc[\ifHy@pdfa]{description}{\@pdfsubject}%
\hyxmp@rdf@dc{rights}{\@pdfcopyright}%
+ \hyxmp@singleton@dc{publisher}{\@pdfpublisher}%
+ \hyxmp@singleton@dc[Seq]{date}{\hyxmp@today}%
+ \hyxmp@singleton@dc{language}{\@pdflang}%
+ \hyxmp@singleton@dc{type}{\@pdftype}%
\hyxmp@list@to@xml[\ifHy@pdfa]{creator}{Seq}{\hyxmp@pdfauthor}%
\hyxmp@list@to@xml{subject}{Bag}{\hyxmp@pdfkeywords}%
- \hyxmp@list@to@xml{date}{Seq}{\hyxmp@today}%
- \hyxmp@list@to@xml{language}{Bag}{\@pdflang}%
- \hyxmp@list@to@xml{type}{Bag}{\@pdftype}%
\ifx\@pdfsource\@empty
\else
\hyxmp@add@simple{dc:source}{\@pdfsource}%
@@ -3818,16 +3876,16 @@ ______</dc:#2>^^J%
% \begin{macro}{\hyxmp@xmpRights@schema}
% Add properties defined by the \acro{XMP} Rights Management schema to the
% |\hyxmp@xml| macro. Currently, these are only the
-% \xmpterm{xmpRights:Marked} property and the
-% \xmpterm{xmpRights:WebStatement} property. If the author specified a
+% \xmpprop{xmpRights:Marked} property and the
+% \xmpprop{xmpRights:WebStatement} property. If the author specified a
% copyright statement we mark the document as copyrighted. If the
% author specified a license statement we include the \acro{URL} in the
% metadata.
% \changes{v1.4}{2011/05/29}{Renamed the \texttt{xapRights} namespace
% prefix to \texttt{xmpRights}}
% \changes{v2.0}{2012/08/25}{Modified to include
-% \xmpterm{xmpRights:Marked} only when \optname{pdfcopyright} is
-% specified and \xmpterm{xmpRights:WebStatement} only when
+% \xmpprop{xmpRights:Marked} only when \optname{pdfcopyright} is
+% specified and \xmpprop{xmpRights:WebStatement} only when
% \optname{pdflicenseurl} is specified}
% \begin{macrocode}
\newcommand*{\hyxmp@xmpRights@schema}{%
@@ -3870,12 +3928,12 @@ ______</dc:#2>^^J%
% \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
+% the \xmpprop{xmpMM:DocumentID} property is supposed to uniquely
+% identify a document, and the \xmpprop{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 \xmpprop{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}}
@@ -3883,7 +3941,7 @@ ______</dc:#2>^^J%
% \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
+% \changes{v4.0}{2019/03/09}{Include \protect\xmpprop{xmpMM:VersionID} in
% the \protect\acro{XMP} packet}
% \begin{macrocode}
\gdef\hyxmp@mm@schema{%
@@ -3904,8 +3962,8 @@ ______</dc:#2>^^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{xmp:CreateDate},
-% \xmpterm{xmp:ModifyDate}, and \xmpterm{xmp:MetadataDate} fields.
+% |\hyxmp@createdate| for the \xmpprop{xmp:CreateDate},
+% \xmpprop{xmp:ModifyDate}, and \xmpprop{xmp:MetadataDate} fields.
% \begin{macrocode}
\newcommand*{\hyxmp@define@createdate}{%
\@ifundefined{pdffeedback}{%
@@ -3939,8 +3997,8 @@ ______</dc:#2>^^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{xmp:CreateDate}, \protect\xmpterm{xmp:ModifyDate},
-% and \protect\xmpterm{xmp:MetadataDate} match the \protect\acro{PDF}
+% \protect\xmpprop{xmp:CreateDate}, \protect\xmpprop{xmp:ModifyDate},
+% and \protect\xmpprop{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}
@@ -4009,8 +4067,8 @@ ______</dc:#2>^^J%
% \begin{macro}{\hyxmp@photoshop@data}
% Add properties defined by the Photoshop schema to the |\hyxmp@xml|
% macro. We currently support only the
-% \xmpterm{photoshop:AuthorsPosition} and
-% \xmpterm{photoshop:CaptionWriter} properties.
+% \xmpprop{photoshop:AuthorsPosition} and
+% \xmpprop{photoshop:CaptionWriter} properties.
% \begin{macrocode}
\gdef\hyxmp@photoshop@schema{%
\edef\hyxmp@photoshop@data{\@pdfauthortitle\@pdfcaptionwriter}%
@@ -4114,7 +4172,7 @@ ______</dc:#2>^^J%
% \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}
+% currently support only the \xmpprop{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
@@ -4133,9 +4191,9 @@ ______</dc:#2>^^J%
\gdef\hyxmp@iptc@schema{%
% \end{macrocode}
% Because we currently support only
-% \xmpterm{Iptc4xmpCore:CreatorContactInfo} it suffices to check if we
+% \xmpprop{Iptc4xmpCore:CreatorContactInfo} it suffices to check if we
% have any relevant data. If so, we instantiate a
-% \xmpterm{Iptc4xmpCore:ContactInfo} structure with all available
+% \xmpprop{Iptc4xmpCore:ContactInfo} structure with all available
% fields.
% \begin{macrocode}
\ifx\hyxmp@iptc@data\@empty
@@ -4145,7 +4203,7 @@ ______<Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource">^^J%
}%
% \end{macrocode}
% We locally redefine |\hyxmp@extra@indent| to increase the indentation
-% of the assignments to \xmpterm{Iptc4xmpCore:CreatorContactInfo}'s
+% of the assignments to \xmpprop{Iptc4xmpCore:CreatorContactInfo}'s
% fields.
% \begin{macrocode}
\bgroup
@@ -4426,8 +4484,8 @@ ______________________</rdf:li>^^J%
% \changes{v2.2}{2012/12/13}{Added this macro to support
% \acro{PDF/A} generation}
% \changes{v2.3}{2013/01/08}{Gave the
-% \xmpterm{Iptc4xmpCore:CreatorContactInfo} fields a unique
-% \xmpterm{pdfaType:prefix} to better support conversion of the
+% \xmpprop{Iptc4xmpCore:CreatorContactInfo} fields a unique
+% \xmpprop{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
@@ -4452,7 +4510,7 @@ ______________________</rdf:li>^^J%
{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.
+% define the \xmpprop{Iptc4xmpCore:ContactInfo} structure.
% \begin{macrocode}
\hyxmp@add@to@xml{%
______________</rdf:Seq>^^J%
@@ -4589,8 +4647,8 @@ __________</rdf:li>^^J%
% \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}
+% automatically generate \xmpprop{xmpMM:DocumentID} and
+% \xmpprop{xmpMM:InstanceID}
% values.
% \begin{macrocode}
\newcommand*{\hyxmp@declare@extensions}{%