% lua-widow-control % https://github.com/gucci-on-fleek/lua-widow-control % SPDX-License-Identifier: MPL-2.0+ % SPDX-FileCopyrightText: 2022 Max Chernoff \startenvironment[lwc-manual] \unprotect \mainlanguage[en] %%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Font Selection %%%%% %%%%%%%%%%%%%%%%%%%%%%%%%% \startluacode fonts.handlers.otf.addfeature { name = "emdash_kern", -- Increase sidebearings on em-dash type = "single", data = { ["—"] = { 100, 0, 200, 0 }, } } \stopluacode \definefontfeature[default][default][ protrusion=quality, expansion=quality, onum=yes, script=latn, emdash_kern=yes, trep=yes, ] \setupalign[hz, hanging] \definefontfeature[lining][onum=no,lnum=yes] \definefontfeature[allsmall][c2sc=yes, smcp=yes] \define\lining{\feature[+][lining]} \starttypescript[lwc-fonts] \definetypeface[lwc-fonts] [rm] [serif][pagella] [default] \definetypeface[lwc-fonts] [ss] [sans] [libertinus] [default] [rscale=1.07] \definetypeface[lwc-fonts] [tt] [mono] [plex] [default] [rscale=0.89] \definetypeface[lwc-fonts] [mm] [math] [pagella] [default] \stoptypescript \setupbodyfont[lwc-fonts, 11pt] \setupbodyfontenvironment[default][em=italic] %%%%%%%%%%%%%%%%%%%%%%% %%%%% Page Layout %%%%% %%%%%%%%%%%%%%%%%%%%%%% \setuppapersize[letter] \setupindenting[yes, 3em] \setupinterlinespace[2.75ex] \input lang-frq.mkxl % For \averagecharwidth \setuplayout[ width=75\averagecharwidth, backspace=\dimexpr(\paperwidth - \makeupwidth) / 2, topspace=\dimexpr\backspace - \headerheight, footerdistance=3\baselineskip, footer=\baselineskip, height=8.75in, margin=\dimexpr\backspace - \margindistance - 0.25cm, ] %%%%%%%%%%%%%%%%%%%%%%%% %%%%% PDF Settings %%%%% %%%%%%%%%%%%%%%%%%%%%%%% % PDF/UA \setupbackend[format=PDF/UA-1] \setupinteraction[state=start, focus=standard] \setuptagging[state=start] \setupstructure[state=start, method=auto] % Bookmarks \placebookmarks[section, subsection][section, subsection][number=no] \setupinteractionscreen[option=bookmark] %%%%%%%%%%%%%%%%%%%%%% %%%%% Formatting %%%%% %%%%%%%%%%%%%%%%%%%%%% \setuppagenumbering[location=footer, style=\ss\lining] \let\old@tex=\tex \def\tex#1{\expandafter\old@tex\normalexpanded{{#1}}} % Allow expansion in the \tex macro (for \allowbreak) % Acronym styling \definecharacterkerning[acronymkerning][factor=0.05] \definealternativestyle[acronymstyle][{\feature[+][allsmall]\switchtobodyfont[1.2em]\setcharacterkerning[acronymkerning]}][] \definehighlight[acronym][style=acronymstyle] \startsetups[commandtable] \setupTABLE[frame=off] \setupTABLE[column][first][roffset=1.5em] \setupTABLE[row][first][toffset=0.25ex] \stopsetups \startsetups[booktabs] \setupTABLE[each][each][frame=off] \setupTABLE[row][first][topframe=on, rulethickness=1.2bp] \setupTABLE[row][2] [topframe=on, rulethickness=0.6bp] \setupTABLE[row][last] [bottomframe=on, rulethickness=1.2bp] \setupTABLE[column][first][loffset=0.5em] \setupTABLE[column][last][roffset=0.5em] \stopsetups \setupitemize[each][ style=\lining, inbetween={\blank[quarterline]}, ] \setupcaptions[ headstyle=\ssbf\lining, style=\ss, ] \setupdelimitedtext[blockquote][ style=\ss, before=\noindentation, after={\blank[medium]} ] \define[1]\meta{\m{\langle}\italic{#1}\m{\rangle}} \define[1]\githubissue{\goto{(Issue~\##1)}[url(https://github.com/gucci-on-fleek/lua-widow-control/issues/#1)]} %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Section Commands %%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% \definecharacterkerning[titlekern][factor=0.2] \protected\def\interwordspace{\scaledfontdimen2\font} % Section \startsetups[style:section] \setcharacterkerning[titlekern] \switchtobodyfont[adventor] \WORD \bfb \feature[+][allsmall] \interwordspace=0.4em \veryraggedcenter \stopsetups \setuphead[section][ before={\blank[big, preference]}, after={\blank[medium, samepage]}, textstyle=\setups{style:section}, number=no, ] % Subsection \setuphead[subsection][ before={\blank[medium, preference]}, after=, textstyle=\ss, alternative=margintext, number=no, ] % TOC \def\secondleveltoc{subsection} \starttexdefinition protected SectionTOCcommand #1#2#3 \startcurrentlistentrywrapper % Make the whole line a link \midaligned{ % Have the title and page number "glued" to the middle \llap{\currentlistentrytitle} \hskip 1em \rlap{\color[\interactionparameter{color}]{\bf \currentlistentrypagenumber}} } \stopcurrentlistentrywrapper \par \nobreak \setbox0=\vbox{\framedtext[ % Align the subsection titles under the section title frame=off, width=\dimexpr\textwidth/2 - 0.5em, align={flushright, wide}, offset=none, toffset=-\lineheight, ]{ \global\firstsubsectiontrue \placelist[\secondleveltoc][criterium=local] }} \iffirstsubsection \blank[quarterline] % No subsections here \else \box0 \fi \goodbreak \stoptexdefinition \newif\iffirstsubsection \define\tocspace{\hskip 0.5em plus 0.5em minus 0.2em\relax} \unexpanded\def\toc_link#1{% \startcurrentlistentrywrapper% \hbox{#1}% \stopcurrentlistentrywrapper% } \starttexdefinition protected SubsectionTOCcommand #1#2#3 \ss\itx \dontleavehmode \iffirstsubsection \global\firstsubsectionfalse \toc_link{#2} \else \discretionary{}{ \toc_link{#2} % No interpunct if the line splits here }{ \tocspace{\bfa·}\tocspace\toc_link{#2} } \fi \stoptexdefinition \setupcombinedlist[content][list=section] \setuplist[section][ alternative=command, command=\SectionTOCcommand, ] \setuplist[subsection][ alternative=command, command=\SubsectionTOCcommand, ] %%%%%%%%%%%%%%%%%%%%%%% %%%%% Title Block %%%%% %%%%%%%%%%%%%%%%%%%%%%% \setupdocument[ title={}, author={}, version={}, ctan={}, github={}, ] \startluacode local function strip_url(str) local url_table = url.hashed(str) url_table.fragment = nil url_table.scheme = nil url_table.authority = url_table.authority:gsub("^www%.", "") tex.sprint(-2, url.decode(url.construct(url_table))) end interfaces.implement { name = "strip_url", actions = strip_url, arguments = "1 string" } \stopluacode \define[1]\strippedurl{% \goto{\tt\hyphenatedurl{\clf_strip_url{#1}}}[url(#1)] } \startsetups[titleblock] \startalignment [middle] \begingroup \setups[style:section]\bfc \documentvariable{title} \par \endgroup \blank[big] \begingroup \ssa\lining \documentvariable{author} \blank[medium] v\,\documentvariable{version} \par \endgroup \dontleavehmode \blackrule[depth=-0.25\baselineskip, height=\dimexpr0.25\baselineskip + 0.4pt, width=8em] \par \doifdocumentvariable{ctan}{ \strippedurl{\documentvariable{ctan}} } \doifdocumentvariable{github}{ \strippedurl{\documentvariable{github}} } \blank[big] \noindentation \stopalignment \stopsetups \startsetups[document:start] \setup[titleblock] \setupinteraction[ title=\documentvariable{title}, author=\documentvariable{author}, ] \stopsetups %%%%%%%%%%%%%%%%%%%%%%%% %%%%% Bibliography %%%%% %%%%%%%%%%%%%%%%%%%%%%%% \usebtxdefinitions[apa] \resetsetups[apa:list:sameauthor] \setupbtx[apa:list][ stopper:initials=, separator:initials=\btxnbsp, interaction=start, ] \setupbtxlabeltext[en][ apa:Retrieved={} ] \setupbtxrendering[apa][ numbering=yes, sorttype=used, ] \setupbtx[apa:cite][alternative=num] \defineshift[citeshift][ method=0, dy=-1, unit=ex, continue=yes, style=\tfx\lining, ] \setupbtx[apa:cite:num][ command=\citeshift, left=, right=, separator:2=\citeshift{,\,}, separator:3=\citeshift{--} ] \setupbtxlist[apa][ alternative=a, before=, after={\blank[quarterline]}, style=\lining, margin=0pt, width=1.5em, ] \starttexdefinition mutable protected btx:apa:url \strippedurl{\clf_btxflush{\currentbtxdataset}{\currentbtxtag}{url} } \stoptexdefinition \define[1]\lwc_doi{\goto{\acronym{DOI:}\,\tt\hyphenatedurl{#1}}[url(https://dx.doi.org/#1)]} \starttexdefinition mutable protected btx:apa:doi \lwc_doi{\clf_btxflush{\currentbtxdataset}{\currentbtxtag}{doi}} \stoptexdefinition %%%%%%%%%%%%%%%% %%% Markdown %%% %%%%%%%%%%%%%%%% \startluacode sandbox.registerrunner { name = "pandoc", program = "pandoc", method = "resultof", template = "--from markdown --to context %filename%", checkers = { filename = "readable", path = "string", } } interfaces.implement { name = "markdownInput", public = true, arguments = { "string" }, actions = function (str) -- local out = sandbox.getrunner("pandoc"){ -- filename = str, -- } -- -- context(out) end } \stopluacode \protect \stopenvironment