diff options
author | Karl Berry <karl@freefriends.org> | 2012-12-18 23:28:49 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-12-18 23:28:49 +0000 |
commit | 2036a05c122c8dd027354cd0cb0679f45db48f4b (patch) | |
tree | 985e58a3731159e28932e1713cd39adc3e5d4576 /Master | |
parent | 9d27ed716f49fb604685eba7a1162300afd7188e (diff) |
hyperxmp (18dec12)
git-svn-id: svn://tug.org/texlive/trunk@28568 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/doc/latex/hyperxmp/README | 10 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/hyperxmp/hyperxmp.pdf | bin | 542746 -> 631149 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex | 234 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/hyperxmp/einstein1.png (renamed from Master/texmf-dist/source/latex/hyperxmp/einstein.png) | bin | 36422 -> 36422 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/hyperxmp/einstein2.png | bin | 0 -> 44680 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx | 673 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/hyperxmp/hyperxmp.sty | 171 | ||||
-rwxr-xr-x | Master/tlpkg/libexec/ctan2tds | 18 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/cs.tlpsrc | 3 |
9 files changed, 953 insertions, 156 deletions
diff --git a/Master/texmf-dist/doc/latex/hyperxmp/README b/Master/texmf-dist/doc/latex/hyperxmp/README index 92bc1422811..b4a9ed2ad91 100644 --- a/Master/texmf-dist/doc/latex/hyperxmp/README +++ b/Master/texmf-dist/doc/latex/hyperxmp/README @@ -21,10 +21,12 @@ hyperxmp integrates seamlessly with hyperref and requires virtually no modifications to documents that already exploit hyperref's mechanisms for specifying PDF metadata. The current version of hyperxmp can embed the following metadata as XMP: title, authors, primary author's -title or position, metadata writer, subject, keywords, copyright, and -license URL. hyperxmp currently embeds XMP only within PDF documents -but is compatible with pdflatex, latex+dvips+ps2pdf, latex+dvipdfm, -xelatex, and lualatex. +title or position, metadata writer, subject/summary, keywords, +copyright, license URL, document base URL, document identifier and +instance identifier, language, source file name, PDF generating tool, +PDF version, and contact telephone number/postal address/email +address/URL. hyperxmp is compatible with pdflatex, +latex+dvips+ps2pdf, latex+dvipdfm, xelatex, and lualatex. Installation diff --git a/Master/texmf-dist/doc/latex/hyperxmp/hyperxmp.pdf b/Master/texmf-dist/doc/latex/hyperxmp/hyperxmp.pdf Binary files differindex bd92af0b95c..4d635ccdd30 100644 --- a/Master/texmf-dist/doc/latex/hyperxmp/hyperxmp.pdf +++ b/Master/texmf-dist/doc/latex/hyperxmp/hyperxmp.pdf diff --git a/Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex b/Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex new file mode 100644 index 00000000000..7cb2bbe7f3c --- /dev/null +++ b/Master/texmf-dist/source/latex/hyperxmp/einstein-xmp.tex @@ -0,0 +1,234 @@ +^^A Color-code metadata values. +\newcommand{\metavalue}[1]{\textcolor{blue}{#1}} + +^^A Define today's today in ISO format. +\makeatletter +\edef\todayISO{\the\year-} +\ifnum\month<10\relax + \g@addto@macro\todayISO{0} +\fi +\g@addto@macro\todayISO{\the\month-} +\ifnum\day<10\relax + \g@addto@macro\todayISO{0} +\fi +\g@addto@macro\todayISO{\the\day} +\makeatother + +\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: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{\todayISO}</rdf:li> + </rdf:Seq> + </dc:date> + <dc:language>\metavalue{en}</dc:language> + <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/contactinfo/ + </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://www.ctan.org/tex-archive/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:0595fdce-41dc-e4c4-6c418dc4ce46} + </xmpMM:DocumentID> + <xmpMM:InstanceID> + \metavalue{uuid:efd754c4-1d7f-200a-ef754ce413ea} + </xmpMM:InstanceID> + </rdf:Description> + </rdf:RDF> + </x:xmpmeta> + <?xpacket end="w"?> +\end{alltt} diff --git a/Master/texmf-dist/source/latex/hyperxmp/einstein.png b/Master/texmf-dist/source/latex/hyperxmp/einstein1.png Binary files differindex 661c3c6dfa0..661c3c6dfa0 100644 --- a/Master/texmf-dist/source/latex/hyperxmp/einstein.png +++ b/Master/texmf-dist/source/latex/hyperxmp/einstein1.png diff --git a/Master/texmf-dist/source/latex/hyperxmp/einstein2.png b/Master/texmf-dist/source/latex/hyperxmp/einstein2.png Binary files differnew file mode 100644 index 00000000000..243d4db15f9 --- /dev/null +++ b/Master/texmf-dist/source/latex/hyperxmp/einstein2.png diff --git a/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx b/Master/texmf-dist/source/latex/hyperxmp/hyperxmp.dtx index 6858ba47772..2189d6ab8a3 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> - [2012/09/16 v2.1 Store hyperref metadata in XMP format] + [2012/12/13 v2.2 Store hyperref metadata in XMP format] %</package> % %<*driver> @@ -35,13 +35,17 @@ \usepackage{color} \usepackage{tocbibind} \usepackage{microtype} +\usepackage{needspace} +\usepackage{varioref} +\usepackage{alltt} \usepackage{hyperxmp} -\usepackage[bookmarksopen,bookmarksopenlevel=2,pdflang=en]{hyperref} +\usepackage[bookmarksopen,bookmarksopenlevel=2,bookmarksnumbered]{hyperref} \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{hyperxmp.dtx} + \Needspace{10\baselineskip} \phantomsection\addcontentsline{toc}{section}{Change History} \PrintChanges \makeatletter @@ -56,7 +60,7 @@ %</driver> % \fi % -% \CheckSum{1210} +% \CheckSum{1370} % % \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 @@ -81,6 +85,10 @@ % (\string\XeTeX\ and \string\LuaTeX)} % \changes{v2.0}{2012/08/26}{Added support for the \protect\acro{XMP} Basic % schema and miscellaneous other bits of metadata} +% \changes{v1.2}{2010/06/04}{Added support for the \protect\XeTeX\ backend +% (\texttt{xdvipdfmx})} +% \changes{v1.2}{2010/06/07}{Added support for the Photoshop schema} +% \changes{v2.2}{2010/12/06}{Added support for the \protect\acro{IPTC} Photo Metadata schema} % % \GetFileInfo{hyperxmp.dtx} % @@ -167,7 +175,11 @@ % pdfkeywords={LaTeX, embedded metadata, XMP, PDF, copyright, license, comments}, % pdfcopyright={Copyright (C) 2012, Scott Pakin}, % pdflicenseurl={http://www.latex-project.org/lppl/}, -% pdfcaptionwriter={Scott Pakin} +% pdfcaptionwriter={Scott Pakin}, +% pdfcontactemail={scott+hyxmp@pakin.org}, +% pdfcontacturl={http://www.pakin.org/~scott/}, +% pdflang={en-US}, +% baseurl={http://www.ctan.org/tex-archive/macros/latex/contrib/hyperxmp/hyperxmp.pdf} % } % % \maketitle @@ -255,6 +267,14 @@ % \item primary author's position/title (\xmpterm{photoshop:AuthorsPosition}) % \item summary (\xmpterm{dc:description}) % \item title (\xmpterm{dc:title}) +% \item contact address (\xmpterm{Iptc4xmpCore:CiAdrExtadr}, +% \xmpterm{Iptc4xmpCore:CiAdrCity}, +% \xmpterm{Iptc4xmpCore:CiAdrRegion}, +% \xmpterm{Iptc4xmpCore:CiAdrPcode}, and +% \xmpterm{Iptc4xmpCore:CiAdrCtry}) +% \item contact telephone number(s) (\xmpterm{Iptc4xmpCore:CiTelWork}) +% \item contact email address(es) (\xmpterm{Iptc4xmpCore:CiEmailWork}) +% \item contact \acro{URL}(s) (\xmpterm{Iptc4xmpCore:CiUrlWork}) % \end{itemize} % % \noindent @@ -308,29 +328,50 @@ % \begin{itemize} % \item \optname{pdfauthortitle} % \item \optname{pdfcaptionwriter} +% \item \optname{pdfcontactaddress} +% \item \optname{pdfcontactcity} +% \item \optname{pdfcontactcountry} +% \item \optname{pdfcontactemail} +% \item \optname{pdfcontactphone} +% \item \optname{pdfcontactpostcode} +% \item \optname{pdfcontactregion} +% \item \optname{pdfcontacturl} % \item \optname{pdfcopyright} % \item \optname{pdflicenseurl} % \item \optname{pdfmetalang} % \end{itemize} % -% \noindent % \optname{pdfauthortitle} indicates the primary author's position or % title. \optname{pdfcaptionwriter} specifies the name of the person -% who added the metadata to the document. \optname{pdfcopyright} -% defines the copyright text. \optname{pdflicenseurl} identifies a -% \acro{URL} that points to the document's license agreement. -% \optname{pdfmetalang} indicates the natural language in which the -% metadata is written, typically as 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 is always included in addition to -% the specified metadata language, as the user reading the document may -% not have specified a language preference. +% 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 +% 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). +% +% \optname{pdfcopyright} defines the copyright text. +% \optname{pdflicenseurl} identifies a \acro{URL} that points to the +% document's license agreement. \optname{pdfmetalang} indicates the +% natural language in which the metadata is written, typically as 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 is always included in addition to the specified metadata +% language, as the user reading the document may not have specified a +% language preference. % % It is usually more convenient to provide values for those options using % \pkgname{hyperref}'s |\hypersetup| command than on the |\usepackage| @@ -340,6 +381,8 @@ % sample \LaTeX\ document that provides values for most of the metadata % options that \pkgname{hyperxmp} recognizes: % +% \Needspace{4\baselineskip} +% \label{page:begin-sample-doc} % \begin{verbatim} % \documentclass{article} % \usepackage{hyperxmp} @@ -359,6 +402,16 @@ % 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 +% }, % pdflang={en}, % baseurl={http://www.ctan.org/tex-archive/macros/latex/contrib/hyperxmp/} % } @@ -370,6 +423,7 @@ % processes in so-called empty space\dots % \end{document} % \end{verbatim} +% \label{page:end-sample-doc} % % Compile the document to \acro{PDF} using any of the following % approaches: @@ -396,113 +450,25 @@ % % \bigskip % -% Once the document is compiled, the resulting \acro{PDF} file -% will contain an \acro{XMP} packet that looks something like this: -% -% \begin{verbatim} -% <?xpacket begin="\357\273\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> -% energy quanta, Hertz effect, quantum physics -% </pdf:Keywords> -% <pdf:Producer>pdfTeX-1.40.10</pdf:Producer> -% </rdf:Description> -% <rdf:Description rdf:about="" -% xmlns:xmpRights="http://ns.adobe.com/xap/1.0/rights/"> -% <xmpRights:Marked>True</xmpRights:Marked> -% <xmpRights:WebStatement> -% 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>application/pdf</dc:format> -% <dc:title> -% <rdf:Alt> -% <rdf:li xml:lang="en"> -% On a heuristic viewpoint concerning the production and -% transformation of light -% </rdf:li> -% <rdf:li xml:lang="x-default"> -% On a heuristic viewpoint concerning the production and -% transformation of light -% </rdf:li> -% </rdf:Alt> -% </dc:title> -% <dc:description> -% <rdf:Alt> -% <rdf:li xml:lang="en">photoelectric effect</rdf:li> -% <rdf:li xml:lang="x-default">photoelectric effect</rdf:li> -% </rdf:Alt> -% </dc:description> -% <dc:rights> -% <rdf:Alt> -% <rdf:li xml:lang="en"> -% Copyright (C) 1905, Albert Einstein -% </rdf:li> -% <rdf:li xml:lang="x-default"> -% Copyright (C) 1905, Albert Einstein -% </rdf:li> -% </rdf:Alt> -% </dc:rights> -% <dc:creator> -% <rdf:Seq> -% <rdf:li>Albert Einstein</rdf:li> -% </rdf:Seq> -% </dc:creator> -% <dc:subject> -% <rdf:Bag> -% <rdf:li>energy quanta</rdf:li> -% <rdf:li>Hertz effect</rdf:li> -% <rdf:li>quantum physics</rdf:li> -% </rdf:Bag> -% </dc:subject> -% <dc:date> -% <rdf:Seq> -% <rdf:li>2012-08-26</rdf:li> -% </rdf:Seq> -% </dc:date> -% <dc:language>en</dc:language> -% <dc:source>einstein.tex</dc:source> -% </rdf:Description> -% <rdf:Description rdf:about="" -% xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"> -% <photoshop:AuthorsPosition> -% Technical Assistant, Level III -% </photoshop:AuthorsPosition> -% <photoshop:CaptionWriter>Scott Pakin</photoshop:CaptionWriter> -% </rdf:Description> -% <rdf:Description rdf:about="" -% xmlns:xmp="http://ns.adobe.com/xap/1.0/"> -% <xmp:CreateDate>2012-08-26</xmp:CreateDate> -% <xmp:ModifyDate>2012-08-26</xmp:ModifyDate> -% <xmp:MetadataDate>2012-08-26</xmp:MetadataDate> -% <xmp:CreatorTool>LaTeX with hyperref package</xmp:CreatorTool> -% <xmp:BaseURL> -% http://www.ctan.org/tex-archive/macros/latex/contrib/hyperxmp/ -% </xmp:BaseURL> -% </rdf:Description> -% <rdf:Description rdf:about="" -% xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"> -% <xmpMM:DocumentID>uuid:0595fdce-41dc-e4c4-6c418dc4ce46</xmpMM:DocumentID> -% <xmpMM:InstanceID>uuid:efd754c4-1d7f-200a-ef754ce413ea</xmpMM:InstanceID> -% </rdf:Description> -% </rdf:RDF> -% </x:xmpmeta> -% <?xpacket end="w"?> -% \end{verbatim} -% -% \noindent -% Figure~\ref{fig:xmp-metadata} is a screenshot of the preceding packet -% as it appears in Adobe Acrobat's ``Advanced'' metadata dialog box. +% Once the document is compiled, the resulting \acro{PDF} file will +% contain an \acro{XMP} packet that looks something like that shown in +% Appendix~\ref{sec:sample-packet}. Figure~\ref{fig:xmp-metadata-1} is +% a screenshot of the \acro{XMP} metadata as it appears in Adobe +% Acrobat's ``Advanced'' metadata dialog box. Further clicking on the +% ``Advanced'' item within that dialog box displays all of the +% document's metadata sorted by schema as shown in +% Figure~\ref{fig:xmp-metadata-2}. % % \begin{figure}[htbp] -% \includegraphics[width=\linewidth]{einstein} +% \includegraphics[width=\linewidth]{einstein1} % \caption{\acro{XMP} metadata as it appears in Adobe Acrobat} -% \label{fig:xmp-metadata} +% \label{fig:xmp-metadata-1} +% \end{figure} +% +% \begin{figure}[htbp] +% \includegraphics[width=\linewidth]{einstein2} +% \caption{Additional \acro{XMP} metadata as it appears in Adobe Acrobat} +% \label{fig:xmp-metadata-2} % \end{figure} % % \paragraph{Note~1: Acrobat \pdfterm{Author} bug} @@ -537,7 +503,27 @@ % \acro{PDF} readers likely displaying only the first author. % % -% \paragraph{Note~2: \XeLaTeX\ object compression} +% \paragraph{Note~2: 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 your 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: +% +% \begin{verbatim} +% \renewcommand*{\xmlinesep}{;} +% \end{verbatim} +% +% +% \paragraph{Note~3: \XeLaTeX\ object compression} % \XeLaTeX\ (or, more precisely, the \cmdname{xdvipdfmx} back end), % compresses \emph{all} \acro{PDF} objects, including the ones % containing \acro{XMP} metadata. While Adobe Acrobat can still detect @@ -551,7 +537,7 @@ % Adobe Acrobat and re-saving it with the Save As\dots\ menu option. % % -% \paragraph{Note~3: Literal commas} +% \paragraph{Note~4: Literal commas} % \pkgname{hyperxmp} splits the \optname{pdfauthor} and % \optname{pdfkeywords} lists at commas. Therefore, when specifying % \optname{pdfauthor} and \optname{pdfkeywords}, you should separate @@ -570,16 +556,41 @@ % % \noindent % \DescribeMacro{\xmpcomma} -% If you need to include a comma within an author or keyword list, use -% the |\xmpcomma| macro to represent it, and wrap the entire entry -% containing the comma within |\xmpquote{|\dots|}| as shown below: +% \DescribeMacro{\xmpquote} +% If you need to include a literal comma within an author or keyword +% list (where commas normally separate list items) or a street address +% (where commas normally separate lines), use the |\xmpcomma| macro to +% represent it, and wrap the entire entry containing the comma within +% |\xmpquote{|\dots|}| as shown below: % % \begin{verbatim} % pdfauthor={\xmpquote{Jack Napier\xmpcomma\ Jr.}, % \xmpquote{Edward Nigma\xmpcomma\ PhD}, % \xmpquote{Harvey Dent\xmpcomma\ Esq.}} +% +% pdfcontactaddress={Office of the President, +% \xmpquote{Wayne Enterprises\xmpcomma\ Inc.}, +% One Wayne Blvd} +% \end{verbatim} +% +% As of version~2.2 of \pkgname{hyperxmp}, it is acceptable to use +% |\xmpcomma| and |\xmpquote| within any \pkgname{hyperxmp} option, not +% just in those in which a comma normally serves as a separator +% (i.e.,~lists and multiline fields). Outside of those cases, +% |\xmpcomma| is treated as an ordinary comma, and |\xmpquote| returns +% its argument unmodified. Hence, it is legitimate to use |\xmpcomma| +% and |\xmpquote| in cases like the following +% +% \begin{verbatim} +% pdfauthortitle={\xmpquote{Psychiatrist\xmpcomma\ Arkham Asylum}} % \end{verbatim} % +% \noindent +% (Like most \pkgname{hyperxmp} options, \optname{pdfauthortitle} +% inserts its argument unmodified in an \acro{XMP} tag.) When in +% doubt, use |\xmpcomma| and |\xmpquote|; it should always be safe +% to do so. +% % % \StopEventually{^^A % \section{Future Work} @@ -594,6 +605,21 @@ % \tex\ engines (\pdfTeX, \LuaTeX, \XeTeX, etc.), please send me a code % patch. % +% \appendix +% +% \section{Sample XMP packet} +% \label{sec:sample-packet} +% +% The following is an example of a complete \acro{XMP} packet as may be +% produced by \pkgname{hyperxmp}. This packet corresponds to the +% metadata included in the sample \LaTeX\ document presented +% \vpagerefrange{page:begin-sample-doc}{page:end-sample-doc}. For +% clarity, metadata values, either specified explicitly by the document +% or introduced automatically by \pkgname{hyperxmp}, are colored blue. +% +% \input{einstein-xmp} +% +% % \begin{thebibliography}{1} % \bibitem{Adobe2010:pdfmark} % Adobe Systems, Inc., San Jose, California. @@ -628,11 +654,24 @@ % \newblock Archived by Google at % \url{http://groups.google.com/group/comp.text.tex/msg/7da7643b9e8f3b48}. % +% \bibitem{IPTC2010:photo-meta} +% International Press Telecommunications Council. +% \newblock {\em {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}. +% % \bibitem{IANA2011:lang-tags} % {Internet Assigned Numbers Authority}. % \newblock Language subtag registry, January~11, 2011. % \newblock Available from % \url{http://www.iana.org/assignments/language-subtag-registry}. +% +% \bibitem{PDFA2008:ext-schemas} +% PDF/A Competence Center, Berlin, Germany. +% \newblock {\em TechNote~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}. % \end{thebibliography} % } % @@ -664,8 +703,8 @@ % \end{macrocode} % \end{macro} % -% \changes{v1.5}{2012/03/10}{Made the XMP inclusion more robust. Thanks to -% Heiko Oberdiek for the bug report and suggested modifications.} +% \changes{v1.5}{2012/03/10}{Made the \acro{XMP} inclusion more robust. +% Thanks to Heiko Oberdiek for the bug report and suggested modifications.} % % \begin{macro}{\hyxmp@at@end} % \begin{macro}{\hyxmp@driver} @@ -761,6 +800,102 @@ % \end{macrocode} % \end{macro} % +% The following eight macros---|\@pdfcontactaddress|, +% |\@pdfcontactcity|, |\@pdfcontactregion|, |\@pdfcontactpostcode|, +% |\@pdfcontactcountry|, |\@pdfcontactphone|, |\@pdfcontactemail|, and +% |\@pdfcontacturl|---together specify how to contact the person or +% institution responsible for the document. +% +% \begin{macro}{\@pdfcontactaddress} +% Prepare to store a street address for the document's contact +% person\slash institution. The \acro{IPTC} standard defines this as +% follows: +% +% \begin{quote} +% The contact information address part. Comprises an optional company +% name and all required information to locate the building or postbox +% to which mail should be sent. To that end, the address is a +% multiline field. +% \end{quote} +% +% For consistency with the rest of \pkgname{hyperxmp}, we use commas to +% separate terms, in this case, lines of the address. The author can +% use |\xmpquote| and |\xmpcomma| to include literal commas. +% \begin{macrocode} +\def\@pdfcontactaddress{} +\define@key{Hyp}{pdfcontactaddress}{% + \let\xmpcomma=\hyxmp@comma + \def\xmpquote##1{##1}% + \pdfstringdef\@pdfcontactaddress{#1}% + \def\xmpcomma{,}% + \let\xmpquote=\relax +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfcontactcity} +% Prepare to store the city of the document's contact person\slash +% institution. +% \begin{macrocode} +\def\@pdfcontactcity{} +\define@key{Hyp}{pdfcontactcity}{\pdfstringdef\@pdfcontactcity{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfcontactregion} +% Prepare to store the state or province of the document's contact +% person\slash institution. +% \begin{macrocode} +\def\@pdfcontactregion{} +\define@key{Hyp}{pdfcontactregion}{\pdfstringdef\@pdfcontactregion{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfcontactpostcode} +% Prepare to store the postal code of the document's contact +% person\slash institution. +% \begin{macrocode} +\def\@pdfcontactpostcode{} +\define@key{Hyp}{pdfcontactpostcode}{\pdfstringdef\@pdfcontactpostcode{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfcontactcountry} +% Prepare to store the country of the document's contact person\slash +% institution. +% \begin{macrocode} +\def\@pdfcontactcountry{} +\define@key{Hyp}{pdfcontactcountry}{\pdfstringdef\@pdfcontactcountry{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfcontactphone} +% Prepare to store the telephone number of the document's contact +% person\slash institution. +% \begin{macrocode} +\def\@pdfcontactphone{} +\define@key{Hyp}{pdfcontactphone}{\pdfstringdef\@pdfcontactphone{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfcontactemail} +% Prepare to store the email address of the document's contact +% person\slash institution. +% \begin{macrocode} +\def\@pdfcontactemail{} +\define@key{Hyp}{pdfcontactemail}{\pdfstringdef\@pdfcontactemail{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@pdfcontacturl} +% Prepare to store the \acro{URL} of the document's contact person\slash +% institution. +% \begin{macrocode} +\def\@pdfcontacturl{} +\define@key{Hyp}{pdfcontacturl}{\pdfstringdef\@pdfcontacturl{#1}} +% \end{macrocode} +% \end{macro} +% % \changes{v2.1}{2012/09/16}{Enabled \pkgname{hyperxmp} and % \pkgname{hyperref} to be loaded in either order. This addresses a % bug report by Yury Donskoy} @@ -784,6 +919,17 @@ % same thing. This is required in case \pkgname{hyperref} is loaded % before \pkgname{hyperxmp}. % + +% \begin{macro}{\hyxmp@pdfauthor} +% \begin{macro}{\hyxmp@pdfkeywords} +% Prepare to store the name of the author and a list of keywords. +% \begin{macrocode} +\def\hyxmp@pdfauthor{} +\def\hyxmp@pdfkeywords{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \begin{macro}{\hyxmp@redefine@Hyp} % If not already redefined, redefine \pkgname{hyperref}'s % \optname{pdfauthor} and \optname{pdfkeywords} options to properly @@ -829,7 +975,7 @@ \def\xmpcomma{,}% \def\xmpquote####1{"####1"}% \hyxmp@Hyp@pdfauthor{##1}% - \let\xmpcomma=\relax + \def\xmpcomma{,}% \let\xmpquote=\relax }% % \end{macrocode} @@ -868,7 +1014,7 @@ \def\xmpcomma{,}% \def\xmpquote####1{"####1"}% \hyxmp@Hyp@pdfkeywords{##1}% - \let\xmpcomma=\relax + \def\xmpcomma{,}% \let\xmpquote=\relax }% } @@ -932,6 +1078,14 @@ \@pdfauthor \@pdfauthortitle \@pdfcaptionwriter + \@pdfcontactaddress + \@pdfcontactcity + \@pdfcontactcountry + \@pdfcontactemail + \@pdfcontactphone + \@pdfcontactpostcode + \@pdfcontactregion + \@pdfcontacturl \@pdfcopyright \@pdfkeywords \@pdflang @@ -1056,11 +1210,14 @@ disabled}% % Because \pkgname{hyperxmp} splits lists at commas, a comma cannot % normally be used within a list. We there provide an |\xmpcomma| macro % that can expand to either a true comma or a placeholder character -% depending on the situation. Here, we bind it to |\relax| to prevent -% it from expanding to either prematurely. +% depending on the situation. Here, we bind it to a comma so it can be +% used in \emph{any} \pkgname{hyperxmp} option, not just those that treat +% commas specially. % \changes{v2.0}{2012/08/25}{Added this macro} +% \changes{v2.2}{2012/12/07}{Changed the default from +% \texttt{\string\string\string\relax} to an ordinary comma} % \begin{macrocode} -\let\xmpcomma=\relax +\def\xmpcomma{,}% % \end{macrocode} % \end{macro} % @@ -1788,8 +1945,11 @@ disabled}% % blocks of \acro{XML} for various \acro{XMP} schemata: Adobe \acro{PDF} % (Section~\ref{sec:adobe-pdf}), Dublin Core % (Section~\ref{sec:dublin-core}), \acro{XMP} Rights Management -% (Section~\ref{sec:xmp-rights}), and \acro{XMP} Media Management -% (Section~\ref{sec:xmp-media}). The |\hyxmp@construct@packet| macro +% (Section~\ref{sec:xmp-rights}), \acro{XMP} Media Management +% (Section~\ref{sec:xmp-media}), \acro{XMP} Basic +% (Section~\ref{sec:xmp-basic}), Photoshop +% (Section~\ref{sec:photoshop}), and \acro{IPTC} Photo Metadata +% (Section~\ref{sec:photo-meta}). The |\hyxmp@construct@packet| macro % constructs the \acro{XMP} packet into |\hyxmp@xml|. It first writes % the appropriate \acro{XML} header, then calls the various % schema-writing macros, then injects |\hyxmp@padding| as padding, and @@ -2062,7 +2222,7 @@ ______</rdf:Description>^^J% % \label{sec:xmp-rights} % % \begin{macro}{\hyxmp@xmpRights@schema} -% Add properties defined by the XMP Rights Management schema to the +% 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 @@ -2135,7 +2295,7 @@ ______</rdf:Description>^^J% % \label{sec:xmp-media} % % \begin{macro}{\hyxmp@mm@schema} -% Add properties defined by the XMP Media Management schema to the +% 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 @@ -2192,14 +2352,13 @@ ______</rdf:Description>^^J% % \label{sec:photoshop} % % \begin{macro}{\hyxmp@photoshop@schema} +% \changes{v2.0}{2012/08/26}{Simplified using +% \texttt{\string\string\string\hyxmp@add@simple}} % \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. -% \changes{v1.2}{2010/06/07}{Added support for the Photoshop schema} -% \changes{v2.0}{2012/08/26}{Simplified using -% \texttt{\string\string\string\hyxmp@add@simple}} % \begin{macrocode} \gdef\hyxmp@photoshop@schema{% \edef\hyxmp@photoshop@data{\@pdfauthortitle\@pdfcaptionwriter}% @@ -2224,6 +2383,231 @@ ______</rdf:Description>^^J% % \end{macro} % % +% \subsubsection{The IPTC Photo Metadata schema} +% \label{sec:photo-meta} +% +% \begin{macro}{\xmplinesep} +% Lines in multiline fields are separated by |\xmplinesep| in the +% generated \acro{XML}. This defaults to an \acro{LF} (|^^J|) character +% but written as an \acro{XML} character entity for consistency across +% operating systems. +% \changes{v2.2}{2012/12/07}{Added this macro} +% \begin{macrocode} +\begingroup + \catcode`\&=12 + \catcode`\#=12 + \gdef\xmplinesep{
} +\endgroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyxmp@list@to@lines} +% Given a property~(|#1|) and a macro containing a comma-separated +% list~(|#2|), replace commas with |\xmplinesep|. Do nothing it the +% list is empty. +% \changes{v2.2}{2012/12/07}{Added this macro} +% \begin{macrocode} +\newcommand*{\hyxmp@list@to@lines}[2]{% + \ifx#2\@empty + \else + \bgroup + \hyxmp@add@to@xml{% +_________<#1>% + }% +% \end{macrocode} +% \begin{macro}{\@elt@first} +% The first element of the list is output as is. +% \begin{macrocode} + \def\@elt@first##1{% + \hyxmp@add@to@xml{##1}% + \let\@elt=\@elt@rest + }% +% \end{macrocode} +% \begin{macro}{\@elt@rest} +% The remaining elements of the list are output with a preceding line +% separator (|\xmplinesep|). +% \begin{macrocode} + \def\@elt@rest##1{% + \hyxmp@add@to@xml{\xmplinesep##1}% + }% +% \end{macrocode} +% \begin{macro}{\@elt} +% Re-encode the text from \term{Unicode} if necessary. Then redefine +% |\@elt| to insert a line separator between terms. +% \begin{macrocode} + \let\@elt=\@elt@first + \hyxmp@xmlify{#2}% + \hyxmp@commas@to@list\hyxmp@list{\hyxmp@xmlified}% + \hyxmp@list + \hyxmp@add@to@xml{</#1>^^J}% + \egroup + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\hyxmp@photometa@schema} +% \changes{v2.2}{2012/12/07}{Added this macro} +% \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{Iptc4xmpCore:CiAdrExtadr}, +% \xmpterm{Iptc4xmpCore:CiAdrCity}, \xmpterm{Iptc4xmpCore:CiAdrRegion}, +% \xmpterm{Iptc4xmpCore:CiAdrPcode}, \xmpterm{Iptc4xmpCore:CiAdrCtry}, +% \xmpterm{Iptc4xmpCore:CiTelWork}, \xmpterm{Iptc4xmpCore:CiEmailWork}, +% and \xmpterm{Iptc4xmpCore:CiUrlWork} properties. +% \begin{macrocode} +\gdef\hyxmp@photometa@schema{% + \edef\hyxmp@photometa@data{% + \@pdfcontactaddress + \@pdfcontactcity + \@pdfcontactregion + \@pdfcontactpostcode + \@pdfcontactcountry + \@pdfcontactphone + \@pdfcontactemail + \@pdfcontacturl + }% + \ifx\hyxmp@photometa@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% + }% + \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} +% \begin{macro}{\xmplinesep} +% The \acro{IPTC} standard states that sets of telephone numbers, email +% address, and \acro{URL}s for the contact person or institution, +% ``[m]ay have to be separated by a comma in the user +% interface''~\cite{IPTC2010:photo-meta}. This is rather ambiguous: +% Does the comma appear \emph{only} in the user interface or also in the +% generated \acro{XML}\@? Here we assume the latter interpretation and +% temporarily redefine |\xmplinesep| as a comma and use +% |\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 + \hyxmp@add@to@xml{% +_______</Iptc4xmpCore:CreatorContactInfo>^^J% +______</rdf:Description>^^J% + }% + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\hyxmp@iptc@extensions} +% \changes{v2.2}{2012/12/13}{Added this macro to support +% \acro{PDF/A} generation} +% 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. +% \begin{macrocode} +\newcommand*{\hyxmp@iptc@extensions}{% + \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/contactinfo/</pdfaType:namespaceURI>^^J% +____________________<pdfaType:prefix>Iptc4xmpCore</pdfaType:prefix>^^J% +____________________<pdfaType:description>contact information</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@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% + }% +} +% \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% + } +} +% \end{macrocode} +% \end{macro} +% +% % \subsubsection{Constructing the XMP packet} % % \begin{macro}{\hyxmp@bom} @@ -2270,6 +2654,7 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns\hyxmp@hash">^^J% \hyxmp@xmpRights@schema \hyxmp@dc@schema \hyxmp@photoshop@schema + \hyxmp@photometa@schema \hyxmp@xmp@basic@schema \hyxmp@mm@schema \hyxmp@add@to@xml{% @@ -2471,8 +2856,6 @@ ___</rdf:RDF>^^J% % always to leave the \pdfterm{Metadata} stream uncompressed, so the % \acro{XMP} metadata is likely to be missed by non-\acro{PDF}-aware % \acro{XMP} viewers. -% \changes{v1.2}{2010/06/04}{Added support for the \XeTeX\ backend -% (\texttt{xdvipdfmx})} % \begin{macrocode} \newcommand*{\hyxmp@embed@packet@xetex}{% \special{pdf:stream @hyxmp@Metadata (\hyxmp@xml) diff --git a/Master/texmf-dist/tex/latex/hyperxmp/hyperxmp.sty b/Master/texmf-dist/tex/latex/hyperxmp/hyperxmp.sty index 548b92fff4b..9c1a71148ee 100644 --- a/Master/texmf-dist/tex/latex/hyperxmp/hyperxmp.sty +++ b/Master/texmf-dist/tex/latex/hyperxmp/hyperxmp.sty @@ -22,7 +22,7 @@ %% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{hyperxmp} - [2012/09/16 v2.1 Store hyperref metadata in XMP format] + [2012/12/13 v2.2 Store hyperref metadata in XMP format] \edef\hyxmp@dq@code{\the\catcode`\"} \catcode`\"=12 \def\hyxmp@driver{hpdftex} @@ -47,6 +47,31 @@ \define@key{Hyp}{pdfcaptionwriter}{\pdfstringdef\@pdfcaptionwriter{#1}} \def\@pdfmetalang{} \define@key{Hyp}{pdfmetalang}{\pdfstringdef\@pdfmetalang{#1}} +\def\@pdfcontactaddress{} +\define@key{Hyp}{pdfcontactaddress}{% + \let\xmpcomma=\hyxmp@comma + \def\xmpquote##1{##1}% + \pdfstringdef\@pdfcontactaddress{#1}% + \def\xmpcomma{,}% + \let\xmpquote=\relax +} +\def\@pdfcontactcity{} +\define@key{Hyp}{pdfcontactcity}{\pdfstringdef\@pdfcontactcity{#1}} +\def\@pdfcontactregion{} +\define@key{Hyp}{pdfcontactregion}{\pdfstringdef\@pdfcontactregion{#1}} +\def\@pdfcontactpostcode{} +\define@key{Hyp}{pdfcontactpostcode}{\pdfstringdef\@pdfcontactpostcode{#1}} +\def\@pdfcontactcountry{} +\define@key{Hyp}{pdfcontactcountry}{\pdfstringdef\@pdfcontactcountry{#1}} +\def\@pdfcontactphone{} +\define@key{Hyp}{pdfcontactphone}{\pdfstringdef\@pdfcontactphone{#1}} +\def\@pdfcontactemail{} +\define@key{Hyp}{pdfcontactemail}{\pdfstringdef\@pdfcontactemail{#1}} +\def\@pdfcontacturl{} +\define@key{Hyp}{pdfcontacturl}{\pdfstringdef\@pdfcontacturl{#1}} + +\def\hyxmp@pdfauthor{} +\def\hyxmp@pdfkeywords{} \newcommand*{\hyxmp@redefine@Hyp}{% \@ifundefined{KV@Hyp@pdfauthor}{}{% \@ifundefined{hyxmp@Hyp@pdfauthor}{% @@ -62,7 +87,7 @@ \def\xmpcomma{,}% \def\xmpquote####1{"####1"}% \hyxmp@Hyp@pdfauthor{##1}% - \let\xmpcomma=\relax + \def\xmpcomma{,}% \let\xmpquote=\relax }% \@ifundefined{KV@Hyp@pdfkeywords}{}{% @@ -79,7 +104,7 @@ \def\xmpcomma{,}% \def\xmpquote####1{"####1"}% \hyxmp@Hyp@pdfkeywords{##1}% - \let\xmpcomma=\relax + \def\xmpcomma{,}% \let\xmpquote=\relax }% } @@ -99,6 +124,14 @@ \@pdfauthor \@pdfauthortitle \@pdfcaptionwriter + \@pdfcontactaddress + \@pdfcontactcity + \@pdfcontactcountry + \@pdfcontactemail + \@pdfcontactphone + \@pdfcontactpostcode + \@pdfcontactregion + \@pdfcontacturl \@pdfcopyright \@pdfkeywords \@pdflang @@ -150,7 +183,7 @@ disabled}% \fi \next } -\let\xmpcomma=\relax +\def\xmpcomma{,}% \bgroup \catcode`\^^C=11 \gdef\hyxmp@comma{^^C} @@ -666,6 +699,135 @@ ______</rdf:Description>^^J% \fi } \begingroup + \catcode`\&=12 + \catcode`\#=12 + \gdef\xmplinesep{
} +\endgroup +\newcommand*{\hyxmp@list@to@lines}[2]{% + \ifx#2\@empty + \else + \bgroup + \hyxmp@add@to@xml{% +_________<#1>% + }% + \def\@elt@first##1{% + \hyxmp@add@to@xml{##1}% + \let\@elt=\@elt@rest + }% + \def\@elt@rest##1{% + \hyxmp@add@to@xml{\xmplinesep##1}% + }% + \let\@elt=\@elt@first + \hyxmp@xmlify{#2}% + \hyxmp@commas@to@list\hyxmp@list{\hyxmp@xmlified}% + \hyxmp@list + \hyxmp@add@to@xml{</#1>^^J}% + \egroup + \fi +} +\gdef\hyxmp@photometa@schema{% + \edef\hyxmp@photometa@data{% + \@pdfcontactaddress + \@pdfcontactcity + \@pdfcontactregion + \@pdfcontactpostcode + \@pdfcontactcountry + \@pdfcontactphone + \@pdfcontactemail + \@pdfcontacturl + }% + \ifx\hyxmp@photometa@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% + }% + \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}% + \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 + \hyxmp@add@to@xml{% +_______</Iptc4xmpCore:CreatorContactInfo>^^J% +______</rdf:Description>^^J% + }% + \fi +} +\newcommand*{\hyxmp@iptc@extensions}{% + \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/contactinfo/</pdfaType:namespaceURI>^^J% +____________________<pdfaType:prefix>Iptc4xmpCore</pdfaType:prefix>^^J% +____________________<pdfaType:description>contact information</pdfaType:description>^^J% +____________________<pdfaType:field>^^J% +______________________<rdf:Seq>^^J% + }% + \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}% + \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% + }% +} +\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% + } +} +\begingroup \ifhyxmp@unicodetex \lccode`\!="FEFF % \lowercase{% @@ -690,6 +852,7 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns\hyxmp@hash">^^J% \hyxmp@xmpRights@schema \hyxmp@dc@schema \hyxmp@photoshop@schema + \hyxmp@photometa@schema \hyxmp@xmp@basic@schema \hyxmp@mm@schema \hyxmp@add@to@xml{% diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index b1231301cef..12a6cd2f79d 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -336,7 +336,7 @@ chomp ($Build = `cd $Master/../Build/source && pwd`); 'em', "die 'skipping, european modern fonts too old, not packaged'", 'emerald', "die 'skipping, nonfree fonts'", 'empheq', "die 'skipping, use mh'", - 'enctex', "die 'skipping, engine requiring compilation'", + 'enctex', "die 'skipping, needs compilation (plus csplain macros)'", 'encxvlna', "&MAKEcopy", 'enpassant', "die 'skipping, license unknown'", 'epic', "die 'skipping, license unknown and replaced by eepic'", @@ -4922,6 +4922,13 @@ sub POST_cstexpkgs { unlink ("$DEST/tex/csplain/base/texput.log"); # stray file } +# update enctex files from csplain +# addformat lines in csplain, cslatex +# executemap cs-charter.map, csfonts.map in cs +# (no more csother or cstext). +# remove tfm/cspsfonts-adobe/* vf/cspsfonts-adobe/* +# enc/dvips/base/xl2.enc, xt2.enc + sub POSTcs { print "POST$package - untar and combine\n"; # @@ -4935,7 +4942,14 @@ sub POSTcs { $untar .= " --exclude texmf/doc/cstex"; # filter out cstex dir &SYSTEM ($untar); } - &SYSTEM ("$RM -rf $DEST/fonts/source/jknappen"); # elide sauter mods + # + # move map file to right place. + &SYSTEM ("$MV $DEST/dvips/config/csfonts.map $DEST/fonts/map/dvips/cs/"); + # + # remove Sauter modifications and other unknown files. + &SYSTEM ("$RM -rf $DEST/fonts/source/jknappen"); + &SYSTEM ("$RM -rf $DEST/fonts/vf-cnv"); + &SYSTEM ("$RM -rf $DEST/fonts/vf/public/cm2cs"); &SYSTEM ("$RM *"); # dump rest } diff --git a/Master/tlpkg/tlpsrc/cs.tlpsrc b/Master/tlpkg/tlpsrc/cs.tlpsrc index a19f876f4d2..9dbc85e82b5 100644 --- a/Master/tlpkg/tlpsrc/cs.tlpsrc +++ b/Master/tlpkg/tlpsrc/cs.tlpsrc @@ -1,3 +1,4 @@ -catalogue cspsfonts +catalogue csfonts +# also csfonts-t1 and cspsfonts. execute addMixedMap csother.map execute addMixedMap cstext.map |