From 480580fec13891a80df5703594143afc5580dd61 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Fri, 5 Aug 2016 22:32:58 +0000
Subject: dccpaper (5aug16)

git-svn-id: svn://tug.org/texlive/trunk@41804 c570f23f-e606-0410-a88d-b1316a301751
---
 .../tex/latex/dccpaper/dccpaper-base.sty           | 1198 ++++++++++++++++++++
 1 file changed, 1198 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/dccpaper/dccpaper-base.sty

(limited to 'Master/texmf-dist/tex/latex/dccpaper/dccpaper-base.sty')

diff --git a/Master/texmf-dist/tex/latex/dccpaper/dccpaper-base.sty b/Master/texmf-dist/tex/latex/dccpaper/dccpaper-base.sty
new file mode 100644
index 00000000000..1514f965229
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/dccpaper/dccpaper-base.sty
@@ -0,0 +1,1198 @@
+%%
+%% This is file `dccpaper-base.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% dccpaper.dtx  (with options: `base')
+%% 
+%% ----------------------------------------------------------------
+%% The dccpaper bundle: Classes for submissions to IJDC and IDCC
+%% Author:  Alex Ball
+%% E-mail:  a.ball@ukoln.ac.uk
+%% License: Released under the LaTeX Project Public License v1.3c or later
+%% See:     http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%% 
+\def\Version{2016/08/05 v1.5}
+\ProvidesPackage{dccpaper-base.sty}
+    [\Version\space Common class code for IJDC and IDCC papers.]
+%
+% The \textsf{dccpaper} classes are deliberately very similar. This package
+% contains the common code.
+%
+% We use British English orthography.
+%
+\RequirePackage[british]{babel}
+%
+% The macro patching commands from \textsf{etoolbox} come in useful for handling
+% author and date information, and also for compatibility with \textsf{apacite}.
+%
+\RequirePackage{etoolbox}
+%
+% The \textsf{dccpaper} classes use Times as the main text font. We prefer
+% \textsf{newtx} as it provides support for mathematics, but the standard
+% \textsf{times} package will do. In case they are needed, we also provide
+% Helvetica for the sans serif font and Computer Modern Teletype for the
+% monospaced.
+%
+\RequirePackage[T1]{fontenc}
+\IfFileExists{newtxtext.sty}%
+  {\RequirePackage{newtxtext,newtxmath}}%
+  {\RequirePackage{times}}
+\RequirePackage[scaled=0.92]{helvet}
+\renewcommand{\ttdefault}{cmtt}
+%
+% We will need support for included graphics and colour. The structural elements
+% are a medium turquoise, while the links are slightly darker to make them
+% easier to read on screen.
+%
+\RequirePackage{graphicx}
+\IfFileExists{xcolor.sty}%
+  {\RequirePackage{xcolor}}%
+  {\RequirePackage{color}}
+\definecolor[named]{struct}{rgb}{0,0.5,0.5}
+\definecolor[named]{links}{rgb}{0,0.4,0.4}
+%
+% We will calculate some lengths later.
+%
+\RequirePackage{calc}
+
+%
+% Ragged right text is easier to read on screen, but fully justified text looks
+% better. The |\raggedyright| layout from Peter Wilson's \textsf{memoir} class
+% (2005/09/25 v1.618) is an excellent compromise. The code below replicates it.
+%
+% First we save the original definitions of |\\| and |\parindent| as
+% |\OrigLineBreak| and |\RaggedParindent| respectively.
+%
+\let\OrigLineBreak\\
+\newdimen\RaggedParindent
+\setlength{\RaggedParindent}{\parindent}
+
+%
+% The |\raggedyright| layout more or less lays text out as with full
+% justification, but then lets the shorter lines relax a bit from the right
+% margin. It is the default for DCC papers.
+%
+\newcommand{\raggedyright}[1][2em]{%
+  \let\\\@centercr\@rightskip \z@ \@plus #1\relax
+  \rightskip\@rightskip
+  \leftskip\z@skip
+  \parindent\RaggedParindent}
+\AtBeginDocument{\raggedyright}
+
+%
+% The |\flushleftright| layout restores full justification, in case it is
+% needed.
+%
+\newcommand*{\flushleftright}{%
+  \let\\\OrigLineBreak
+  \leftskip\z@skip
+  \rightskip\leftskip
+  \parfillskip\@flushglue
+  \everypar{}}
+
+%
+% Pdf\TeX\ 1.40.15 introduced the facility to include dummy interword spaces
+% to improve text extraction and reflow. We test for this facility and use it
+% if available.
+%
+\RequirePackage{ifpdf}
+\ifpdf
+  \ifdef{\pdfinterwordspaceon}{\pdfinterwordspaceon}{}
+\fi
+
+%
+% The classes have some special metadata requirements. We start with the author
+% information.
+%
+% The macro |\thecorrespondence| is used in the title page footer for the name,
+% postal address and email address of the corresponding author.
+%
+\def\thecorrespondence{}
+\newcommand*{\correspondence}[1]{\def\thecorrespondence{#1}}
+%
+% The handling of authors here is inspired by Patrick W Daly's \textsf{authblk},
+% (2001/02/27 1.3), and defines the familiar user commands. Authors are
+% presented in blocks, one affiliation but perhaps several authors per block.
+%
+% We make the presentation of the author information configurable (just in case)
+% with some hooks and lengths:
+% \begin{itemize}
+% \item |\Authfont| is the font used for author names;
+% \item |\Affilfont| is the font used for affiliations;
+% \item |\affilsep| is the line spacing between author names and affiliations;
+% \item |\authblksep| is the line spacing between author name/affiliation
+%       blocks.
+% \end{itemize}
+%
+\newcommand*{\Authfont}{\normalfont}
+\newcommand*{\Affilfont}{\normalfont\small}
+\newlength{\affilsep}\setlength{\affilsep}{0pt}
+\newlength{\authblksep}\setlength{\authblksep}{1.5\baselineskip}
+%
+% The |\AuthorBlock| command will be used to collect all the author information.
+%
+\newcommand{\AuthorBlock}{}
+%
+% The |\MainAuthor| command collects abbreviated author information for use in
+% the headers.
+%
+\newcommand{\MainAuthor}{}
+%
+% The |\dccp@author| command, meanwhile, collects a full list of authors for the
+% PDF metatdata.
+%
+\newcommand{\dccp@author}{}
+%
+% We define counters for
+% \begin{itemize}
+% \item the total number of authors defined;
+% \item the number of authors in the current block;
+% \item the number of blocks defined.
+% \end{itemize}
+%
+\newcounter{authors}
+\newcounter{authorsinblock}
+\newcounter{block}
+%
+% The |block| counter will increase once in the preamble, and again when the
+% information is typeset, so we need to reset it at the beginning of the
+% document.
+%
+\AtBeginDocument{\setcounter{block}{0}}
+%
+% The new definition of the author command starts here.
+%
+\renewcommand{\author}[1]{%
+%
+% If this is the first or second |\author| command, we add the name to our
+% abbreviated list of authors. Otherwise, we replace the name of the second
+% and subsequent authors with `et al.' in that list.
+%
+% At the same time, we use a simpler technique to populate |\dccp@author|.
+%
+  \ifnum\theauthors=0
+    \def\dccp@author{#1}%
+    \def\MainAuthor{#1}%
+  \else
+    \appto\dccp@author{, #1}%
+    \ifnum\theauthors=1%
+      \def\OtherMainAuthors{ and #1}%
+      \appto\MainAuthor{\OtherMainAuthors}%
+    \else
+      \ifnum\theauthors=2%
+        \def\OtherMainAuthors{ et al.}%
+      \fi
+    \fi
+  \fi
+  \stepcounter{authors}%
+%
+% Each block has its author names collected in a macro like |\blocki@auth|,
+% and its affiliation collected in a macro like |\blocki@affil| (the `i' is a
+% serial number).
+%
+% If this is the first author in a block, we need to create the block and add it
+% to |\AuthorBlock|; second and subsequent blocks are preceded by a |\quad| of
+% space.
+%
+  \ifnum\theauthorsinblock=0%
+    \stepcounter{block}%
+    \expandafter\def\csname block\roman{block}@auth\endcsname{\Authfont#1}%
+    \ifnum\theblock>1\appto\AuthorBlock{\quad}\fi
+    \appto\AuthorBlock{%
+      \stepcounter{block}%
+      \begin{minipage}[t]{0.45\textwidth}\centering
+      \csname block\roman{block}@auth\endcsname
+      \ifx\undefined\csname block\roman{block}@affil\endcsname
+      \else
+        \\[\affilsep]\csname block\roman{block}@affil\endcsname
+      \fi
+      \end{minipage}%
+      \rule{0pt}{2\baselineskip}%
+      }
+  \else
+%
+% Otherwise we just add the name to the right |\blocki@auth|-style macro.
+%
+    \csappto{block\roman{block}@auth}{, #1}%
+  \fi
+  \stepcounter{authorsinblock}%
+}
+%
+% The |\affil| command adds an affiliation to the current block and closes it by
+% resetting the |authorsinblock| counter.
+%
+\newcommand{\affil}[1]{%
+  \expandafter\def\csname block\roman{block}@affil\endcsname{\Affilfont#1}%
+  \setcounter{authorsinblock}{0}%
+}
+
+%
+% The |\HeadTitle| collects the abbreviated title for use in the headers.
+%
+\newcommand*{\HeadTitle}{}
+%
+% We wrap the normal |\title| command with code to populate |\HeadTitle| with
+% the optional argument if provided, or the mandatory one otherwise. We also
+% provide a persistent |\thetitle| macro, stripped of any |\thanks|.
+%
+\let\ProperTitle=\title
+\renewcommand{\title}[2][\empty]{
+  \ifx\empty #1%
+    \renewcommand*{\HeadTitle}{#2}%
+  \else
+    \renewcommand*{\HeadTitle}{#1}%
+  \fi%
+  \begingroup\let\footnote\@gobble
+  \ProperTitle{#2}%
+  \begingroup
+    \renewcommand{\thanks}[1]{}
+    \protected@xdef\thetitle{#2}
+  \endgroup\endgroup
+}
+%
+% To prevent \LaTeX\ throwing an error if no title is supplied, we supply a
+% fallback value and issue a warning instead.
+%
+\def\thetitle{%
+  Please supply a title
+  \ClassWarning{dccpaper}{%
+    Please supply a title in the preamble with \noexpand\title{}%
+  }
+}
+
+%
+% We make |\thedate| persistent, borrowing the technique used in Peter Wilson's
+% \textsf{memoir} class (2005/09/25 v1.618).
+%
+\pretocmd{\date}{\begingroup\let\footnote\@gobble}{}{}%
+\apptocmd{\date}{%
+  \begingroup
+    \renewcommand{\thanks}[1]{}
+    \protected@xdef\thedate{#1}
+  \endgroup\endgroup%
+}{}{}
+%
+% We ensure |\thedate| is defined using a dummy date.
+%
+\date{20xx}
+
+%
+% IJDC articles have extra bibliographic information:
+% \begin{itemize}
+% \item |\volume| sets the volume number, |\thevolume|;
+% \item |\issue| sets the issue number, |\theissue|;
+% \item |\subno| sets the submission number, |\thesubno|.
+% \end{itemize}
+%
+% These numbers are used to build the DOI, |\thedoi|.
+%
+\newcommand*{\thevolume}{0}
+\newcommand*{\volume}[1]{\renewcommand*{\thevolume}{#1}}
+\newcommand*{\theissue}{0}
+\newcommand*{\issue}[1]{\renewcommand*{\theissue}{#1}}
+\newcommand*{\thesubno}{0}
+\newcommand*{\subno}[1]{\renewcommand*{\thesubno}{#1}}
+\newcommand*{\thedoi}{10.2218/ijdc.v\thevolume i\theissue .\thesubno}
+%
+% They also display the page range. The following code was borrowed from Peter
+% Wilson's \textsf{memoir} class (2005/09/25 v1.618). It defines a counter
+% |lastpage| which, on the second run, will contain the number of the last page.
+%
+\newcounter{lastpage}
+\setcounter{lastpage}{0}
+\newcommand{\dol@stpage}{%
+  \if@filesw
+    \addtocounter{page}{-1}%
+    \immediate\write\@auxout%
+      {\string\setcounter{lastpage}{\the\c@page}}%
+    \stepcounter{page}%
+  \fi
+}
+\AtBeginDocument{\AtEndDocument{\clearpage\dol@stpage}}
+
+%
+% DCC papers display some important dates. We collect these in |\dccp@dates|,
+% initially setting the value to something sensible for papers in draft.
+%
+\def\dccp@dates{\emph{Draft from} \today}
+%
+% Several types of date can be added:
+% \begin{itemize}
+% \item |\submitted| for when the authors submitted the paper (intended for
+%       IDCC papers).
+% \item |\received| for when the paper was received by the editorial board
+%       (intended for IJDC papers).
+% \item |\revised| for when the most recent version was received by the
+%       editorial board.
+% \item |\accepted| for when the paper was accepted by the editorial board.
+% \end{itemize}
+%
+\newcommand*{\submitted}[1]{%
+  \def\dccp@dates{\emph{Submitted} #1}}
+\newcommand*{\received}[1]{%
+  \def\dccp@dates{\emph{Received} #1}}
+\newcommand*{\revised}[1]{%
+  \appto\dccp@dates{%
+    \space\space\space\textbar\space\space\space
+    \emph{Revision received} #1}%
+  }
+\newcommand*{\accepted}[1]{%
+  \appto\dccp@dates{%
+    \space\space\space\textbar\space\space\space
+    \emph{Accepted} #1}%
+  }
+%
+% IJDC papers need to say if they had a previous life as a conference paper.
+% This statement goes in |\dccp@conf|, which is initially empty. The user
+% command for setting this text is |\conference|.
+%
+\let\dccp@conf=\empty
+\newcommand*{\conference}[1]{%
+  \renewcommand*{\dccp@conf}{An earlier version of this paper was presented at #1.}%
+}
+
+%
+% The macro |\FixTextHeight| will be useful when switching from the first page
+% geometry to the regular geometry for the rest of the paper. It is based on
+% code from  Hideo Umeki's \textsf{geometry} package (2002/07/08 v3.2).
+%
+\newcommand{\FixTextHeight}{%
+  \setlength\@tempdima{\textheight}%
+  \addtolength\@tempdima{-\topskip}%
+  \@tempcnta\@tempdima
+  \@tempcntb\baselineskip
+  \divide\@tempcnta\@tempcntb
+  \setlength\@tempdimb{\baselineskip}%
+  \multiply\@tempdimb\@tempcnta
+  \advance\@tempdima-\@tempdimb
+  \global\advance\footskip\@tempdima
+  \multiply\@tempdima\tw@
+  \ifdim\@tempdima>\baselineskip
+    \addtolength\@tempdimb{\baselineskip}%
+    \global\advance\footskip-\baselineskip
+  \fi
+  \addtolength\@tempdimb{\topskip}%
+  \global\textheight\@tempdimb
+}
+
+%
+% The width of the textblock (on all pages) is 150mm, which on A4 paper implies
+% margins of 30mm each. (Making both horizontal margins the same in a two-sided
+% context makes the paper more pleasant to read on screen).
+%
+\setlength{\textwidth}{150mm}
+\setlength{\oddsidemargin}{30mm - \hoffset - 1in}
+\setlength{\evensidemargin}{30mm - \hoffset - 1in}
+%
+% It is rare to have marginal notes, but in case we ever do, we centre them in
+% the margin.
+%
+\setlength{\marginparwidth}{30mm - 2\marginparsep}
+%
+% We also want a distance of 15mm from the top of the page to the top of the
+% header, and two blank lines between the bottom of the header and the top of
+% the textblock.
+%
+\setlength{\topmargin}{15mm - \voffset - 1in}
+\setlength{\headsep}{2\baselineskip}
+
+%
+% IJDC editorials have slightly different headers and footers. This requires
+% testing for |\dccp@editorial| if it exists. In case it doesn't, we provide it.
+%
+\providecommand{\dccp@editorial}{Editorial}
+%
+% The height of the footer can vary a lot. To keep it a fixed distance from the
+% bottom of the page rather than the top, we need to vary the |\textheight|
+% accordingly. This means we need to measure the height of the footer. (The
+% header is more predictable but we may as well measure it while we are at it).
+%
+% Here we define the header and footer of the title page (i.e.\ the
+% \textsf{title} page style), making sure we save them to auxiliary macros
+% |\TitleHead| and |\TitleFoot| so we can measure them.
+%
+\def\ps@title{%
+  \def\@oddhead{%
+    \begin{minipage}{\textwidth}%
+      \centering
+      \LARGE\bfseries\color{struct}%
+      \ifx\dccp@type\dccp@editorial
+        \dccp@publ@long
+      \else
+        \dccp@publ@short\space\space\textbar\space\space\emph{\dccp@type}%
+      \fi
+      \par
+    \end{minipage}%
+  }%
+  \let\@evenhead=\@oddhead
+  \let\TitleHead=\@oddhead
+  \def\@oddfoot{%
+    \begin{minipage}[b]{\textwidth}%
+      \fontsize{9pt}{11pt}\selectfont
+      \ifx\dccp@type\dccp@editorial
+      \else
+        {\centering\dccp@dates\par}
+        \bigskip
+        Correspondence should be addressed to \thecorrespondence\par
+        \bigskip
+      \fi
+      \ifx\empty\dccp@conf
+      \else
+        \dccp@conf\par
+        \bigskip
+      \fi
+      \dccp@publ@msg\par
+      \bigskip
+      \begin{minipage}[b]{\linewidth - 25mm}
+      Copyright rests with the authors. This work is released under a Creative
+      Commons Attribution 4.0 International Licence. For details please see
+      \url{http://creativecommons.org/licenses/by/4.0/}%
+      \end{minipage}\hfill
+      \begin{minipage}[b]{19mm}
+        \href{http://creativecommons.org/licenses/by/4.0/}%
+          {\includegraphics[width=\hsize]{dccpaper-by}}%
+      \end{minipage}
+      \par
+      \bigskip
+      \makebox[0pt][l]{\parbox{0.4\hsize}{%
+        \ifx\undefined\dccp@titlefoot@bib\else\dccp@titlefoot@bib\fi
+      }}\hfill
+      \makebox[0pt][c]{\normalsize\thepage}\hfill
+      \makebox[0pt][r]{\parbox{0.4\hsize}{%
+        \raggedleft\ifx\undefined\dccp@titlefoot@doi\else\dccp@titlefoot@doi\fi
+      }}%
+    \end{minipage}%
+  }%
+  \let\@evenfoot=\@oddfoot
+  \let\TitleFoot=\@oddfoot
+}
+%
+% We set the normal page style to \textsf{title} here so that |\TitleHead| and
+% |\TitleFoot| are defined, but we will override it with the \textsf{dccpaper}
+% page style later.
+%
+\pagestyle{title}
+%
+% The first page should use the \textsf{title} page style, however.
+%
+\AtBeginDocument{\thispagestyle{title}}
+
+%
+% Here are the normal headers and footers (i.e.\ the \textsf{dccpaper} page
+% style). We save them to |\NormalHead| and |\NormalFoot|, again so we can
+% measure them.
+%
+\def\ps@dccpaper{%
+  \def\@oddhead{%
+    \begin{minipage}{\textwidth}\frenchspacing
+      {%
+        \fontsize{9pt}{11pt}\selectfont
+        \ifx\undefined\dccp@normhead@doi\else\dccp@normhead@doi\fi
+      }\hfill
+      {\MainAuthor}\space\space\space
+      \textcolor{struct}{\textbar}\space\space\space
+      \thepage\par
+      \vskip6pt\color{struct}{\hrule height 1bp}\par
+    \end{minipage}
+  }%
+  \def\@evenhead{%
+    \begin{minipage}{\textwidth}
+      \thepage\space\space\space
+      \textcolor{struct}{\textbar}\space\space\space
+      {\HeadTitle}\hfill
+      {%
+        \fontsize{9pt}{11pt}\selectfont
+        \ifx\undefined\dccp@normhead@doi\else\dccp@normhead@doi\fi
+      }\par
+      \vskip6pt\color{struct}{\hrule height 1bp}\par
+    \end{minipage}
+  }%
+  \let\NormalHead=\@oddhead
+  \def\@oddfoot{\begin{minipage}[b]{\textwidth}
+    \centering\bfseries\normalsize\color{struct}
+    \ifx\dccp@type\dccp@editorial
+      \dccp@publ@long
+    \else
+      \dccp@publ@short\space\space\textbar\space\space\emph{\dccp@type}%
+    \fi
+    \par
+  \end{minipage}}%
+  \let\@evenfoot=\@oddfoot
+  \let\NormalFoot=\@oddfoot
+}
+\pagestyle{dccpaper}
+
+%
+% We need to wait until the author has supplied the necessary information before
+% we can do our measuring and set the remainder of the geometry, so we do it at
+% the end of the preamble. First we put our saved macros into boxes we can
+% measure (i.e.\ |\dccp@firstpagehead|, |\dccp@firstpagefoot|,
+% |\dccp@restpagehead|, |\dccp@restpagefoot|).
+%
+\AtEndPreamble{
+  \newsavebox{\dccp@firstpagehead}
+  \sbox\dccp@firstpagehead{\normalfont\TitleHead}
+  \newsavebox{\dccp@firstpagefoot}
+  \sbox\dccp@firstpagefoot{\normalfont
+    \def\email#1{#1}\def\url#1{#1}\def\href#1#2{#2}\TitleFoot}
+  \newsavebox{\dccp@restpagehead}
+  \sbox\dccp@restpagehead{\normalfont\NormalHead}
+  \newsavebox{\dccp@restpagefoot}
+  \sbox\dccp@restpagefoot{\normalfont\NormalFoot}
+%
+% We can now set the geometry of the title page\dots
+%
+  \setlength{\headheight}{\ht\dccp@firstpagehead + \dp\dccp@firstpagehead}
+  \setlength{\footskip}{%
+    2\baselineskip + \ht\dccp@firstpagefoot + \dp\dccp@firstpagefoot
+  }
+  \setlength{\textheight}{%
+    \paperheight
+    - 30mm % 15mm top and bottom
+    - \headheight
+    - \headsep
+    - \footskip
+  }
+%
+% {\dots}and provide a macro that will reset the geometry for the remaining
+% pages.
+%
+  \def\dccp@resetgeometry{%
+    \setlength{\headheight}{\ht\dccp@restpagehead + \dp\dccp@restpagehead}
+    \global\headheight=\headheight
+    \setlength{\footskip}{%
+      2\baselineskip + \ht\dccp@restpagefoot
+    }
+    \global\footskip=\footskip
+    \setlength{\textheight}{%
+      \paperheight
+      - 30mm % 15mm top and bottom
+      - \headheight
+      - \headsep
+      - \footskip
+    }
+    \FixTextHeight
+    \global\textheight=\textheight
+  }
+}
+
+%
+% The |\maketitle| command is redefined to the correct formatting. At the end it
+% sets a hook that will reset the geometry when the first page is shipped out,
+% i.e.\ with effect from the second page. It is here rather than at the end of
+% the abstract in case the abstract itself spills over to the second page.
+%
+\RequirePackage{atbegshi}
+\renewcommand{\maketitle}{%
+  \null\nobreak\vspace*{-0.528\baselineskip}%
+  \begingroup
+    \centering
+    {\Large\thetitle\par}
+    \vspace{0.7\baselineskip}
+    \AuthorBlock\par
+    \vspace{1.7\baselineskip}
+  \endgroup
+  \AtBeginShipoutNext{\dccp@resetgeometry}%
+}
+
+%
+% The \textsf{abstract} environment is redefined in terms of an environment
+% \textsf{widequote}, which mimics the \textsf{quote} environment, but is a bit
+% wider. We also provide a hook, |\afterabstract|, so that if some annotation
+% needs to be appended to the title page after the abstract, we can do that.
+%
+\newenvironment{widequote}{%
+  \list{}{%
+    \setlength{\rightmargin}{2\parindent}%
+    \setlength{\leftmargin}{2\parindent}%
+  }%
+  \flushleftright\item[]%
+}{%
+    \endlist
+}
+\def\afterabstract{}
+\renewenvironment{abstract}{%
+  \vskip1em%
+  \begin{center}%
+    {\bfseries\abstractname\vspace{-.5em}\vspace{\z@}}%
+  \end{center}%
+  \widequote\footnotesize
+}{%
+  \endwidequote\afterabstract\newpage
+}
+
+%
+% We use the \textsf{titlesec} package to give headings the correct formatting.
+% The settings below try to space out headings so they occupy an integer number
+% of normal lines (an attempt at grid typesetting). They are a little
+% complicated because we want it to work even if the heading appears at the top
+% of the page.
+%
+\RequirePackage{titlesec}
+\titlespacing*{\section}{0pt}{0pt}{\baselineskip}
+\titlespacing*{\subsection}{0pt}{0pt}{0.6\baselineskip}
+\titlespacing{\subsubsection}{\parindent}{\baselineskip}{0pt}
+\titlespacing{\paragraph}{\parindent}{\baselineskip}{0pt}
+\titlespacing{\subparagraph}{\parindent}{\baselineskip}{0pt}
+%
+% An unfortunate side effect of spacing headings like this is that if a
+% |\subsection| immediately follows a |\section| it forms an unsightly gap. To
+% remedy this, we count how many paragraphs there have been since the last
+% |\section|. Note that as we do not normally number the sections, an automatic
+% reset of the |sectionpars| counter within the |section| counter won't work.
+%
+\newcounter{sectionpars}
+\let\dccp@old@ep\everypar
+\newtoks\everypar
+\dccp@old@ep{\the\everypar\stepcounter{sectionpars}}
+%
+% We need to manually reset |sectionpars| when |\section| is called. Also,
+% the normal font size is 12pt/14.5pt, while |\Large| is 17pt/22pt;
+% so the |\Large| line height = 1.5172 $\times$ normal line height. Nevertheless
+% it seems to work better if we let the heading eat 0.528|\baselineskip| into
+% the 2|\baselineskip| of padding above it.
+%
+\titleformat{\section}
+  [block]
+  {%
+    \vspace{2\baselineskip}%
+    \nobreak
+    \vspace*{-0.528\baselineskip}%
+    \setcounter{sectionpars}{0}%
+    \filcenter\normalfont\Large\bfseries
+  }
+  {\thesection}
+  {1em}
+  {}
+%
+% The others use a |\normalsize| font so that makes life easier. The format
+% for |\subsection| command includes conditional spacing: if the |sectionpars|
+% counter equals 2, this means the heading immediately follows a |\section|, so
+% less white space is needed.
+%
+\titleformat{\subsection}
+  {%
+    \ifnum\thesectionpars>2%
+      \vspace{2\baselineskip}%
+    \else
+      \vspace{\baselineskip}%
+    \fi\nobreak
+    \vspace*{-0.6\baselineskip}%
+    \normalfont\normalsize\bfseries
+  }
+  {\thesubsection}
+  {1em}
+  {}
+\titleformat{\subsubsection}
+  [block]
+  {\normalfont\normalsize\bfseries}
+  {\thesubsubsection}
+  {1em}
+  {}
+\titleformat{\paragraph}
+  [block]
+  {\normalfont\normalsize\bfseries\itshape}
+  {\thesubsubsection}
+  {1em}
+  {}
+\titleformat{\subparagraph}
+  [block]
+  {\normalfont\normalsize\itshape}
+  {\thesubsubsection}
+  {1em}
+  {}
+%
+% DCC papers do not typically number their sections.
+%
+\setcounter{secnumdepth}{0}
+
+%
+% To help with the display of tables we load the \textsf{array} and
+% \textsf{booktabs} packages. As we don't like lines between rows in the table
+% body, we stretch them out a bit so that white space does the job instead.
+%
+\RequirePackage{array,booktabs}
+\renewcommand{\arraystretch}{1.25}
+
+%
+% We use the \textsf{caption} package to give captions the right format.
+%
+\RequirePackage
+  [ format=hang
+  , labelsep=period
+  , font=small
+  , labelfont=bf
+  , figureposition=bottom
+  , tableposition=top
+  ]{caption}
+
+%
+% Footnotes should be set right up against the left margin. They should be
+% set hung and in the same half-ragged style as the main text. They should also,
+% for neatness, be at the bottom of the page regardless of how short it is. The
+% \textsf{footmisc} package helps here.
+%
+\RequirePackage[hang,bottom]{footmisc}
+\settowidth{\footnotemargin}{\footnotesize\textsuperscript{99}\space}
+\renewcommand{\footnotelayout}{\raggedyright}
+%
+% Also, if multiple footnotes are set at once, the markers should be separated
+% with superscript commas. The \textsf{footmisc} package should help here but
+% its solution is clobbered by \textsf{hyperref}. So after a footnote is set,
+% we check to see if the next token is also a footnote, and if so, slip a comma
+% in before it.\footnote{This solution was provided at
+% \url{http://tex.stackexchange.com/q/40072}} This tweak needs to be done late,
+% |\AtBeginDocument|. Note that the \textsf{newtx} superior figures are a bit
+% lower than normal superscript text.
+%
+\AtBeginDocument{
+  \let\dccp@footnote\footnote
+  \def\dccp@next@token{\relax}%
+  \def\dccp@supercomma{\textsuperscript{,}}%
+  \IfFileExists{newtxtext.sty}%
+    {\def\dccp@supercomma{\raisebox{-0.2ex}{\textsuperscript{,}}}}%
+    {}
+
+  \newcommand\dccp@check@for@footnote{%
+    \ifx\footnote\dccp@next@token
+      \dccp@supercomma
+    \fi
+  }
+
+  \renewcommand\footnote[1]{%
+    \dccp@footnote{#1}%
+    \futurelet\dccp@next@token\dccp@check@for@footnote
+  }
+}
+
+%
+% By default lists are quite loose. These settings help to tighten them.
+%
+\topsep = \z@
+\partopsep = \z@
+\appto{\enumerate}{\itemsep = 0.5ex plus 0.25ex minus 0.25ex}
+\appto{\itemize}{\itemsep = 0.5ex plus 0.25ex minus 0.25ex}
+
+%
+% A DCC paper should either be using \textsf{biblatex} or \textsf{apacite} for
+% references.
+%
+% If \textsf{biblatex} is used, we need to ensure that the reference list
+% heading is a normal section rather than a starred one so it appears in the
+% PDF bookmarks.
+%
+\AtBeginDocument{
+  \@ifpackageloaded{biblatex}{%
+    \defbibheading{bibliography}[\refname]{\section{#1}}%
+%
+% We also move the ‘doi:’ portion of a DOI inside the hyperlink.
+%
+    \DeclareFieldFormat{doi}{%
+      \ifhyperref{%
+        \href{http://dx.doi.org/#1}{\nolinkurl{doi:#1}}%
+      }{%
+        \nolinkurl{doi:#1}%
+      }%
+    }
+  }{%
+%
+% If \textsf{apacite} is used, there are a few other adaptations we need to
+% make.
+%
+    \@ifpackageloaded{apacite}{%
+%
+% With \textsf{hyperref} loaded, \textsf{apacite} makes the whole of a citation
+% a link to the reference list item. We patch |\@ifauthorsunequalc@de| so only
+% the year portion gets linked.
+%
+      \def\@ifauthorsunequalc@de#1{%
+        \if@F@cite
+          \@F@citefalse
+        \else
+          \if@Y@cite
+              {\@BAY}%
+          \fi
+          {\@BBC}%
+        \fi
+        \edef\@cite@undefined{?}%
+        \def\BBA{\@BBA}%
+        \if@A@cite
+          %%\hyper@natlinkstart{#1}% We remove this line...
+          {\csname b@\@citeb\APAC@extra@b@citeb\endcsname}%
+          %%\hyper@natlinkend% ...and this one.
+          \if@Y@cite
+              {\@BBAY}%
+          \fi
+        \fi
+        \if@Y@cite
+          \hyper@natlinkstart{#1}%
+          {\csname Y@\@citeb\APAC@extra@b@citeb\endcsname}%
+          \hyper@natlinkend
+        \fi
+        \let\BBA\relax
+      }
+%
+% The Spanish language support file defines a different version of
+% |\@ifauthorsunequalc@de|, which might override the patch we have just
+% introduced. So we employ the same test that \textsf{apacite} uses when
+% deciding whether to load that file; if successful, we patch the Spanish
+% version. Note that as \textsf{apacite} loads language support files
+% |\AtBeginDocument|, we have to do our thing after that, |\AfterEndPreamble|.
+%
+% (Note that as we set the language to British English earlier, this should
+% never be needed, but we try to be resilient to tinkering!)
+%
+      \AfterEndPreamble{%
+        \@ifundefined{iflanguage}{%
+          \relax
+        }{%
+          \edef\APAC@tmp{nohyphenation}%
+          \ifx\languagename\APAC@tmp
+          \else
+            \edef\APAC@tmp{spanish}%
+            \ifx\languagename\APAC@tmp
+              \def\@ifauthorsunequalc@de#1{%
+                \if@F@cite
+                  \@F@citefalse
+                \else
+                  \if@Y@cite
+                      {\@BAY}%
+                  \fi
+                  {\@BBC}%
+                \fi
+                \edef\@cite@undefined{?}%
+                \def\BBA{\@BBA}%
+                \@ifundefined{spanishe@\@citeb\APAC@extra@b@citeb}%
+                  {}% skip
+                  {{% Use `e' instead of `y' in Spanish
+                  \global\let\oldBBA\BBA
+                  \global\def\BBA{e\global\let\BBA\oldBBA}%
+                  }}%
+                \if@A@cite
+                  %%\hyper@natlinkstart{#1}% We remove this line...
+                  {\csname b@\@citeb\APAC@extra@b@citeb\endcsname}%
+                  %%\hyper@natlinkend% ...and this one.
+                  \if@Y@cite
+                      {\@BBAY}%
+                  \fi
+                \fi
+                \if@Y@cite
+                  \hyper@natlinkstart{#1}%
+                  {\csname Y@\@citeb\APAC@extra@b@citeb\endcsname}%
+                  \hyper@natlinkend
+                \fi
+                \let\BBA\relax
+              }%
+            \fi
+          \fi
+        }%
+%
+% Another thing \textsf{apacite} does |\AtBeginDocument| is set the URL style
+% to monospaced. So we reset it back to normal roman type |\AfterEndPreamble|.
+%
+        \urlstyle{APACrm}
+       }%
+%
+% We pre-empt \textsf{apacite}'s |\providecommand| of |\doi| with our own
+% definition that includes the `doi' URI scheme label in the link, remembering
+% to remove the one inserted by |\doiprefix|.
+%
+      \newcommand{\doi}[1]{\href{http://dx.doi.org/#1}{\nolinkurl{doi:#1}}}%
+      \renewcommand{\doiprefix}{\unskip}%
+    }{}%
+  }%
+%
+% Both \textsf{biblatex} and \textsf{apacite} use |\bibitemsep| for the space
+% between bibliography items. Just in case they haven't been loaded, though, we
+% protect our setting of that length with an |\ifx| test.
+%
+  \ifx\undefined\bibitemsep
+  \else
+    \setlength{\bibitemsep}{1em plus 1ex minus 1ex}%
+  \fi
+}
+%
+% As mentioned above, if \textsf{apacite} is used, we can use a package option
+% to ensure that the reference list heading appears in the PDF bookmarks.
+%
+\PassOptionsToPackage{numberedbib}{apacite}
+
+%
+% We, of course, use \textsf{hyperref} for enhancing the PDF with working links,
+% bookmarks, metadata, etc.
+%
+\usepackage
+  [ colorlinks=true
+  , linkcolor=black
+  , anchorcolor=black
+  , citecolor=links
+  , filecolor=black
+  , menucolor=black
+  , runcolor=black
+  , urlcolor=links
+  ]{hyperref}
+%
+% Links should be in roman type, not monospaced.
+%
+\urlstyle{rm}
+%
+% We provide an |\email| command for displaying the email address of the
+% corresponding author.
+%
+\newcommand*{\email}[1]{\href{mailto:#1}{#1}}
+%
+% Once the user has had a chance to provide the metadata, we can add it to the
+% PDF metadata.
+%
+\AtBeginDocument{%
+  \hypersetup
+    { pdftitle={\thetitle}
+    , pdfauthor={\dccp@author}
+    , pdfsubject={\dccp@subject}
+    }
+%
+% The APA has its own style for line breaks in URLs. The \textsf{apacite}
+% package provides the code for this, but in case \textsf{biblatex} is used
+% instead, we repeat the settings (from 2013/07/21 v6.03) here.
+%
+  \@ifundefined{Url@force@Tilde}{\def\Url@force@Tilde{\relax}}{}%
+  \def\url@apa@dot{\mathchar"2E }%
+  \def\url@apa@comma{\mathchar"2C }%
+  \def\url@apa@questionmark{\mathchar"3F }%
+  \def\url@apa@exclamation{\mathchar"21 }%
+  \def\url@apa@hyphen{\mathchar"2D }%
+  \def\url@apa@underscore{\_}%
+  \def\UrlBreaks{\do\@\do\\\do\|\do\;\do\>\do\]\do\)\do\'\do+\do\=\do\#}%
+  \def\UrlBigBreaks{\do\/\do\:\do@url@hyp}%
+  \def\UrlNoBreaks{\do\(\do\[\do\{\do\<}% \)}
+  \def\UrlOrds{\do\*\do\~\do\'\do\"}%
+  \def\UrlSpecials{%
+    \do\.{\mathbin{}\url@apa@dot }%
+    \do\,{\mathbin{}\url@apa@comma }%
+    \do\-{\mathbin{}\url@apa@hyphen }%
+    \do\?{\mathbin{}\url@apa@questionmark }%
+    \do\!{\mathbin{}\url@apa@exclamation }%
+    \do\_{\mathbin{}\url@apa@underscore }%
+    \do\ {\Url@space}\do\%{\Url@percent}\do\^^M{\Url@space}%
+    \Url@force@Tilde}%
+  \def\Url@OTnonTT{\do\<{\langle}\do\>{\mathbin{\rangle}}\do
+    \_{\mathbin{}\_}\do\|{\mid}\do\{{\lbrace}\do\}{\mathbin{\rbrace}}\do
+    \\{\mathbin{\backslash}}\UrlTildeSpecial}
+}
+
+%
+% We now embed the Creative Commons licence information in the PDF using an XMP
+% packet. To do this, we employ the same technique as Scott Pakin's
+% \textsf{hyperxmp} (2014/01/02 v2.4). In order to avoid avoid a bug whereby
+% Adobe Acrobat confuses the XMP author information and the regular author
+% information, though, we \emph{only} embed the licence information.
+%
+% We need to make sure that any characters to appear verbatim in the XMP packet
+% are treated as ordinary characters and not active ones. The likely active
+% characters are symbols and punctuation, so should be treated as `other'
+% (category 12).
+%
+\begingroup
+\catcode`\"=12
+\catcode`\&=12
+\catcode`\#=12
+\catcode`\<=12
+\catcode`\>=12
+\catcode`\_=12
+%
+% We construct the XMP packet as the document begins.
+%
+\AtBeginDocument{%
+%
+% For convenience we define |\sp| to be a level of indent, translating to three
+% spaces.
+%
+  \def\sp{\space\space\space}
+%
+% The text of the XMP packet is recorded in |\cc@xmp@packet|. We use |^^J| to
+% break lines.
+%
+  \long\gdef\cc@xmp@packet{%
+<?xpacket begin='' id=''?>^^J%
+<x:xmpmeta xmlns:x='adobe:ns:meta/'>^^J%
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>^^J%
+\sp<rdf:Description rdf:about=''^^J%
+\sp\sp xmlns:xapRights='http://ns.adobe.com/xap/1.0/rights/'>^^J%
+\sp\sp<xapRights:Marked>True</xapRights:Marked>^^J%
+\sp</rdf:Description>^^J%
+\sp<rdf:Description rdf:about=''^^J%
+\sp\sp xmlns:dc='http://purl.org/dc/elements/1.1/'>^^J%
+\sp\sp<dc:rights>^^J%
+\sp\sp\sp<rdf:Alt>^^J%
+\sp\sp\sp\sp<rdf:li xml:lang='x-default'>This work is licensed under a Creative Commons Attribution 4.0 International Licence.</rdf:li>^^J%
+\sp\sp\sp</rdf:Alt>^^J%
+\sp\sp</dc:rights>^^J%
+\sp</rdf:Description>^^J%
+\sp<rdf:Description rdf:about=''^^J%
+\sp\sp xmlns:cc='http://creativecommons.org/ns#'>^^J%
+\sp\sp<cc:license rdf:resource='http://creativecommons.org/licenses/by/4.0/'/>^^J%
+\sp</rdf:Description>^^J%
+</rdf:RDF>^^J%
+</x:xmpmeta>^^J%
+<?xpacket end='r'?>^^J%
+  }%
+}
+\endgroup
+%
+% Different workflows require the XMP packet to be embedded in different ways.
+%
+% Pdf\TeX\ can inject objects into PDFs natively.
+%
+\newcommand*{\ccxmp@embed@packet@pdftex}{%
+  \bgroup
+    \pdfcompresslevel=0
+    \immediate\pdfobj stream attr {%
+      /Type /Metadata
+      /Subtype /XML
+    }{\cc@xmp@packet}%
+    \pdfcatalog {/Metadata \the\pdflastobj\space 0 R}%
+  \egroup
+}
+%
+% The |\pdfmark| command defined by \textsf{hyperref} is respected by tools such
+% as Dvipdf, Dvips, Dvipsone, etc.
+%
+\newcommand*{\ccxmp@embed@packet@pdfmark}{%
+  \pdfmark{%
+    pdfmark=/NamespacePush
+  }%
+  \pdfmark{%
+    pdfmark=/OBJ,
+    Raw={/_objdef \string{ccxmp@packet\string} /type /stream}%
+  }%
+  \pdfmark{%
+    pdfmark=/PUT,
+    Raw={\string{ccxmp@packet\string}
+      2 dict begin
+        /Type /Metadata def
+        /Subtype /XML def
+        currentdict
+      end
+    }%
+  }%
+  \pdfmark{%
+    pdfmark=/PUT,
+    Raw={\string{ccxmp@packet\string} (\cc@xmp@packet)}%
+  }%
+  \pdfmark{%
+    pdfmark=/Metadata,
+    Raw={\string{Catalog\string} \string{ccxmp@packet\string}}%
+  }%
+  \pdfmark{%
+    pdfmark=/NamespacePop
+  }%
+}
+%
+% Dvipdfm has its own |\special| command for inserting PDF objects, but
+% it is a bit basic and requires advance knowledge of how long (in characters)
+% the object is.
+%
+% The |\ccxmp@count@spaces| macro counts the number of spaces in its parameter
+% through a process of iteration, adding this figure to |\@tempcnta|.
+%
+\def\ccxmp@count@spaces#1 {%
+  \def\ccxmp@one@token{#1}%
+  \ifx\ccxmp@one@token\@empty
+    \advance\@tempcnta by -1
+  \else
+    \advance\@tempcnta by 1
+    \expandafter\ccxmp@count@spaces
+  \fi
+}
+%
+% The |\ccxmp@count@non@spaces| command counts the number of non-spaces in its
+% argument through a process of iteration, adding this figure to |\@tempcnta|.
+%
+\newcommand*{\ccxmp@count@non@spaces}[1]{%
+  \def\ccxmp@one@token{#1}%
+  \ifx\ccxmp@one@token\@empty
+  \else
+    \advance\@tempcnta by 1
+    \expandafter\ccxmp@count@non@spaces
+  \fi
+}
+%
+% The |\ccxmp@string@len| command sets |\@tempcnta| to the number of characters
+% (spaces + non-spaces) in its argument.
+%
+\newcommand*{\ccxmp@string@len}[1]{%
+  \@tempcnta=0
+  \expandafter\ccxmp@count@spaces#1 {} %
+  \expandafter\ccxmp@count@non@spaces#1{}%
+}
+%
+% So now, finally, is the command for embedding the packet using Dvipdfm.
+%
+\newcommand*{\ccxmp@embed@packet@dvipdfm}{%
+  \ccxmp@string@len{\cc@xmp@packet}%
+  \special{pdf: object @ccxmp@packet
+    <<
+      /Type /Metadata
+      /Subtype /XML
+      /Length \the\@tempcnta
+    >>
+    stream^^J\cc@xmp@packet endstream%
+  }%
+  \special{pdf: docview
+    <<
+      /Metadata @ccxmp@packet
+    >>
+  }%
+}
+%
+% \XeTeX\ creates PDFs with Xdvipdfmx, which supports a simpler |\special| for
+% inserting objects that does not require us to count characters.
+%
+\newcommand*{\ccxmp@embed@packet@xetex}{%
+  \special{pdf:stream @ccxmp@packet (\cc@xmp@packet)
+    <<
+      /Type /Metadata
+      /Subtype /XML
+    >>
+  }%
+  \special{pdf:put @catalog
+    <<
+      /Metadata @ccxmp@packet
+    >>
+  }%
+}
+%
+% We rely on \textsf{hyperref} to tell us how the PDF will be generated (after
+% all, it may not be done in the current pass) and use the respective technique
+% to embed the XMP packet.
+%
+\AtBeginDocument{%
+  \begingroup
+  \def\ccxmp@driver{hpdftex}%
+  \ifx\ccxmp@driver\Hy@driver
+    \ccxmp@embed@packet@pdftex
+  \else
+    \def\ccxmp@driver{hdvipdfm}%
+    \ifx\ccxmp@driver\Hy@driver
+      \ccxmp@embed@packet@dvipdfm
+    \else
+      \def\ccxmp@driver{hxetex}%
+      \ifx\ccxmp@driver\Hy@driver
+        \ccxmp@embed@packet@xetex
+      \else
+        \@ifundefined{pdfmark}{}{%
+          \ccxmp@embed@packet@pdfmark
+        }%
+      \fi
+    \fi
+  \fi
+  \endgroup
+}
+%% 
+%% Copyright (C) 2015 Digital Curation Centre, University of Edinburgh
+%% <info@dcc.ac.uk>
+%%
+%% End of file `dccpaper-base.sty'.
-- 
cgit v1.2.3

