summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/dccpaper/dccpaper-base.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-08-05 22:32:58 +0000
committerKarl Berry <karl@freefriends.org>2016-08-05 22:32:58 +0000
commit480580fec13891a80df5703594143afc5580dd61 (patch)
treef892f633de77f118f113fb635f60ef174ebf546e /Master/texmf-dist/tex/latex/dccpaper/dccpaper-base.sty
parent010ac20bb5ed264d97d78d38c27a28232f9e8836 (diff)
dccpaper (5aug16)
git-svn-id: svn://tug.org/texlive/trunk@41804 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/dccpaper/dccpaper-base.sty')
-rw-r--r--Master/texmf-dist/tex/latex/dccpaper/dccpaper-base.sty1198
1 files changed, 1198 insertions, 0 deletions
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'.