%D \module
%D   [file=s-map-10.mkiv,
%D   version=2012.06.06,
%D   title=\CONTEXT\ Style File,
%D   subtitle=\MAPS\ journal style,
%D   author={Hans Hagen, Taco Hoekwater and Siep Kroonenberg},
%D   date=\currentdate,
%D   copyright=NTG/MAPS]

%D This module implements the MAPS style for use with the Context macro package. The
%D original MAPS layout was designed and implemented in LaTeX by Taco Hoekwater and
%D Siep Kroonenberg.
%D
%D \startitemize
%D \startitem
%D     four layouts:
%D     \startitemize
%D         \startitem two columns \stopitem
%D         \startitem one column, with wide outer margins (option onecolumn) \stopitem
%D         \startitem one column, with wide left margin (option asym) \stopitem
%D         \startitem one column, with wide right margin (option single) \stopitem
%D     \stopitemize
%D \stopitem
%D \startitem
%D     font sizes deviate from TeX's usual geometric progression
%D \stopitem
%D \startitem
%D     use of sans-serif for headers and various details
%D \stopitem
%D \stopitemize
%D
%D A mode nosubsub defines only two levels of sectioning. If you don't need more and
%D use the two-column layout, then this option will probably improve the looks of
%D your paper.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newif\ifMapsInColumns

\doifmode   {asym}     {\enablemode[onecolumn]}      % implies onecolumn
\doifmode   {single}   {\enablemode[asym,onecolumn]} % implies onecolumn
\doifnotmode{onecolumn}{\MapsInColumnstrue}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% fonts

%%%%%%%%% first, font sizes
\definebodyfontenvironment [7pt][% LaTeX: scriptsize
   interlinespace=8pt,
   big=8pt,
   small=6pt%
]

\definebodyfontenvironment [8pt][% LaTeX: footnotesize
   interlinespace=9pt,
   big=9pt,
   small=7pt,
   x=6pt%
]

\definebodyfontenvironment [9pt][% LaTeX: small
   interlinespace=10pt,
   big=10pt,
   small=8pt,%
   x=7pt,%
   script=6pt%
]

\definebodyfontenvironment [10pt][% LaTeX: normalsize
   interlinespace=11pt,
   big=11pt,
   a=11pt,
   small=9pt,%
   x=8pt,%
   script=7pt%
]

\definebodyfontenvironment [11pt][% LaTeX: large
   interlinespace=11pt,
   big=11pt,
   small=10pt,%
   x=9pt,%
   script=8pt%
]

\definebodyfontenvironment [14pt][%
   interlinespace=14pt,
   big=18pt,
   small=11pt,
   x=10pt%
]

\definebodyfontenvironment [18pt][%
   interlinespace=18pt,
   big=24pt,
   small=14pt,
   x=10pt%
]

\definebodyfontenvironment [24pt][%
   interlinespace=24pt,
   big=24pt,
   small=18pt,
   x=11pt%
]

%%% font families

\definefontfeature[mapsdef][default][mode=node,onum=yes,lnum=no]

\starttypescript [serif] [libertine] [name]
    \setups[font:fallback:serif]
    \definefontsynonym [Serif]            [file:LinLibertine_R.otf]   [features=mapsdef]
    \definefontsynonym [SerifItalic]      [file:LinLibertine_RI.otf]  [features=mapsdef]
    \definefontsynonym [SerifSlanted]     [file:LinLibertine_RI.otf]  [features=mapsdef]
    \definefontsynonym [SerifBold]        [file:LinLibertine_RB.otf]  [features=mapsdef]
    \definefontsynonym [SerifBoldItalic]  [file:LinLibertine_RBI.otf] [features=mapsdef]
    \definefontsynonym [SerifBoldSlanted] [file:LinLibertine_RBI.otf] [features=mapsdef]
    \definefontsynonym [SerifCaps]        [file:LinLibertine_R.otf]   [features=smallcaps]
\stoptypescript

\starttypescript [maps]
   \definetypeface [maps] [rm] [serif] [libertine]   [default]
   \definetypeface [maps] [mm] [math]  [euler]       [default] [rscale=0.9]
   \definetypeface [maps] [tt] [mono]  [modern]      [default]
   \definetypeface [maps] [ss] [sans]  [modern]      [default] [rscale=0.95]
\stoptypescript

\setupbodyfont[maps,10pt,rm]

\setupinterlinespace[line=11pt]

% activate protruding
\setupfontsynonym[handling=pure]

\setupalign[hanging]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% additional general typographic details

\setupindenting [yes,next,11pt] % indenting after enumerations etc.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 3 versions of layout with matching headers

\definepapersize
  [maps]
  [width=21cm,height=26.5cm]

\setuppapersize
  [maps][maps]

\setuplayout
  [topspace=40pt,
   height=688pt,
   header=33pt,
   margin=106pt,
   leftmargindistance=11pt,
   rightmargindistance=11pt]

\setupblank[5.5pt]

\setuppagenumbering [location=]

\definetyping [widetyping]

\setupheader [style=\ss]
\setupfooter [style=\ss]

\def\AuHead{\MapsRunningAuthor}
\def\TiHead{\ifnum\pageno=\MapsPage \relax \MapsRunningAuthor \else \MapsRunningTitle\fi}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% sectioning

\setupheads
  [number=no,
   align=flushleft]

\unexpanded\def\hfonti    {\ssbfa}
\unexpanded\def\hfontii   {\ssbf}
\unexpanded\def\hfontiii  {\rm\bi}
\unexpanded\def\runin   #1{#1.}

\setuphead [section,subject]
  [style=\hfonti,
   before={\blank[line]},
   after={\blank[halfline]}]
\setuphead [subsection,subsubject]
  [style=\hfontii,
   before={\blank[halfline]},
   after={}]
\setuphead [subsubsection,subsubsubject]
  [style=\hfontiii,
   deeptextcommand=\runin,
   distance=6pt,
   alternative=text,
   before={\blank[halfline]}]

\startmode[nosubsub]
\setuphead [section,subject]
  [style=\hfontii,
   before={\blank[line]},
   after={}]
\setuphead [subsection,subsubject]
  [style=\hfontiii,
   deeptextcommand=\runin,
   alternative=text,
   distance=6pt,
   before={\blank[halfline]}]
\stopmode


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% floats

\setupfloats
  [location=left,
   before={\ss}]

\setupcaptions
  [align=flushleft,
   headstyle={\ssbf},
   style={\ssx},
   suffix=.,
   distance=6pt,
   inbetween={\blank[halfline]}]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% various document elements

\setupitemize
  [1]
  [symbol=8]

\setupitemize
  [each]
  [before={\blank[line]},
   after={\blank[line]},
   inbetween=,
   indentnext=no,
   width=12pt,
   distance=0pt]

% an outer form of itemize that does not indent
% the paragraph.

\definecomplexorsimpleempty\startouteritemize

\def\complexstartouteritemize[#1]%
  {\begingroup
   \setupitemize[width=0pt,inbetween={\blank},before={\blank},after={\blank}]
   \startitemize[#1]
   \let\doitem\item
   \def\item{\doitem[]\hbox{}\kern12pt\rightskip=0pt}}

\def\stopouteritemize
  {\stopitemize\endgroup}

\definedescription
   [description]
   [alternative=hanging,width=fit]

% typing:
% - prettyverbatim is NOT the default

\setuptyping
  [style={\switchtobodyfont[small,tt]},
   option=none,
   indentnext=no]

% normally we have endnotes, but in the title there
% could be a \thanks command. Since the new column mode
% does not deal with footnotes all that well, we more
% or less have to roll our own.

\setupnotation
  [footnote]
  [margin=0cm,
   before={},
   after={},
   way=bypage,
   number=no]

\setupnote
  [footnote]
  [location=page,
   spacebefore=,
   before=,
   after=]

\unexpanded\def\thanks#1{\xdef\MapsThanks{#1}*}

\setuptabulate
  [before=\blank,
   inner=\ss,
   after=\blank]

\def\startIntroEntry#1%
 {\bgroup
  \setupalign[right]
  \setuptolerance[verytolerant]
  \setupindenting[no]
  \noindent
  \switchtobodyfont[9pt]%
  \setuplocalinterlinespace[line=10pt]%
  \parfillskip 0pt plus 1fill
  \rightskip6pt plus 1fill
  \ss
  \bgroup\bf #1\par\egroup
  \ignorespaces }

\def\stopIntroEntry
  {\par\egroup
   \blank[line] }

\def\defineIntroEntry[#1][#2]
  {\setvalue{start#1}{\startIntroEntry{#2}}%
   \setvalue {stop#1}{\stopIntroEntry}}

\defineIntroEntry[Keywords][Keywords]
\defineIntroEntry[Abstract][Abstract]

% article parameters (other fields and defaults)
\def\MapsBibData[#1]%
  {\getparameters [Maps]
	[SubTitle=,
     RunningAuthor=,
     RunningTitle=,
     Email=,
     Address=,
     Page=1,
     Title=,
     Author=,
     Period=,
     Number=,
     Year=,
     SkipHeader=,
     SkipFooter=,
     Abstract=,
     Keywords=,
     Thanks=,
     #1]%
  \doifnothing{\MapsPeriod}%
    {\ifnum \normalmonth<6 \gdef\MapsPeriod{VOORJAAR}\else \gdef\MapsPeriod{NAJAAR}\fi}
  \doifinstringelse{oorjaar}{\MapsPeriod}{\gdef\MapsPeriod{VOORJAAR}}{}%
  \doifinstringelse{pring}{\MapsPeriod}{\gdef\MapsPeriod{VOORJAAR}}{}%
  \doifinstringelse{ajaar}{\MapsPeriod}{\gdef\MapsPeriod{NAJAAR}}{}%
  \doifinstringelse{utumn}{\MapsPeriod}{\gdef\MapsPeriod{NAJAAR}}{}%
  \doifnothing{\MapsYear}{\gdef\MapsYear{\the\year}}%
  \doifnothing{\MapsNumber}%
    {\ifnum \normalmonth<6
      \xdef\MapsNumber{\the\numexpr (\the\year-1990)*2\relax}%
     \else
      \xdef\MapsNumber{\the\numexpr (\the\year-1990)*2+1\relax}%
     \fi }%
  \doifnothing\MapsRunningAuthor
    {\global\let\MapsRunningAuthor\MapsAuthor}%
  \doifnothing\MapsRunningTitle
    {\global\let\MapsRunningTitle\MapsTitle}}%

\def\doarticleheader
  {\startbaselinecorrection
   \bgroup
     \hsize= 457pt
     \enforced\let\\\crlf
     \blank[35pt,force]
     \switchtobodyfont[24pt]
     \startalign[flushleft,verytolerant,extremestretch]
     {\noindent\bf\language=-1\MapsTitle\par}
     \ifx\MapsSubTitle\empty
       \blank[line]
     \else
       \bgroup
       \blank[12pt]
       \switchtobodyfont[14pt]\noindent \it
       \advance \rightskip 0pt plus 2em
       \MapsSubTitle\par
       \egroup
       \blank[line]
     \fi
     \stopalign
   \egroup
   \setupalign[width]
   \switchtobodyfont[rm,10pt]
   \stopbaselinecorrection }

\newif\ifintroentries

\def\dostartArticle[#1]%
  {\MapsBibData[#1]
   \pageno=\MapsPage
   \setnumber[realpage][\MapsPage]
   \setnumber[userpage][\MapsPage]
   \doifnothing{\MapsSkipHeader}{\doarticleheader}%
   \ifMapsInColumns
     \startcolumns\hyphenpenalty1000
   \else
     \clubpenalty10000
     \widowpenalty10000
   \fi
   \introentriesfalse
   \startbaselinecorrection
   \doifsomething{\MapsAbstract}{\startAbstract \MapsAbstract \stopAbstract \introentriestrue }
   \doifsomething{\MapsKeywords}{\startKeywords \MapsKeywords \stopKeywords \introentriestrue }
   \stopbaselinecorrection
   \ifintroentries
     \blank[2*line]
   \fi
   \doifsomething\MapsThanks
     {\expanded{\footnote[thanks]{*\quad\strut\MapsThanks}}%
      \kern -22pt }% need to unskip because of the silent \footnote
   \let\footnote\endnote }

\def\startArticle
  {\dosingleempty\dostartArticle}

\def\signArticle
  {\doifnothing
    {\MapsSkipFooter}
    {\blank[line]%
     \enforced\let\\\crlf
     \noindent\switchtobodyfont[ss,9pt]%
     \MapsAuthor
     \doifsomething{\MapsAddress}{\\\MapsAddress}%
     \doifsomething{\MapsEmail}{\\\MapsEmail}}%
   \switchtobodyfont[10pt]%
   \def\signArticle{}}

% endnotes aka footnotes

\def\footnum#1{#1.}

\setupnotation
  [endnote]
  [alternative=serried,
   style={\switchtobodyfont[9pt]},
   margin=0cm,
   width=12pt,
   before=,
   after=,
   margin=0cm,
   numbercommand=\footnum]

\setupnote
  [endnote]
  [location=none]

\def\endnotessubjectname{Footnotes}
\def\endnotesubjectname{Footnote}

\def\stopArticle
  {\ifcase\rawcountervalue[endnote]\relax
   \or
     \startsubject[title=\endnotesubjectname] % single
       \placenotes[endnote]
     \stopsubject
   \else
     \startsubject[title=\endnotessubjectname]
       \placenotes[endnote]
     \stopsubject
   \fi
   \par\signArticle
   \ifMapsInColumns \stopcolumns \fi
   \page }

\installpagebreakmethod{last}{}

%%% `logos' %%%%%%%%%%%%%%%%%%%%%%%%%%

\unexpanded\def\XeTeX
  {X\lower.5ex\hbox{\kern-.1em\mirror{E}}\kern-.1667em\TeX}

\unexpanded\def\LaTeX % requested by erik frambach
  {{\setbox\scratchbox\hbox{L}%
    \scratchdimen\ht\scratchbox
    \setbox\scratchbox\hbox{\switchtobodyfont[script]A}%
    L\kern-.55\wd\scratchbox
    \raise\scratchdimen\hbox{\lower\ht\scratchbox\copy\scratchbox}%
    \kern-.2\wd\scratchbox\TeX}}

\unexpanded\def\CONTEXT   {Con{\TeX}t}
\unexpanded\def\ConTeXt   {Con{\TeX}t}
\unexpanded\def\METAFONT  {Metafont}
\unexpanded\def\METAPOST  {MetaPost}
\unexpanded\def\POSTSCRIPT{PostScript}

\unexpanded\def\acro#1{{\switchtobodyfont[9pt]#1}}

\definefontfeature[smallcapitals] [smcp=yes]
\def\sc{\addff{smallcapitals}}

\def\NTG{{\sc ntg}}
\def\TUG{{\sc tug}}

%%%%%%%%%%%
% headers and footers and other mode-related things
\setuplayout
  [width=457pt]

\setupcolumns
  [n=2,tolerance=verytolerant,distance=11pt]

\setuplayout
  [backspace=70.3pt,grid=yes]

\setuppagenumbering
  [alternative=doublesided]

\setuptyping
  [blank=halfline]

\setupheadertexts
  [\TiHead]
  [{\cap{\MapsPeriod\ \MapsYear}\quad\bf \pagenumber\hskip-30pt\hbox{}}]
  [{\hbox{}\hskip-30pt{\bf \pagenumber}\quad \cap {maps\ \MapsNumber}}]
  [\AuHead]

\setupfootertexts % empty

\startmode[onecolumn]

\setuplayout[width=340pt]

\startmode[asym]% one col, asymmetric
  \setuppagenumbering
    [alternative={singlesided,doublesided}]
  \doifmodeelse
    {single}
    {\setupheadertexts
      [\TiHead]
      [{\cap{\MapsPeriod\ \MapsYear}\quad\bf \pagenumber\hskip-147pt\hbox{}}]
      [{\hbox{}\hskip-30pt{\bf \pagenumber}\quad \cap {maps\ \MapsNumber}}]
      [\AuHead\hskip-110pt]}
    {\setuptyping
      [widetyping]
      [oddmargin=-117pt]
     \setuplayout[backspace=187.3pt]
     \setupheadertexts
      [{\hbox{}\hskip-117pt\TiHead}]
      [{\cap{\MapsPeriod\ \MapsYear}\quad\bf \pagenumber\hskip-30pt\hbox{}}]
      [{\hbox{}\hskip-147pt{\bf \pagenumber}\quad \cap {maps\ \MapsNumber}}]
      [\AuHead]}
\stopmode

\startnotmode[asym]
  \setupheadertexts
    [\TiHead]
    [{\cap{\MapsPeriod\ \MapsYear}\quad\bf \pagenumber\hskip-147pt\hbox{}}]
    [{\hbox{}\hskip-147pt{\bf \pagenumber}\quad \cap {maps\ \MapsNumber}}]
    [\AuHead]
\stopnotmode

\stopmode % onecolumn


\def\fulltextwidth{457pt}

\def\startfullwidth
  {\par\begingroup
   \doifmode
     {onecolumn}
     {\hsize=\fulltextwidth
      \doifmodeelse
        {asym}
        {\doifmodeelse{single}{\textwidth=\fulltextwidth }{\leftskip-117pt }}
        {\ifodd\pageno \else \leftskip-117pt \hsize=340pt \fi }}}

\def\stopfullwidth
  {\par\endgroup}

% Taco: \setupalign[tolerant,fixed} where fixed is french spacing

\setupalign
  [tolerant,fixed]

\continueifinputfile{s-maps.mkiv}

% \enablemode[nosubsub]  % if you need at most two levels of sectioning
% \enablemode[onecolumn] % for symmetric single-column layout
% \enablemode[asym]      % for asymmetric single-column layout, left aligned
% \enablemode[single]    % for asymmetric single-column layout, right aligned

% \usemodule[map-20]

\usebtxdataset[samplmaps.bib]
\usebtxdefinitions[apa]

\starttext
\startArticle[% Use {} if argument contains comma's!
% titel
           Title={An example document for the Maps module, demonstrating its
                  various features\thanks{Thanks should be short}
                 },
    RunningTitle=An example document,
        SubTitle=with an optional subtitle,
% auteur
          Author=Anton Ulrich Thor,
           Email=a.u.thor@uu.am.dw,
         Address=Institute of Indefinite Studies\\
                 Unseen University\\
                 Ankh Morpork,
% tijdstip
          Period=voorjaar,
          Number=36,
            Year=2008,
            Page=1,
% Taal
        Language=english,
% Intro
        Abstract={%
This is a sample input file for the Maps module version 2.0,
which mimics the associated \LaTeX\ class file.
It demonstrates various standard and non-standard features.
\crlf
Use of the abstract- and keywords environments is highly appreciated.},
        Keywords={Maps, \ConTeXt\ module, sample}]

\startsection[title=Ordinary Text]

The ends  of words and sentences are marked
  by   spaces. It  doesn't matter how many
spaces    you type; one is as good as 100.  The
end of   a line counts as a space.

One   or more   blank lines denote the  end
of  a paragraph.

Footnotes\footnote{This is an example of an endnote.} are converted to
endnotes\endnote{This is another one, with more text to it, to see how
it will wrap to the next line.}. These will automatically be typeset at
the end of the article. The title of the notes section is defined by the
command \type{\endnotessubjectname} (for multiple notes) or
\type{\endnotesubjectname} (in case of a single note).

\stopsection

\startsection[title=Fonts]
The Maps uses Linux Libertine for main text,
with Latin Modern Sans and Mono, and Euler for math. The Linux Libertine
OpenType fonts are part of \TeX\ Live. If they are not found,
Latin Modern Serif fallbacks will be used.

\stopsection

\startsection[title=Sectioning]

The maps module defaults to unnumbered sections. If you really must,
you can restore section numbering with \emph{e.g.}
\type{\setupheads[number=yes]}

\startsubsection[title=Subsection]
This is a second-level section header. You can go down one more
level:

% \penalty0

\startsubsubsection[title=A subsubsection]
This is supposed to be a run-in header, so make sure you start the
text right after \type{\startsubsubsection}.

\stopsubsubsection

\startsubsubsection[title=Tip]
If you only need one or two levels of header, then you can get a
better layout with the \type{nosubsub} document option.
The Maps editors may decide to turn on this option for you.
\stopsubsubsection

\stopsubsection

\stopsection

\startsection[title=Lists]

Another frequently-displayed structure is a list.
The following is an example of an \emph{itemized}
list.
\startitemize
  \item This is the first item of an itemized list.
    Each item in the list is marked with a \quote{tick}.
  \item This is the second item of the list.  It
    contains another list nested inside it.  The inner
    list is an \emph{enumerated} list.

    \startitemize[n]
      \startitem This is the first item of an enumerated
        list that is nested within the itemized list.
       \stopitem
      \item This is the second item of the inner list.
        \ConTeXt\ allows you to nest lists deeper than
          you really should.
      \stopitem
    \stopitemize

    \noindent
    This is the rest of the second item of the outer
    list.  It is no more interesting than any other
    part of the item.
  \startitem This is the third item of the list. \stopitem
\stopitemize

In a two-column layout, protracted indenting doesn't look very
good. Therefore, the Maps module provides an \type{outeritemize}
environment:

\startouteritemize
\item This is the first item of a non-indented itemized list,
  produced with the \mono{outeritemize} environment.
\item This is the second item.
\stopouteritemize

Now an enumerated version:

\startouteritemize[n]
\item This is the first item of a non-indented enumerated list,
  produced with the \mono{outeritemize} environment.
\item This is the second item.
\stopouteritemize

There is also a definition for description lists:

\startdescription{cow}
A milk-producing animal that grazes grass and has multiple stomachs
\stopdescription
\startdescription{kangoroo}
An Australian hopping animal
\stopdescription

\stopsection

\startsection[title=Wide typesetting in single-column layout]

For both single-column layouts, there are environments \type{fullwidth} and
\type{widetyping} which typeset their content across the full page,
including most of the wide margin.

\startfullwidth
x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x
\stopfullwidth

\startwidetyping
{}\/$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\stopwidetyping
The implementation of \type{fullwidth} is rather simplistic and
may easily break, in which case more sophisticated hackery will be
needed.

\stopsection

\startsection[title=Assembling your submission]

Please check whether all non-standard modules and all
non-standard fonts are included. We do have a current \TeX{} Live but,
although we do have access to CTAN, finding the right stuff by
name can occasionally be a challenge.

Avoid jpeg compression for screenshots. Conversion to pdf may
sometimes result in jpeg compression as well. Use \emph{e.g.} png
format instead.

Finally, a pdf of your article is appreciated. This way, we can
check more reliably whether your article compiles
correctly on our own systems.

\stopsection
\startsection[title=References]

If you have references, use whatever suits you. A few sample references:
see \cite[knuth], or \cite[lamport].

\stopsection

\startsection[title=References]
        \placelistofpublications
\stopsection
\stopArticle
\stoptext

