diff options
Diffstat (limited to 'macros/luatex/generic/lua-widow-control/tb133chernoff-widows-figure.ctx')
-rw-r--r-- | macros/luatex/generic/lua-widow-control/tb133chernoff-widows-figure.ctx | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/macros/luatex/generic/lua-widow-control/tb133chernoff-widows-figure.ctx b/macros/luatex/generic/lua-widow-control/tb133chernoff-widows-figure.ctx new file mode 100644 index 0000000000..e61637e2a8 --- /dev/null +++ b/macros/luatex/generic/lua-widow-control/tb133chernoff-widows-figure.ctx @@ -0,0 +1,166 @@ +% lua-widow-control +% https://github.com/gucci-on-fleek/lua-widow-control +% SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+ +% SPDX-FileCopyrightText: 2022 Max Chernoff + +\startbuffer[demo-text] + \definepapersize[smallpaper][ + width=6cm, + height=8.3cm + ] + \setuppapersize[smallpaper] + + \def\lwc/{\sans{lua-\allowbreak widow-\allowbreak control}} + \def\Lwc/{\sans{lua-\allowbreak widow-\allowbreak control}} + + \setupbodyfont[9pt] + \setupindenting[yes, 2em] + \setupalign[tolerant] + + \definecolor[midlightgray][s=0.75] + \definepalet[layout][grid=midlightgray] + \showgrid[nonumber, none, lines] + + \definefontfeature[default][default][expansion=quality,protrusion=quality] + + \usetypescript[modern-base] + \setupbodyfont[reset,modern] + + \setupalign[hz,hanging,tolerant] + + \setuplanguage[en][spacing=packed] + + \setuplayout[ + topspace=0.1cm, + backspace=0.1cm, + width=middle, + height=\dimexpr 21\baselineskip + 1.1pt, + header=0pt, + footer=0pt, + ] + + \starttext + \Lwc/ can remove most widows and orphans from a document, \emph{without} + stretching any glue or shortening any pages. + + \ifx\uselooseness\undefined\else\uselooseness\fi It does so by automatically lengthening a paragraph on a page where a + widow or orphan would otherwise occur. While \TeX{} breaks paragraphs + into their natural length, \lwc/ is breaking the paragraph 1~line + longer than its natural length. \TeX{}'s paragraph is output to the + page, but \lwc/'s paragraph is just stored for later. When a widow or + orphan occurs, \lwc/ can take over. It selects the previously-saved + paragraph with the least badness; then, it replaces \TeX{}'s paragraph + with its saved paragraph. This increases the text block height of the + page by 1~line. + + Now, the last line of the current page can be pushed to the top of the + next page. This removes the widow or the orphan without creating any + additional work. + \stoptext + \stoptext +\stopbuffer +\savebuffer[list=demo-text] + +\startbuffer[shorten] + \parskip=0pt + \input tb133chernoff-widows-figure-demo-text.tmp +\stopbuffer + +\startbuffer[shorten-code] + \parskip=0pt + \clubpenalty=10000 + \widowpenalty=10000 +\stopbuffer + +\startbuffer[stretch] + \parskip=0pt plus 1fill + \input tb133chernoff-widows-figure-demo-text.tmp +\stopbuffer + +\startbuffer[stretch-code] + \parskip=0pt plus 1fill + \clubpenalty=10000 + \widowpenalty=10000 +\stopbuffer + +\startbuffer[ignore] + \startsetups[*default] + \clubpenalty=0 + \widowpenalty=0 + \displaywidowpenalty=0 + \interlinepenalty=0 + \brokenpenalty=0 + \stopsetups + + \setups[*default] + + \input tb133chernoff-widows-figure-demo-text.tmp +\stopbuffer + +\startbuffer[ignore-code] + \parskip=0pt + \clubpenalty=0 + \widowpenalty=0 +\stopbuffer + +\startbuffer[lwc] + \def\uselooseness{\looseness=1} + \input tb133chernoff-widows-figure-demo-text.tmp +\stopbuffer + +% We're pretending that we're using LaTeX for the demo since that's what +% 99% of users will be using. +\startbuffer[lwc-code] + \usepackage{lua-widow-control} +\stopbuffer + +\setupbodyfont[10pt] + +\setupbackend[format=PDF/A-1b:2005] % Force PDF version <1.5 + +\startTEXpage[ + align=normal, + width=39pc, + offset=0pt, +] + \veryraggedcenter + \setupTABLE[row][1, 5][style=\bfa, align=middle, offset=0pt] + \setupTABLE[row][5][toffset=2ex] + \setupTABLE[frame=off, distance=5em] + \startTABLE + \NC Ignore + \NC Shorten + \NC\NR + + \NC \typesetbuffer[ignore][frame=on, page=1, scale=925] + \NC \typesetbuffer[shorten][frame=on, page=1, scale=925] + \NC\NR + + \NC \clip[height=1cm]{\typesetbuffer[ignore] + [frame=on, page=2, scale=925]} + \NC \clip[height=1cm]{\typesetbuffer[shorten] + [frame=on, page=2, scale=925]} + \NC\NR + + \NC \typebuffer[ignore-code] + \NC \typebuffer[shorten-code] + \NC\NR + + \NC Stretch + \NC \sans{lua-widow-control} \NC\NR + + \NC \typesetbuffer[stretch][frame=on, page=1, scale=925] + \NC \typesetbuffer[lwc][frame=on, page=1, scale=925] + \NC\NR + + \NC \clip[height=1cm]{\typesetbuffer[stretch] + [frame=on, page=2, scale=925]} + \NC \clip[height=1cm]{\typesetbuffer[lwc] + [frame=on, page=2, scale=925]} + \NC\NR + + \NC \typebuffer[stretch-code] + \NC \typebuffer[lwc-code] + \NC\NR + \stopTABLE +\stopTEXpage |