summaryrefslogtreecommitdiff
path: root/macros/luatex/generic/lua-widow-control/tb133chernoff-widows-figure.ctx
diff options
context:
space:
mode:
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.ctx166
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