From 6932ea879b43b36d023797e18b8bdcfc8cef05ba Mon Sep 17 00:00:00 2001
From: Hans Hagen <pragma@wxs.nl>
Date: Thu, 6 Aug 2020 19:42:33 +0200
Subject: 2020-08-06 18:58:00

---
 .../sources/general/magazines/mag-1105-mkiv.tex    | 186 +++++++++++++++++++++
 1 file changed, 186 insertions(+)
 create mode 100644 doc/context/sources/general/magazines/mag-1105-mkiv.tex

(limited to 'doc/context/sources/general/magazines/mag-1105-mkiv.tex')

diff --git a/doc/context/sources/general/magazines/mag-1105-mkiv.tex b/doc/context/sources/general/magazines/mag-1105-mkiv.tex
new file mode 100644
index 000000000..df1ec7e2c
--- /dev/null
+++ b/doc/context/sources/general/magazines/mag-1105-mkiv.tex
@@ -0,0 +1,186 @@
+% author    : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license   : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin    : the ConTeXt distribution
+%
+% comment   : Because this manual is distributed with TeX distributions it comes with a rather
+%             liberal license. We try to adapt these documents to upgrades in the (sub)systems
+%             that they describe. Using parts of the content otherwise can therefore conflict
+%             with existing functionality and we cannot be held responsible for that. Many of
+%             the manuals contain characteristic graphics and personal notes or examples that
+%             make no sense when used out-of-context.
+
+\ifdefined\parindentmode     \parindentmode    \plusone \fi % this will become default in lmtx
+\ifdefined\normalizelinemode \normalizelinemode\plusone \fi % this will become default in lmtx
+
+\usemodule[magazine-basic,abr-02]
+
+\usemodule[scite]
+
+\startbuffer[abstract]
+    Here is yet another short example of a feature introduced in \CONTEXT\ \LMTX.
+    It is mostly meant as teaser: maybe users have additional demands for this
+    low level mechanisn.
+\stopbuffer
+
+\setuplayout
+  [backspace=20mm,
+   topspace=10mm]
+
+\startdocument
+  [title={Playing with boxes, a teaser},
+   author={Hans Hagen},
+  %affiliation=PRAGMA ADE,
+   date=August 2020,
+   number=1105 LMTX]
+
+When a paragraph is typeset in a vertical box, we get a bunch of lines pasted
+together. If you want to change something in the result, you can disassemble that
+box in detailed ways (in \LUA) but maybe it's something simple that you like to
+do. For that we have a an interface to the lines on such a box. We start with a
+few settings:
+
+\starttyping[option=TEX]
+\parindentmode    \plusone
+\normalizelinemode\plusone
+\stoptyping
+
+These two settings will become default in \CONTEXT\ \LMTX, but here we need them in
+order to show some properties of boxes.
+
+\startbuffer[sample]
+\setbox0\ruledvbox \bgroup
+    \leftskip         10pt
+    \rightskip        20pt
+    \hangindent       40pt
+    \hangafter         2
+    \parindent         5pt
+    \parfillleftskip  80pt plus 1 fill
+    \parfillrightskip 40pt plus 1 fill
+    \input tufte
+\egroup
+\stopbuffer
+
+\typebuffer[sample][option=TEX]
+
+This box has a bit weird setup but we want to demonstrate something to it's okay:
+
+\startlinecorrection
+    \getbuffer[sample] \box0
+\stoplinecorrection
+
+
+In case you wonder, the left and right parskips are a \MKIV\ thing and supported
+in \LMTX\ in a more advanced way. The left one can be used to push the last line
+to the right.
+
+\startbuffer[overview]
+\dorecurse {\boxlines 0} {
+    [#1] (%
+        \the\boxlinewd 0 #1, \the\boxlineht 0 #1, \the\boxlinedp 0 #1,
+        \the\boxlinels 0 #1, \the\boxliners 0 #1,
+        \the\boxlinelh 0 #1, \the\boxlinerh 0 #1,
+        \the\boxlinein 0 #1, \the\boxlinelp 0 #1, \the\boxlinerp 0 #1
+    ) \par
+}
+\stopbuffer
+
+\typebuffer[overview][option=TEX]
+
+\getbuffer[sample]
+
+\startpacked \tt \txx
+    \getbuffer[overview]
+\stoppacked
+
+The properties of a line are: width, height and depth, left and right skip,
+applied left and right hang, indentation (of the first line), left and right
+filler of the last line. You can use the commands shown as other dimensions, so
+\type {\the} is only needed when you serialize a property.
+
+Some properties can be changed (others might follow later). Here we change the
+width of line four (the equal sign is optional):
+
+\startbuffer
+\the\boxlinewd 0 4 \space& \boxlinewd 0 4 = 40pt \the\boxlinewd 0 4
+\stopbuffer
+
+\typebuffer[option=TEX]
+
+We get: \inlinebuffer . We can detach a line from the box. Here we put two lines
+in another box that gets assigned to a box register, and a third line is assigned
+to a box register as|-|is:
+
+\startbuffer
+\setbox2\ruledhbox{\copyboxline 0 2}
+\setbox4\ruledhbox{\boxline     0 4}
+\setbox6           \boxline     0 6
+\stopbuffer
+
+\typebuffer[option=TEX] \getbuffer
+
+The result is:
+
+\startbuffer
+[2] [\box2] \par
+[4] [\box4] \par
+[6] [\box6] \par
+\stopbuffer
+
+\typebuffer[option=TEX]
+
+\startlinecorrection
+    \startpacked
+        \getbuffer
+    \stoppacked
+\stoplinecorrection
+
+Next we replace an existing line by a new line:
+
+\startbuffer
+\setboxline 0 3 \hbox {\darkred \bold This is a replacement line!}
+\stopbuffer
+
+\typebuffer[option=TEX] \getbuffer
+
+The original box is now:
+
+\startlinecorrection
+\box0
+\stoplinecorrection
+
+We can repack the box with the usual \TEX\ commands: \type {\vpack {\unvbox0}}
+but here we just did a \type {\box0}.
+
+An example of a more useful application is the following. First we fill a box:
+
+\startbuffer
+\setbox\scratchbox\ruledvbox \bgroup
+    \input ward
+\egroup
+\stopbuffer
+
+\typebuffer[option=TEX] \getbuffer
+
+With little effort we can add line numbers:
+
+\startbuffer
+\ruledvbox \bgroup
+    \dorecurse {\boxlines \scratchbox} {%
+        \dontleavehmode
+        \strut
+        \llap{\hbox to 1.5em{\txx#1\hss}}\boxline \scratchbox #1\par
+    }
+}
+\stopbuffer
+
+\typebuffer[option=TEX]
+
+The result is:
+
+\startlinecorrection
+    {\forgetall \getbuffer}
+\stoplinecorrection
+
+\stopdocument
-- 
cgit v1.2.3

