% 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-documentation] \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.1em]\setcharacterkerning[acronymkerning]}][] \definehighlight[acronym][style=acronymstyle] \startuniqueMPgraphic{warning} path p; p := roundedsquare(OverlayWidth, OverlayHeight, 0.25cm); fill p withcolor black; draw p anglestriped (1, 45, 20) withpen pencircle scaled 10pt withcolor yellow; fill p blownup -0.125cm withcolor white; draw p blownup -0.125cm; setbounds currentpicture to boundingbox OverlayBox; \stopuniqueMPgraphic \defineoverlay[warning][\useMPgraphic{warning}] \define[1]\warning{ \blank[line] \midaligned{\framed[ frame=off, background=warning, backgroundoffset=0.25cm, width=\dimexpr\hsize-4em, align=flushleft, ]{% {\ssa\bf Warning} #1 }} \blank[line] } \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] \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 \protect \stopenvironment