% \iffalse meta-comment % An Infrastructure for marking up Dublin Core Metadata in LaTeX documents % Copyright (c) 2007-2011 Michael Kohlhase, all rights reserved % this file is released under the % LaTeX Project Public License (LPPL) % The original of this file is in the public repository at % http://github.com/KWARC/sTeX/ % \fi % % \iffalse %<*package> \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{dcm}[2019/03/20 v0.3 Dublin Core Metadata] % %<*driver> \documentclass{ltxdoc} \usepackage[utf8]{inputenc} \usepackage{dcm,modules,stex-logo,url,array,float} \usepackage[show]{ed} \usepackage[hyperref=auto,style=alphabetic]{biblatex} \addbibresource{kwarcpubs.bib} \addbibresource{extpubs.bib} \addbibresource{kwarccrossrefs.bib} \addbibresource{extcrossrefs.bib} \usepackage{ctangit} \usepackage{hyperref} \makeindex \floatstyle{boxed} \newfloat{exfig}{thp}{lop} \floatname{exfig}{Example} \WAperson[id=jdoe,affiliation=dfki,department=skss, url=http://dfki.de/jdoe] {John Doe} \WAperson[id=miko,affiliation=jacu,department=case, url=http://kwarc.info/kohlhase] {Michael Kohlhase} \WAinstitution[id=case,acronym=CASE,shortname=Center for Adv. Sys. Engineering, url=http://jacobs-university.de/ses/case,partof=jacu] {Center for Advanced Systems Engineering} \WAinstitution[id=jacu,url=http://jacobs-university.de] {Jacobs University Bremen} \WAinstitution[id=skss,url=http://dfki.de/sks,partof=dfki,shortname=Safe\&Secure Cognitive Systems,acronym=SKS] {Safe and Secure Cognitive Systems} \WAinstitution[id=dfki,url=http://dfki.de,shortname=DFKI,acronym=DFKI] {German Research Center for Artificial Intelligence} \def\githubissue#1{\cite{sTeX:github:on}, \hyperlink{https://github.com/KWARC/sTeX/issues/#1}{issue #1}} \begin{document} \RecordChanges \DocInput{dcm.dtx} \end{document} % % \fi % %\CheckSum{291} % % \changes{v0.1}{2007/01/02}{First Hack for OMDoc spec} % \changes{v0.2}{2008/06/17}{First Version with Documentation} % \changes{v0.2}{2008/07/02}{Renamed to dcm} % \changes{v0.3}{2009/09/21}{much more documentation of the user interface} % \changes{v0.3}{2009/09/21}{Adding sref support and made generated headings configurable} % \changes{v0.3}{2010/01/11}{Eliminating stub author index that never worked anyways} % \changes{v0.4}{2011/11/05}{moving DCMperson and friends to the \texttt{workaddress} package} % % \GetFileInfo{dcm.sty} % % \MakeShortVerb{\|} % \def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} % \def\latexml{\scsys{LaTeXML}} % % \begin{DCmetadata}[maketitle] % \DCMtitle{{\texttt{dcm.sty}}: An Infrastructure for marking up Dublin Core Metadata in {\LaTeX} % documents\thanks{Version {\fileversion} (last revised {\filedate})}} % \DCMcreators{miko,jdoe} % \DCMabstract{The |dcm| package allows mark up Dublin % Core Metadata in {\LaTeX} documents that can be harvested by automated tools or % exported to PDF, while at the same time generating conventional title information.} % \end{DCmetadata} % % \setcounter{tocdepth}{2}\tableofcontents\newpage % %\section[id=intro]{Introduction} % % The |dcm| package allows mark up Dublin Core Metadata~\cite{DCMI:dmt03} in {\LaTeX} % documents so that it can be harvested by automated tools or exported to PDF\ednote{This % still needs to be implemented, see \texttt{http://www.wlug.org.nz/PdfLatexNotes} for % details}. This package allows to attribute authorship to arbitrary text % fragments.\ednote{continue} % % \section[id=user]{The User Interface} % % \subsection[id=user.options]{Package Options} % % The |dcm| package takes a single option: \DescribeMacro{showmeta}|showmeta|. If this is % set, then the metadata keys are shown (see~\cite{Kohlhase:metakeys:ctan} for details and % customization options). % % \subsection[id=user.dcm.mdblock]{The DC Metadata Block} % % \DescribeEnv{DCmetadata} The |dcm| provides the environment |DCmetadata| for Dublin Core % Metadata Blocks. |DCmetadata| defines local macros for the specifying the relevant % Dublin Core metadata fields and takes an optional argument that specifies the % presentation of the metadata block, see Figure~\ref{fig:dcmblock} for an example which % would generate the title block for the |dcm| package. Let us now come to the macros themselves % % \DescribeMacro{\DCMcreators}\DescribeMacro{\DCMcontributors} The |\DCMcreators| and % |\DCMcontributors| macros are used to specify the authors and contributors to a text % fragments. These macros take one argument, the authorship of a document specified in % terms of |id|s of persons specified via |\WAperson| before. They can occur multiply in % a metadata block. % % \DescribeMacro{\DCMtitle} The |\DCMtitle| macro takes one argument, the % % \DescribeMacro{\DCMshorttitle} The |\DCMshorttitle| macro takes one argument, the % % \DescribeMacro{\DCMsubject} The |\DCMsubject| macro takes one argument, the % % \DescribeMacro{\DCMdescription} The |\DCMdescription| macro takes one argument, the % % \DescribeMacro{\DCMpublisher} The |\DCMpublisher| macro takes one argument, the % % \DescribeMacro{\DCMdate} The |\DCMdate| macro takes one argument, the % % \DescribeMacro{\DCMtype} The |\DCMtype| macro takes one argument, the % % \DescribeMacro{\DCMidentifier} The |\DCMidentifier| macro takes two arguments, the first one % is the identification system, and the second one the identifier string itself. % % \DescribeMacro{\DCMsource} The |\DCMsource| macro takes one argument, the % % \DescribeMacro{\DCMlanguage} The |\DCMlanguage| macro takes one argument, the % % \DescribeMacro{\DCMrelation} The |\DCMrelation| macro takes one argument, the % % \DescribeMacro{\DCMrights} The |\DCMrights| macro takes one argument, the % % \DescribeMacro{\DCMlicense} The |\DCMlicense| macro takes one argument, the % % \DescribeMacro{\DCMabstract} The |\DCMabstract| macro takes one argument, the % % \DescribeMacro{\DCMlicensenotice} The |\DCMlicensenotice| macro takes one argument, the % % \DescribeMacro{\DCMcopyrightnotice} The |\DCMcopyrightnotice| macro takes one argument, the % % \DescribeMacro{\DCMcclicense} The |\DCMcclicense| macro % % \DescribeMacro{\attribution} % % \DescribeMacro{\noncommercial} % % \DescribeMacro{\sharealike} % % \DescribeMacro{\noderivativeworks} % % \begin{exfig}[ht] % \begin{verbatim} % \begin{DCmetadata}[maketitle] % \DCMtitle{An Infrastructure for marking up Dublin Core Metadata in % {\LaTeX} documents\thanks{Version {\fileversion} % (last revised {\filedate})}} % \DCMcreators{miko,jdoe} % \DCMdate{\today} % \DCMcopyrightnotice{2008}{Michael Kohlhase} % \DCMlicensenotice{Copyright (c) 2008 Michael Kohlhase, all rights % reserved. This file is released under the LaTeX Project Public % License (LPPL)} % \DCMabstract{The {\texttt{dcm}} packge allows mark up Dublin % Core Metadata in {\LaTeX} documents that can be harvested by % automated tools or exported to PDF, while at the same time % generating conventional title information.} % \end{DCmetadata} % \end{verbatim} % \caption{The DC Metadata block for the {\texttt{dcm}} package documentation} % \label{fig:dcmblock} % \end{exfig} % % \subsection[id=user.blockstyles]{DCM Metadata Block Styles} % % The |DCmetadata| environment takes an optional argument that specifies the style the % metadata block is rendered in. The |dcm| package supplies two styles: % \DescribeMacro{maketitle}|maketitle| and \DescribeMacro{titlepage}|titlepage|. The % former uses the |\maketitle| macro from the calling class to assemble a title, whereas % the latter builds a title page from scratch. The title block of this documentation has % been created by the |maketitle| style. % % To add a further metadata block style \meta{sty}, we simply have to supply a % \DescribeMacro{\dcm@*@block}|\dcm@|\meta{sty}|@block| macro that expands to the intended % presentation. This macro does not take any arguments, but can use the internal token % registers defined by the |DCmetadata| environment. Generally, for any of the metadata % commands |\DCM|\meta{md} defined in {\sref{user.dcm.mdblock}} there is a token register % |\dcm@|\meta{md} that contains the value specified in the key. % % \subsection[id=user.conig]{Configuration} % % The |dcm| package provides a set of macros that customize (e.g. for multiple languages) % the generated % content. % \DescribeMacro{\dcm@abstract@heading} % \DescribeMacro{\dcm@creators@heading} % \DescribeMacro{\dcm@contributors@connector} % \DescribeMacro{\dcm@chapter@heading} % \DescribeMacro{\dcm@section@heading} % \DescribeMacro{\dcm@subsection@heading} % \DescribeMacro{\dcm@subsubsection@heading} % \begin{center}\makeatletter % \begin{tabular}{|l|l|}\hline % Macro & Default\\\hline\hline % |\dcm@abstract@heading| & \dcm@abstract@heading \\\hline % |\dcm@creators@heading| & \dcm@creators@heading \\\hline % |\dcm@contributors@connector| & \dcm@contributors@connector \\\hline\hline % |\dcm@chapter@heading| & \dcm@chapter@heading \\\hline % |\dcm@section@heading| & \dcm@section@heading \\\hline % |\dcm@subsection@heading| & \dcm@subsection@heading \\\hline % |\dcm@subsubsection@heading| & \dcm@subsubsection@heading \\\hline % \end{tabular} % \end{center} % % % \section{Limitations}\label{sec:limitations} % % In this section we document known limitations. If you want to help alleviate them, % please feel free to contact the package author. Some of them are currently discussed in % the \sTeX GitHub repository~\cite{sTeX:github:on}. % \begin{enumerate} % \item none reported yet % \end{enumerate} % % \StopEventually{\printbibliography} % % \section[id=impl]{The Implementation} % % \subsection[id=impl.options]{Package Options} % The first step is to declare (a few) package options that handle whether certain % information is printed or not. They all come with their own conditionals that are set by % the options. % % \begin{macrocode} %<*package> \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{rdfmeta} \PassOptionsToPackage{\CurrentOption}{workaddress}} \ProcessOptions % \end{macrocode} % % The first measure is to ensure that the |KeyVal| package is loaded (in the right % version). For {\latexml} we also initialize the package inclusions. % \begin{macrocode} \RequirePackage{workaddress} \RequirePackage[sectioning]{rdfmeta} % \end{macrocode} % % \subsection{The DC Metadata Block} % % Then we make an environment for defining the metadata. Note that since we have defined % the |omdoc:metadata| element to auto-open and auto-close, we do not have to (and should % not for that matter) supply it in the |DCmetadata| element. % % \begin{environment}{DCmetadata} % \begin{macrocode} \newenvironment{DCmetadata}[1][]% {\def\@style{#1}}% to set the way things are presented. {\@ifundefined{dcm@\@style @block}% {\message{style {\@style} not defined}}% {\csname dcm@\@style @block\endcsname}} % \end{macrocode} % \end{environment} % % Here come the constructors, most of them are relatively straightforward % % \begin{macro}{\DCMcreators} % the |\DCMcreators| macro checks whether all ids are defined. % \begin{macrocode} \def\DCMcreators#1{\@for\@I:=#1\do{\wa@ref1{person}\@I{id}} \gdef\dcm@creators{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMcontributors} % the |\DCMcontributors| macro also checks whether all ids are defined. % \begin{macrocode} \def\DCMcontributors#1{\@for\@I:=#1\do{\wa@ref1{person}\@I{id}}% \def\dcm@contributors{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMtitle} % \begin{macrocode} \def\DCMtitle#1{\def\dcm@title{#1}\providecommand{\dcm@shorttitle}{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMsubtitle} % \begin{macrocode} \def\dcm@subtitle{} \def\DCMsubtitle#1{\def\dcm@subtitle{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMshorttitle} % \begin{macrocode} \def\dcm@shorttitle{} \def\DCMshorttitle#1{\def\dcm@shorttitle{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMsubject} % \begin{macrocode} \def\DCMsubject#1{\def\dcm@subject{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMdescription} % \begin{macrocode} \long\def\DCMdescription#1{\long\def\dcm@description{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMpublisher} % \begin{macrocode} \def\DCMpublisher#1{\def\dcm@publisher{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMdate} % the |\DCMdate| uses |\today| as a default\ednote{@DEYAN: do that in latexml} % \begin{macrocode} \def\dcm@date{\today} \def\DCMdate#1{\def\dcm@date{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMtype} % \begin{macrocode} \def\DCMtype#1{\def\dcm@type{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMidentifier} % \begin{macrocode} \def\DCMidentifier#1#2{\def\dcm@scheme{#1}\def\dcm@identifier{#2}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMsource} % \begin{macrocode} \def\DCMsource#1{\def\dcm@source{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMlanguage} % \begin{macrocode} \def\DCMlanguage#1{\def\dcm@language{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMrelation} % \begin{macrocode} \def\DCMrelation#1{\def\dcm@relation{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMrights} % \begin{macrocode} \def\DCMrights#1{\long\def\dcm@rights{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMlicense} % \begin{macrocode} \def\DCMlicense#1{\def\dcm@license{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMlicensenotice} % here we have a default % \begin{macrocode} \def\dcm@license{All rights reserved} \def\DCMlicensenotice#1{\long\def\dcm@license{\\[1ex]License: #1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMcopyrightnotice} % \begin{macrocode} \def\DCMcopyrightnotice#1#2{\DCMrights{Copyright {\copyright} #1: #2}} % \end{macrocode} % \end{macro} % % \begin{macro}{\cclicense} % \begin{macrocode} \def\cclicense#1{\def\attribution{\def\dcm@by{yes}} \def\noncommercial{\def\dcm@nc{yes}} \def\sharealike{\defdcm@sharealike{yes}} \def\noderivativeworks{\def\dcm@derivatives{no}}} % \end{macrocode} % \end{macro} % % \begin{macro}{\DCMabstract} % \begin{macrocode} \long\def\DCMabstract#1{\long\def\dcm@abstract{#1}} % \end{macrocode} % \end{macro} % % \subsection[id=impl.blockstyles]{DCM Block Styles} % % We now define various commonly used styles. % % \begin{macro}{\dcm@titlepage@block} % This style builds up a title page from scratch % \begin{macrocode} \def\dcm@titlepage@block{\begin{titlepage} \null\vfil\vskip 60\p@ \begin{center} \ifx\dcm@title\@empty \PackageWarning{dcm}{No title specified}{\LARGE Add title here\par} \else\LARGE \dcm@title \par\fi \ifx\dcm@subtitle\@empty \vskip 3em\Large \dcm@subtitle \par\vskip 3em \else\large\lineskip .75em\WAauthorblock\dcm@creators\vskip 1.5em\fi \ifx\dcm@date\@empty \PackageWarning{dcm}{No date specified}{\large\today\par} \else{\large\dcm@date\par}\vskip 2em\fi \end{center}\vskip2em \ifx\dcm@abstract\@empty \PackageWarning{dcm}{No Abstract specified}\else \begin{quote}\textbf\dcm@abstract@heading:\dcm@abstract\end{quote}\fi \vskip 2em\par\vfil\noindent {\small\noindent\dcm@rights\dcm@license} \end{titlepage}} % \end{macrocode} % \end{macro} % % \begin{macro}{\dcm@maketitle@block} % This style makes use of the title facility of the document class. % \begin{macrocode} \def\dcm@maketitle@block{\def\@title{\dcm@title\ifx\dcm@subtitle\empty\else\newline\dcm@subtitle\fi}% \def\@author{\WAauthorblock\dcm@creators}% \def\@date{\dcm@date}\maketitle} % \end{macrocode} % \end{macro} % % \subsection{Dealing with ISO Dates} % % The first step is to build a macro for making ISO dates. % % \begin{macrocode} \def\ISOtimestamp{\count1=\time\divide\count1 by 60 % hours \count2=\count1\multiply\count2 by 60% minutes in \count1 hours \count3=\time\advance\count3 by -\count2 % minutes \the\year -\ifnum\month>9\else0\fi\the\month-\ifnum\day>9\else0\fi\the\day T\ifnum\count1>9\else0\fi\the\count1:\ifnum\count3>9\else0\fi\the\count3:00Z} % \end{macrocode} % %\subsection{Configuration} % % \begin{macrocode} \def\dcm@abstract@heading{Abstract} \def\dcm@creators@heading{Author(s)} \def\dcm@contributors@connector{with contributions from} \def\dcm@chapter@heading{Chapter} \def\dcm@section@heading{Section} \def\dcm@subsection@heading{Subsection} \def\dcm@subsubsection@heading{Subsubsection} \def\dcm@paragraph@heading{Paragraph} % % \end{macrocode} % % \Finale \endinput % \iffalse % LocalWords: GPL structuresharing STR LaTeX dcm dtx keyval sref CPERL url qw %%% Local Variables: %%% mode: doctex %%% TeX-master: t %%% End: % \fi % LocalWords: RequirePackage birthdate personaltitle academictitle workaddress % LocalWords: privaddress worktel privtel workfax privfax worktelfax noDelim % LocalWords: privtelfax getKeyValue valuelist ToString getValue affill STDERR % LocalWords: ExportMetadata AssignValue DCMperson DefConstructor afterDigest % LocalWords: getArg setValue FishOutMetadata keyvals foreach idlist tabline % LocalWords: LookupValue insertElement atabline bitabline shorttitle nc args % LocalWords: sharealike noderivativeworks DefMacro authorblock subsubsection % LocalWords: contribs OptionalKeyVals omgroup omdoc srcref xml RawTeX partof % LocalWords: openElement iffalse kohlhase Thu scsys sc sc latexml DCmetadata % LocalWords: maketitle DCMtitle texttt fileversion DCMcreators miko jdoe impl % LocalWords: DCMabstract setcounter tocdepth tableofcontents newpage dmt03 % LocalWords: DCMsection ednote DCMsubsection exfig hline dcmblock Patashnik % LocalWords: DescribeEnv DCMcontributors DCMshorttitle DCMshorttitle DCMdate % LocalWords: DCMsubject DCMsubject DCMdescription DCMdescription DCMpublisher % LocalWords: DCMpublisher DCMdate DCMtype DCMtype DCMidentifier DCMidentifier % LocalWords: DCMsource DCMsource DCMlanguage DCMlanguage DCMrelation ctancite % LocalWords: DCMrelation DCMrights DCMrights DCMlicense DCMlicense titlepage % LocalWords: DCMlicensenotice DCMlicensenotice DCMcopyrightnotice titlepage % LocalWords: DCMcopyrightnotice DCMcclicense DCMcclicense user.blockstyles % LocalWords: DCMchapter DCMchatper DCMsubsubsection DCMsubsubsection ltxml % LocalWords: user.conig makeatletter printbibliography expandafter showmeta % LocalWords: xdef csname endcsname newcommand ifx ifundefined affs showmeta % LocalWords: Semiverbatim whatsit newenvironment mtabline providecommand vfil % LocalWords: DCMsubtitle cclicense defdcm impl.blockstyles newcounter vskip % LocalWords: stepcounter tabularnewline theauthors lineskip textbf noindent % LocalWords: omd omd srefaddidkey thechapter autoclose thesection ifnum ifnum % LocalWords: thesubsection thesubsubsection DCMparagraph ISOtimestamp doctex % LocalWords: DCMinstitution DCMinstitution compactenum textsf langle textsf % LocalWords: langle metakeys addmetakey metasetkeys countryshort townzip aff % LocalWords: streetaddress depts