%D \module %D [ file=t-tugboat %D version=$Id: s-tugboat.mkiv 246 2019-09-09 18:22:19Z karl $ %D title=\CONTEXT\ Style File, %D subtitle=\TUGBOAT\ base style, %D author=Aditya Mahajan and others, %D date=\currentdate, %D copyright=Public Domain] %D \filename {s-tug-02} was originally written by Hans Hagen and Steve Grathwohl, %D and used grid typesetting. \filename {t-tugboat} was a major revision by Aditya %D Mahajan, no grid. \filename {s-tugboat.mkiv} was another major revision by Taco %D Hoekwater and Alan Braslau, now with pagecolumns. The latest version has been %D adapted by Karl Berry. %D HH: most articles are not that demanding, otherwise I'd probably redefine some %D of the code below. So, for now things gets adapted when needed. %D \section{Variables} %D %D We store the information about the article in variables. \setvariables [tugboat] [type=article, columns=yes, grid=no] \setvariables [tugboat] % overridden from ../tugboat.dates if present. [year=1900, volume=0, number=0, page=900] \setvariables [tugboat] [title=ConTeXt style for TUGboat, subtitle=, keywords=, author=T. Boat, address=Pragmatically Advanced tugboats\\314 Pi Ave.\\8061GH Hasselt NL, email={pragboat@tug.org}] %D \section{Font Setup} %D %D \TUGBOAT\ uses standard CM interline spacing. \definebodyfontenvironment [8pt] [interlinespace=9.5pt, big=9pt, small=7pt] \definebodyfontenvironment [9pt] [interlinespace=11pt, big=10pt, small=8pt] \definebodyfontenvironment [10pt] [interlinespace=12pt, big=12pt, small=9pt] \definebodyfontenvironment [12pt] [interlinespace=14pt, big=14.4pt,small=10pt] \definebodyfontenvironment [14.4pt] [interlinespace=18pt, big=14.4pt,small=12pt] %D \TUGBOAT\ uses Computer Modern fonts, and \CONTEXT\ uses Latin Modern by default, %D which is fine. So, we just specify the font size. \setupbodyfont [10pt] %D \TUGBOAT\ uses italic rather than slanted for emphasis. \setupbodyfontenvironment [default] [em=italic] %D Break after these chars in urls, not before. \sethyphenatedurlafter / \sethyphenatedurlafter . \sethyphenatedurlafter _ %D \section{Layout Setup} %D %D The original layout used in the \LATEX\ style for \TUGBOAT\ uses low|-|level %D \TEX\ syntax. \setuppapersize [letter] [letter] \setuplayout [topspace=3.8pc,% was 3.5pc header=1pc, headerdistance=1.5pc, height=middle, footerdistance=2pc, footer=1pc, bottomspace=3pc, % backspace=6pc, width=middle, cutspace=6pc, % margin=4pc, margindistance=1pc, ] %D With pagecolumns, seemingly can't get single-column floats. (HH: not sure %D what is meant but probably that it can't be done in the running text.) \enablemode [pagecolumns] %D KB: With columnsets, get unwanted gridsetting and blank last pages. HH: can %D be solved but columnsets normally get set up beforehand (figures and such). % \enablemode [columnsets] % \startmode [columnsets] % \usemodule [newcolumnsets] % \stopmode \setuppagenumbering [location=, alternative=doublesided] %D In \TUGBOAT\ different articles are glued together to form the final journal, so %D we do not want each article to occupy an even number of pages. (Except this seems %D to have no effect with pagecolumns.) HH: page columns are actually just single %D columns but combined, so it supports side floats and such. \installpagebreakhandler {last} {} %D \section{Indentation} %D %D We use automatic indentation control, that is: no indentation after titles and %D skips. \setupindenting[20pt,yes] %D We do not usually want indentation after lists. \setupenumerations [indentnext=no] \setupdescriptions [indentnext=no] %D \section{Itemize} %D %D And these. We typeset itemizations ragged right. \setupitemgroup [itemize] [indentnext=no, align=right] %D We align them at the paragraph indentation and %D pack them by default. \setupitemgroup [itemize] [each] [margin=1pc, width=1em, distance=0pt] \setupitemgroup [itemize] [1] [packed] %D \section{Section Headings} %D %D We follow the \TUGBOAT\ style for sections. I do not know if \type {align=right} %D also disables hyphenation (HH: no that is independent). Let's wait and see on %D this. The rest is straightforward. It took me a while to realize that in \LATEX\ %D \type {\@startsection} the absolute value of before skip (fourth argument) is %D important and not the sign. \setuphead [section,subsection,subsubsection, subject,subsubject,subsubsubject] [style=bold, align=right, before={\blank[8pt]}, after={\blank[4pt]}] %D \section{Spacing} %D %D We define a logical skip. This is equal to the \type {\topsep} in \LATEX, and %D most environments should have this skip. \defineblank [tugblank] [3pt] %D HH: In fact, \type \setupblank[tugblank] would deal with most of the blanks %D anyway, but let's not change this now. \setupblank [3pt] \setupitemize [1] [before={\blank[tugblank]}, after={\blank[tugblank]}, inbetween={\blank[tugblank]}] \setuplines [before={\blank[tugblank]}, after={\blank[tugblank]}, inbetween={\blank[tugblank]}] %D \section Typing %<<<1 %D %D \TUGBOAT\ uses a smaller font size for verbatim typesetting. Not sure why %D \type {nowhite} is used here. \setuptyping [option=none, bodyfont=9pt, before={\blank[nowhite,tugblank]}, after={\blank[back,nowhite,tugblank]}] %D Do not colorize code. \setuptyping[LUA][option=] \setuptyping[TEX][option=] \setuptyping[MP] [option=] %D Tiny line numbers in numbered code (not text size) \setuplinenumbering[style=\tfxx] % \infofont would be really tiny %D \section{Figure captions} %D %D \TUGBOAT\ uses a smaller font size for captions, too; \type {\small} gives 8pt, %D and we want 9pt, so we have to manually fix the baselines. \setupcaptions [headstyle=\AcroFontBold, style={\AcroFont\advance\baselineskip by -1pt}, align=right] %D We like a colon after the caption label. \let\floatcaptionsuffix=: % Prefer floats in text. \setupfloat[figure][align=middle,default=here] \setupfloat[table] [align=middle,default=here] %D \section{Footnotes} %D %D Not entirely a la \TUGBOAT: % rule={\hrule width 5pc height .4pt depth 0pt\relax \kern \strutdepth}, \setupfootnotes [bodyfont=9pt] \doif {\getvariable{tugboat}{columns}} {yes} { \setupfootnotes [location=columns] } \setupnotation [footnote] [location=joinedup, width=fit, headstyle=normal, distance=.5em] %D \section{List} %D %D We define a standard description and enumeration environment. \definedescription [description] [location=hanging, width=broad, before={\blank[tugblank]}, after={\blank[tugblank]}] \defineenumeration [enumeration] [location=hanging, width=broad, before={\blank[tugblank]}, after={\blank[tugblank]}] %D \section{References} %D %D More or less like plain BibTeX + ltugboat. \setupbtx [default:list:numbering] [left={[}, right={]}] \setupbtxlist [default] [width=2em, style={\frenchspacing}, align={raggedright,verystrict}] %D Instead of color, we use weighted gray scales: \setupcolors [conversion=always] %D We define some logical skips \defineblank [tugbefore] [big] \defineblank [tuginbetween][big] \defineblank [tugafter] [tugbefore] %D Some real macros: <<< \def\StartAbstract {\dostartbuffer[abstract][StartAbstract][StopAbstract]} \startsetups tugboat:abstract:setup % \setuptolerance % [horizontal, tolerant] \setupnarrower [before={\blank[.5\baselineskip]}, % after={\blank[10pt plus4pt minus4pt]}, after={\blank[10pt]}, middle=4.875pc] \setupindenting [20pt,yes] \stopsetups %D Headers and footers. \startsetups tugboat:banner:text:article {\sl TUGboat},\space Volume \getvariable{tugboat}{volume}\space (\getvariable{tugboat}{year}),\space No.\space\getvariable{tugboat}{number} \stopsetups \def\postissno{Proceedings of the \tubyear\ Annual Meeting} \startsetups tugboat:banner:text:proceedings \setups{tugboat:banner:text:article} \thinspace---\thinspace \postissno \stopsetups \startsetups tugboat:banner:setup:article \setupheadertexts [\setups{tugboat:banner:text:article}] [\pagenumber] % no footer in regular articles \setupfootertexts [][\getvariable{tugboat}{author}] [\getvariable{tugboat}{title}][] \stopsetups %D article is default. \setups{tugboat:banner:setup:article} %D It all starts here: \def\StartArticle{\setups{tugboat:\getvariable{tugboat}{type}:start}} \def\StopArticle {\setups{tugboat:article:stop}} \startsetups tugboat:grid:setup:settings:yes \setupblank [line] \defineblank [tugbefore] [halfline] \defineblank [tuginbetween] [halfline] \stopsetups % \startsetups tugboat:grid:setup:no % % \setupblank % [halfline] % % \defineblank [medium] [halfline] % \defineblank [tugbefore] [halfline] % \defineblank [tuginbetween] [halfline] % % \stopsetups \startsetups tugboat:introduction:article % \blank[halfline] \start \def\\{\unskip\space\&\space\ignorespaces} \hbox{\indent\getvariable{tugboat}{author}} \par \stop \stopsetups \startsetups tugboat:article:start \starttext \setups{tugboat:columns:\getvariable{tugboat}{columns}} \setups{tugboat:banner:setup:\getvariable{tugboat}{type}} \doif {\getvariable{tugboat}{columns}} {yes} { \doifmodeelse {columnset} { \startcolumnset } { \doifmodeelse {pagecolumns} { \startpagecolumns } { \startcolumns } } } \setcounter [userpage] [\getvariable{tugboat}{page}] \setups{tugboat:grid:setup:\getvariable{tugboat}{grid}} \snaptogrid \vbox \bgroup \forgetall \hrule height .6pt \blank[halfline] \start \let\\=\par {\bf\getvariable{tugboat}{title}} \par \blank[halfline] \hskip20pt\getvariable{tugboat}{author} \stop \blank[line] \doiftext {\getbuffer[abstract]} { \let\\=\endgraf \setups{tugboat:abstract:setup} \subject{Abstract} \getbuffer[abstract] } \egroup \stopsetups \startsetups tugboat:affiliation:article \blank[line] \begingroup \leftskip=5.7pc \noindent \llap{\sym{\diamond}\enspace} \getvariable{tugboat}{author} \\ \getvariable{tugboat}{address} \\ {\tt\getvariable{tugboat}{email}} \par \endgroup \stopsetups \startsetups tugboat:article:stop \setups{tugboat:affiliation:\getvariable{tugboat}{type}} % article joining in the issue. \ifx\writelastpage\undefined \else \begingroup \count0=\count1 % because context uses \count0 \writelastpage{+1}% \endgroup \fi \stoptext \stopsetups %D Normal word spacing, please. \setuptolerance [strict] %D Hz is fine but hanging can hang quotes out too far. \setupalign[hz] %D Let's see boxes overfull by >.5pt \overfullrule = 2pt % yes, I want to see \hfuzz = .5pt %D One can use the following setups (in the article) to collect settings specific to %D normal and|/|or multi column typesetting. \startsetups tugboat:columns:yes \doifmodeelse {columnset} { \setuplayout [grid=no] \setupcolumnset [distance=1.5pc] } { \doifmodeelse {pagecolumns} { \setuplayout [grid=no] \setuppagecolumns [distance=1.5pc] } { \setupcolumns [distance=1.5pc] } } \stopsetups % \startsetups tugboat:columns:no % % \stopsetups %D Logos, abbreviations: lots could be better here. \font\mflogo=logo10 % hm, better use \definefont %D HH: I'm pretty sure that this doesn't really work as it probably assumes some %D specific math family setup and that's not how \MKIV\ works. The TB definition %D doesn't scale with font changes and also doesn't adapt itself to style changes. \newcount\TestCount \newbox \TestBox \def\La {\dontleavehmode \begingroup \TestCount=\the\fam % no meaningful fams in text mode in ConTeXt \setbox\TestBox=\hbox{$\fam\TestCount\scriptstyle A$}% L\kern-.5\wd\TestBox\raise.42ex\box\TestBox \endgroup} %D Probably this will do a better job: % \def\La % {\dontleavehmode % \begingroup % \setbox\scratchbox\hbox{\tx A}% % or \txx % L\kern-.5\wd\scratchbox\raise.42ex\scratchbox % \endgroup} \def\ALEPH {Aleph} \def\API {\acro{API}} \def\CCODE {C} \def\CD {\acro{CD}} \def\CMYK {\acro{CMYK}} \def\CONTEXT {C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt} \def\Cplusplus {C\plusplus} \def\CPU {\acro{CPU}} \def\DVI {\acro{DVI}} \def\DVIPDFMX {dvipdfmx} \def\DVIPS {dvips} \def\ETEX {$\varepsilon$-\kern-.125em\TeX} \def\FTP {\acro{FTP}} \def\HTTP {\acro{HTTP}} \def\IO {\acro{I/O}} \def\ISO {\acro{ISO}} \def\KPSE {\acro{KPSE}} \def\KPSEWHICH {kpsewhich} \def\LATEX {\La\kern-.15em\TeX} \def\LATEXE {\LaTeX{}\kern.05em2$_{\textstyle\varepsilon}$} \def\LINUX {Linux} \def\LPEG {Lpeg} \def\LUA {Lua} \def\LUAJIT {Lua\acro{JIT}} \def\LUATEX {Lua\-\TeX} \def\LUATOOLS {lua\-tools} \def\MATHML {Math\acro{ML}} \def\METAFUN {Metafun} \def\METAPOST {MetaPost} \def\METATEX {Meta\TeX{}} \def\MF {{\mflogo META\-FONT}} \def\MKII {Mk\acro{II}} \def\MKIV {Mk\acro{IV}} \def\MPLIB {\acro{MP}lib} \def\MPTOPDF {mp\-to\-pdf} \def\MSWINDOWS {Windows} \def\MTXTOOLS {mtx\-tools} \def\NFSS {\acro{NFSS}} \def\OPENMATH {Open\-Math} \def\OPENTYPE {Open\-Type} \def\PASCAL {Pascal} \def\PDF {\acro{PDF}} \def\PDFTEX {pdf\/\-\TeX} \def\plusplus {\lower.45ex\hbox{$^{++}$}} \def\POSIX {\acro{POSIX}} \def\POSTSCRIPT{Post\-Script} \def\PRAGMA {Pragma \acro{ADE}} \def\RGB {\acro{RGB}} \def\RUBY {Ruby} \def\SCITE {Sci\acro{TE}} \def\TDS {\acro{TDS}} \def\TEX {\TeX} \def\TEXBOOK {{\sl The \TeX book}} \def\TEXEXEC {\TeX exec} \def\TFM {\acro{TFM}} \def\TRUETYPE {True\-Type} \def\TYPEONE {Type~1} \def\UTF {\acro{UTF}} \def\WEBC {Web2C} \def\XETEX {X\lower.5ex\hbox{\kern-.15em\mirror{E}}\kern-.1667em\TeX} \def\XML {\acro{XML}} \def\XPATH {\acro{XP}ath} \def\XSLT {\acro{XSLT}} \def\XSLTPROC {\acro{XSLTPROC}} \def\ZIP {zip} \def\Dash {\unskip\nobreak\thinspace---\thinspace\ignorespaces} \def\slash {/\penalty0 \hskip0pt \relax} % \acro for one point size smaller. Don't know how to do this for real. \definefont[AcroFont] [Serif*default sa .91] \definefont[AcroFontBold] [SerifBold*default sa .91] \definefont[AcroFontSmall][Serif*default sa .80] \unexpanded\def\acro #1{{\AcroFont #1}} % could be a style definition \unexpanded\def\acrobf #1{{\AcroFontBold #1}} % could be a style definition \unexpanded\def\acrosmall#1{{\AcroFontSmall #1}} % could be a style definition %D This is English; disallow x- or -xx breaks. (These are already the defaults %D but let's keep this anyway.) \setuplanguage [en] [lefthyphenmin=2, righthyphenmin=3] % \lefthyphenmin = 2 % \righthyphenmin = 3 \mainlanguage [en] \hyphenation { Post-Script data-base data-bases } %D A hack to read \type {tugboat.dates} settings. \doifelsefileexists {../tugboat.dates} { \newif \ifPrelimDraft \newcount\issueseqno \def\vol #1, #2.{\gdef\tubvol {#1}% \gdef\tubnum {#2}} \def\issyear #1.{\gdef\tubyear{#1}} \input ../tugboat.dates \setevariables [tugboat] [year=\tubyear, volume=\tubvol, number=\tubnum, page=\the\count0] } { % nothing } %D Good bye. \continueifinputfile{s-tugboat.mkiv} % \showgrid \starttext \StartArticle \StartAbstract \samplefile{bryson} \StopAbstract \dorecurse{30}{\input ward \endgraf} \page \startitemize \startitem \samplefile{ward} \stopitem \startitem \samplefile{ward} \stopitem \stopitemize \StopArticle \setvariables[tugboat][columns=yes] \StartArticle \StartAbstract \samplefile{bryson} \StopAbstract \dorecurse {30} { \samplefile{ward}\endgraf } \page \StopArticle \stoptext % >>>