summaryrefslogtreecommitdiff
path: root/doc/context/presentations/bachotex/2017/bachotex-2017-variablefonts.tex
diff options
context:
space:
mode:
Diffstat (limited to 'doc/context/presentations/bachotex/2017/bachotex-2017-variablefonts.tex')
-rw-r--r--doc/context/presentations/bachotex/2017/bachotex-2017-variablefonts.tex500
1 files changed, 500 insertions, 0 deletions
diff --git a/doc/context/presentations/bachotex/2017/bachotex-2017-variablefonts.tex b/doc/context/presentations/bachotex/2017/bachotex-2017-variablefonts.tex
new file mode 100644
index 000000000..08050a57d
--- /dev/null
+++ b/doc/context/presentations/bachotex/2017/bachotex-2017-variablefonts.tex
@@ -0,0 +1,500 @@
+% language=uk
+
+\setuppapersize
+ [S6]
+
+\setupbackgrounds
+ [page]
+ [background=color,
+ backgroundcolor=darkblue]
+
+\setuplayout
+ [backspace=24pt,
+ topspace=20pt,
+ bottomspace=8pt,
+ width=middle,
+ height=middle,
+ footerdistance=8pt,
+ footer=8pt,
+ header=0pt]
+
+\setupcolors
+ [textcolor=white]
+
+\setupbodyfont
+ [dejavu,14.4pt]
+
+\definecolor[trace:o] [s=1]
+\definecolor[trace:r] [s=1]
+\definecolor[trace:do][s=1]
+\definecolor[trace:dr][s=1]
+
+\usemodule[abr-03]
+
+\definefontfeature[noligatures][liga=no]
+
+\setuphead
+ [section]
+ [page=yes,
+ style=\bfb,
+ after={\blank[3*medium]}]
+
+\setuphead
+ [subsection]
+ [page=no,
+ style=\bf\addfeature{noligatures},
+ before={\blank[3*medium]},
+ after={\blank}]
+
+\setupfooter
+ [strut=no,
+ style=\bf]
+
+\startuseMPgraphic{pagenumber}
+ if LastPageNumber > 0 :
+ draw outlinetext.f
+ (decimal RealPageNumber)
+ (withcolor "darkgray")
+ xysized ((RealPageNumber/LastPageNumber) * TextWidth/2,FooterHeight) ;
+ fi ;
+\stopuseMPgraphic
+
+\setupfootertexts
+ [\useMPgraphic{pagenumber}]
+
+\startdocument
+ [title={Variable Fonts},
+ subtitle={we're ready for them},
+ author={Hans Hagen},
+ occasion={BachoTUG 2017}]
+
+\startstandardmakeup
+ \vskip32pt
+ \bfd \setupinterlinespace
+ \documentvariable{title}
+ \crlf
+ \bfb \setupinterlinespace
+ \vskip12pt
+ \documentvariable{subtitle}
+ \vfill
+ \bfb \setupinterlinespace
+ \documentvariable{author}
+ \crlf
+ \documentvariable{occasion}
+\stopstandardmakeup
+
+\startsubject[title=A Summary]
+
+\startitemize
+\startitem
+ {\bf the macro package's view:} just a font but with many possible variations
+ in shapes (width, weight, slope, etc) and therefore a bit more complex user
+ interface
+\stopitem
+\startitem
+ {\bf the engine's view:} an abstraction not different from other fonts but
+ that needs a special treatment in the backend
+\stopitem
+\startitem
+ {\bf the viewer's view:} a font to be displayed like any other with outlines
+ in cff of ttf format
+\stopitem
+\startitem
+ {\bf the user's view:} an opentype font with possibly surprising shapes of
+ which you need to know a bit more than usual if you want to profit from it
+\stopitem
+\stopitemize
+
+So, in practice, for most \TEX\ users it's just a font that has to be supported by
+\TEX\ and friends.
+
+\stopsubject
+
+\startsubject[title=Starting point]
+
+\startitemize
+\startitem
+ The OpenType 1.8 specification at the MicroSoft website defined the extra
+ tables and explains bits and pieces.
+\stopitem
+\startitem
+ There a few fonts that have relevant tables (not all) and implement variants
+ as well as features.
+\stopitem
+\startitem
+ There are some posts on the internet that show a bit about axis and other things
+ that go on in these fonts.
+\stopitem
+\startitem
+ Luckily we have ways (in \CONTEXT) to explore what goes on in these fonts and
+ how they could look.
+\stopitem
+\startitem
+ Condition: no tricks, no fuzzy heuristics, just the specification should be
+ enough.
+\stopitem
+\stopitemize
+
+\stopsubject
+
+\startsubject[title=Implementation steps]
+
+\startitemize
+\startitem
+ First try to render variants in order to see what we're dealing with. This was not too
+ hard (starting with cff) because we have already virtual font support.
+\stopitem
+\startitem
+ Next try to load the relevant tables and figure out what these deltas and such really
+ mean and how axis and regions and \unknown\ have to be applied.
+\stopitem
+\startitem
+ Try to make it all work on a real piece of text, so not only shapes but also features
+ and dimensions.
+\stopitem
+\startitem
+ Finally make sure that the font can get embedded as a normal font and not as inline
+ (tagged) graphic.
+\stopitem
+\startitem
+ Also, try to generalize the helpers and methods in such ways that we can experiment
+ with additional tricks (after all, \TEX\ is about control).
+\stopitem
+\startitem
+ Todo: once there are more fonts (with the right data tables), check the code with the
+ specification.
+\stopitem
+\stopitemize
+
+\stopsubject
+
+\setupTABLE[c][1][style=tttf,align={flushleft,lohi}]
+
+\startsubject[title=Adobe Variable Font Prototype (cff)]
+
+\unexpanded\def\SampleFont#1#2% weight / contrast
+ {\definedfont[name:adobevariablefontprototype#1*default at 32pt]It looks like this!}
+
+\bTABLE[distance=2em,frame=off]
+\bTR \bTD extralight 0/0 \eTD \bTD \SampleFont {extralight} \eTD \eTR
+\bTR \bTD light 150/0 \eTD \bTD \SampleFont {light} \eTD \eTR
+\bTR \bTD regular 394/0 \eTD \bTD \SampleFont {regular} \eTD \eTR
+\bTR \bTD semibold 600/0 \eTD \bTD \SampleFont {semibold} \eTD \eTR
+\bTR \bTD bold 824/0 \eTD \bTD \SampleFont {bold} \eTD \eTR
+\bTR \bTD black high contrast 1000/100 \eTD \bTD \SampleFont {blackhighcontrast} \eTD \eTR
+\bTR \bTD black medium contrast 1000/50 \eTD \bTD \SampleFont {blackmediumcontrast} \eTD \eTR
+\bTR \bTD black 1000/0 \eTD \bTD \SampleFont {black} \eTD \eTR
+\eTABLE
+
+\stopsubject
+
+% \starttyping
+% \definefont
+% [MyLightFont]
+% [name:adobevariablefontprototypelight*default]
+% \stoptyping
+
+\unexpanded\def\SampleFont#1#2% weight / width
+ {\definedfont[name:avenirnextvariable#1*default at 32pt]It looks like this!}
+
+\startsubject[title=Avenir Next Variable (ttf)]
+
+\bTABLE[distance=2em,frame=off]
+\bTR \bTD regular 400/100 \eTD \bTD \SampleFont {regular} \eTD \eTR
+\bTR \bTD medium 500/100 \eTD \bTD \SampleFont {medium} \eTD \eTR
+\bTR \bTD bold 700/100 \eTD \bTD \SampleFont {bold} \eTD \eTR
+\bTR \bTD heavy 900/100 \eTD \bTD \SampleFont {heavy} \eTD \eTR
+\bTR \bTD condensed 400/75 \eTD \bTD \SampleFont {condensed} \eTD \eTR
+\bTR \bTD medium condensed 500/75 \eTD \bTD \SampleFont {mediumcondensed} \eTD \eTR
+\bTR \bTD bold condensed 700/75 \eTD \bTD \SampleFont {boldcondensed} \eTD \eTR
+\bTR \bTD heavy condensed 900/75 \eTD \bTD \SampleFont {heavycondensed} \eTD \eTR
+\eTABLE
+
+\stopsubject
+
+\startbuffer[both]
+\vfill
+\startMPcode
+ draw outlinetext.b
+ ("\getbuffer[a]")
+ (withcolor "white")
+ (withcolor "red" withpen pencircle scaled 1/10)
+ xsized .9TextWidth ;
+\stopMPcode
+\vfill
+\startMPcode
+ draw outlinetext.b
+ ("\getbuffer[b]")
+ (withcolor "white")
+ (withcolor "red" withpen pencircle scaled 1/10)
+ xsized .9TextWidth ;
+\stopMPcode
+\vfill
+\startMPcode
+ draw outlinetext.b
+ ("\getbuffer[c]")
+ (withcolor "white")
+ (withcolor "red" withpen pencircle scaled 1/10)
+ xsized .90TextWidth ;
+\stopMPcode
+\vfill
+\stopbuffer
+
+\startbuffer[fill]
+\vfill
+\startMPcode
+ draw outlinetext.f
+ ("\getbuffer[a]")
+ (withcolor "white")
+ xsized .9TextWidth ;
+\stopMPcode
+\vfill
+\startMPcode
+ draw outlinetext.f
+ ("\getbuffer[b]")
+ (withcolor "white")
+ xsized .9TextWidth ;
+\stopMPcode
+\vfill
+\startMPcode
+ draw outlinetext.f
+ ("\getbuffer[c]")
+ (withcolor "white")
+ xsized .9TextWidth ;
+\stopMPcode
+\vfill
+\stopbuffer
+
+\startbuffer[draw]
+\vfill
+\startMPcode
+ draw outlinetext.d
+ ("\getbuffer[a]")
+ (withcolor "white" withpen pencircle scaled 1/10)
+ xsized .9TextWidth ;
+\stopMPcode
+\vfill
+\startMPcode
+ draw outlinetext.d
+ ("\getbuffer[b]")
+ (withcolor "white" withpen pencircle scaled 1/10)
+ xsized .9TextWidth ;
+\stopMPcode
+\vfill
+\startMPcode
+ draw outlinetext.d
+ ("\getbuffer[c]")
+ (withcolor "white" withpen pencircle scaled 1/10)
+ xsized .9TextWidth ;
+\stopMPcode
+\vfill
+\stopbuffer
+
+\startbuffer[overlay]
+\startoverlay{%
+\startMPcode
+ draw outlinetext.d
+ ("\getbuffer[a]")
+ (withcolor "green" withtransparency (3,0.5) withpen pencircle scaled 1/10)
+ xsized .9TextWidth ;
+\stopMPcode
+}{%
+\startMPcode
+ draw outlinetext.d
+ ("\getbuffer[b]")
+ (withcolor "yellow" withtransparency (3,0.5) withpen pencircle scaled 1/10)
+ xsized .9TextWidth ;
+\stopMPcode
+}{%
+\startMPcode
+ draw outlinetext.d
+ ("\getbuffer[c]")
+ (withcolor "red" withtransparency (3,0.5) withpen pencircle scaled 1/10)
+ xsized .9TextWidth ;
+\stopMPcode
+}
+\stopoverlay
+\stopbuffer
+
+\startbuffer[a]
+\definedfont[name:adobevariablefontprototypeextralight]bachotex%
+\stopbuffer
+
+\startbuffer[b]
+\definedfont[name:adobevariablefontprototypelight]bachotex%
+\stopbuffer
+
+\startbuffer[c]
+\definedfont[name:adobevariablefontprototypebold]bachotex%
+\stopbuffer
+
+\startsubject[title=Metafontisch overlap (1)]
+ \getbuffer[both]
+\stopsubject
+
+\startbuffer[a]
+\definefontfeature[whatever][axis={weight:50}]%
+\definedfont[name:adobevariablefontprototype*whatever]bachotex%
+\stopbuffer
+
+\startbuffer[b]
+\definefontfeature[whatever][axis={weight:300}]%
+\definedfont[name:adobevariablefontprototype*whatever]bachotex%
+\stopbuffer
+
+\startbuffer[c]
+\definefontfeature[whatever][axis={weight:700}]%
+\definedfont[name:adobevariablefontprototype*whatever]bachotex%
+\stopbuffer
+
+\startsubject[title=Metafontisch overlap (2)]
+ \getbuffer[both]
+\stopsubject
+\startsubject[title=Fills hide the details]
+ \getbuffer[fill]
+\stopsubject
+\startsubject[title=Unsuitable outlines]
+ \getbuffer[draw]
+\stopsubject
+
+\startbuffer[a]
+\definefontfeature[whatever][axis={weight:100,contrast:0}]%
+\definedfont[name:adobevariablefontprototype*whatever]bachotex%
+\stopbuffer
+
+\startbuffer[b]
+\definefontfeature[whatever][axis={weight:200,contrast:20}]%
+\definedfont[name:adobevariablefontprototype*whatever]bachotex%
+\stopbuffer
+
+\startbuffer[c]
+\definefontfeature[whatever][axis={weight:200,contrast:50}]%
+\definedfont[name:adobevariablefontprototype*whatever]bachotex%
+\stopbuffer
+
+\startsubject[title=Stay within specification]
+ \getbuffer[draw]
+\stopsubject
+
+\startsubject[title=Subjective choices]
+ \getbuffer[fill]
+\stopsubject
+
+\startbuffer[a]
+\definefontfeature[whatever][axis={weight:100,contrast:0}]%
+\definedfont[name:adobevariablefontprototype*whatever]tex%
+\stopbuffer
+
+\startbuffer[b]
+\definefontfeature[whatever][axis={weight:200,contrast:20}]%
+\definedfont[name:adobevariablefontprototype*whatever]tex%
+\stopbuffer
+
+\startbuffer[c]
+\definefontfeature[whatever][axis={weight:200,contrast:50}]%
+\definedfont[name:adobevariablefontprototype*whatever]tex%
+\stopbuffer
+
+\startsubject[title=Difficult choices]
+ \getbuffer[overlay]
+\stopsubject
+
+\startsubject[title=Definitions (1)]
+
+\startbuffer
+\definefontfeature
+ [default:shaped]
+ [default]
+ [axis={width:10}]
+
+\definefont
+ [SomeFont]
+ [file:avenirnextvariable*default:shaped]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\start \setupinterlinespace \showglyphs \showfontkerns \SomeFont \input zapf \wordright{Hermann Zapf}\par \stop
+
+\stopsubject
+
+\startsubject[title=Definitions (2)]
+
+\startbuffer
+\definefontfeature
+ [default:shaped]
+ [default]
+ [axis={width:100,weight=200}]
+
+\definefont
+ [SomeFont]
+ [file:avenirnextvariable*default:shaped @ 12pt]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\start \setupinterlinespace \showglyphs \showfontkerns \SomeFont \input zapf \wordright{Hermann Zapf}\par \stop
+
+\stopsubject
+
+\startsubject[title=Transformations]
+
+\subsubject{correction:}
+
+\startformula
+ x^\prime = x
+ + s_{x1} \cdot x_1
+ + s_{x2} \cdot x_2
+ + s_{x3} \cdot x_3
+ + s_{x4} \cdot x_4
+\stopformula
+
+\startformula
+ y^\prime = y
+ + s_{y1} \cdot y_1
+ + s_{y2} \cdot y_2
+ + s_{y3} \cdot y_3
+ + s_{y4} \cdot y_4
+\stopformula
+
+\subsubject{internal cff:}
+
+\starttyping
+1 <setvstore>
+120 [10 -30 40 -60] 1 <blend> ... <operator>
+100 120 [10 -30 40 -60] [30 -10 -30 20] 2 <blend> .. <operator>
+\stoptyping
+
+\subsubject{external ttf:}
+
+\starttyping
+apply x deltas [10 -30 40 -60] to x 120
+apply y deltas [30 -10 -30 20] to y 100
+\stoptyping
+
+\stopsubject
+
+\startsubject[title=Follow up]
+
+\startitemize
+\startitem
+ Performance is quite okay because we cache instances. I might come up with an
+ alternative way but there is not much to gain.
+\stopitem
+\startitem
+ Once fonts show up alternative interfaces to axis and scaling can be explored
+ and provided.
+\stopitem
+\startitem
+ I will look into ways to do all the backend font code in \CONTEXT\ in \LUA\
+ (easier to update and more flexible).
+\stopitem
+\startitem
+ Luigi and I will play with variable fonts defined in the traditional meta tools
+ that come with \TEX.
+\stopitem
+\stopitemize
+
+\stopsubject
+
+\stopdocument