summaryrefslogtreecommitdiff
path: root/doc/context/sources/general/fonts/fonts/fonts-math.tex
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2019-05-29 21:10:47 +0200
committerContext Git Mirror Bot <phg@phi-gamma.net>2019-05-29 21:10:47 +0200
commite2658addf306f729945c184e46f98df39dd7026c (patch)
tree0d4b3ec934773cc4e33fa88eda5a8041be2ec36b /doc/context/sources/general/fonts/fonts/fonts-math.tex
parent8b678f473da7b81842dbc13b50c6303991570521 (diff)
downloadcontext-e2658addf306f729945c184e46f98df39dd7026c.tar.gz
2019-05-29 19:20:00
Diffstat (limited to 'doc/context/sources/general/fonts/fonts/fonts-math.tex')
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-math.tex1093
1 files changed, 0 insertions, 1093 deletions
diff --git a/doc/context/sources/general/fonts/fonts/fonts-math.tex b/doc/context/sources/general/fonts/fonts/fonts-math.tex
deleted file mode 100644
index 766204937..000000000
--- a/doc/context/sources/general/fonts/fonts/fonts-math.tex
+++ /dev/null
@@ -1,1093 +0,0 @@
-% language=uk
-
-% todo:
-
-% \starttext
-% \setupbodyfont[cambria]
-% \setupmathematics[kernpairs=yes]
-% $abcd$ % 𝑎𝑏
-% \stoptext
-%
-% kernpairs = {
-% [0x1D44E] = {
-% [0x1D44F] = 1000, -- 𝑎𝑏 demo
-% }
-% },
-
-\startcomponent fonts-math
-
-\environment fonts-environment
-
-\startchapter[title=Math][color=darkmix-3]
-
-\startsection[title=Introduction]
-
-As one can expect, math support in \CONTEXT\ is to some extend modelled after
-what plain \TEX\ provides, plus what was later decided to be standard. This
-mostly concerns the way fonts behave and what names are used to access glyphs or
-special constructs. It means that when you come from another macro package you
-can stick to coding math the way you did before, at least the basic coding. In
-addition to this, \CONTEXT\ gives control over fonts, structure and rendering and
-most of that was either driven by personal need or user demand. To be honest,
-many of the options are probably of not much interest to the average user.
-
-As we focus on fonts we will only touch this aspect of math here. Right from when
-we started with developing \LUATEX, cleaning op the math part of \CONTEXT\ was
-part of the game. Some primitives were added that would make it possible to avoid
-unnecessary complex macros to get certain glyphs rendered, like radicals, accents
-and extensibles. This was made easy because we also support \OPENTYPE\ math and
-because we knew that eventually the Latin Modern and Gyre fonts would also
-support \OPENTYPE. In order to move forward and get rid of traditional eight bit
-fonts \CONTEXT\ \MKIV\ can construct a virtual \OPENTYPE\ font from traditional
-math fonts. It makes not much sense to discuss that here as by now this method is
-only provided for reasons of compatibility and a reference to the past. As a lot
-of time went into this it will always stay around if only to remind us of what
-we went through to get where we are now.
-
-\stopsection
-
-\startsection[title=\UNICODE\ math]
-
-Due to the limited amount of glyphs in a \TYPEONE\ font a macro package has to
-jump through loops in order to get traditional \TEX\ engines behave well. As a
-practical consequence these fonts are often a mixture of characters, symbols,
-punctuation and snippets that make up larger shapes. The font dimensions in these
-files have often special meanings too.
-
-This has all changed considerably with math being part of \UNICODE. It was however
-\MICROSOFT\ where the real action took place: the development of the first font that
-combined \UNICODE\ with \OPENTYPE\ technology. The Cambria font can be considered
-the benchmark for fonts that surfaced later. The characteristic of a math font are
-the following:
-
-\startitemize[packed]
- \startitem All math alphabets are present: latin as well as greek, in regular,
- italic, bold, fraktur and script variants as well as some combinations of these. \stopitem
- \startitem The symbols that make sense are present (read: the more obscure shapes
- can be omited). \stopitem
- \startitem For the characters that make sense, there are two variants that render well
- at smaller sizes: script and scriptscript. In the font they have the same size but
- the application will scale them down. This feature is named \type {ssty}. \stopitem
- \startitem Characters that can extend horizontally (for instance accents and arrows) or vertically
- (like radicals and fences) have associated larger variants and carries information about
- how to grow indefinitely. \stopitem
- \startitem There is a whole lot of special math dimensions. Most of the ones
- already used in \TEX\ are present. \stopitem
- \startitem Some glyphs come in variants in order to please special usage. There
- can also be variants for script or fraktur alphabets. \stopitem
-\stopitemize
-
-This means that in practice an \OPENTYPE\ math font is quite large. We easily
-have thousands of glyphs. It also means that creating such a font involves some
-expertise and this is one of the reasons why \TEX\ usergroups have joined forces
-in developing a suite of fonts. There are also other initiatives in the \TEX\
-community, of which Xits is an example. \footnote {This is a useable
-variant of Stix fonts with proper math features, some extra glyphs and
-experimental right||to||left shapes.} The well known Lucida Bright math font
-package has also been upgraded to a set of \OPENTYPE\ math fonts.
-
-The fact that there are not that many math fonts out there has a positive side as
-well: \CONTEXT\ comes with them pre|-|configured. Because during the development
-of \LUATEX\ we needed to have at least a couple of fonts for testing, and because
-it makes no sense to waste time on traditional fonts, the Latin Modern, Palatino,
-Times and a few more fonts were (and still are) provided as virtual \UNICODE\
-fonts.
-
-In a regular text font, what you key in is what you get out. So, when you've
-chosen a font with an italic shape, you get italic shapes, even if the smallcaps
-feature is enabled. In math, if you use the right unicodes you also get the shape
-you expect. Because in this case italic shapes are situated in one of the
-alphabets you explicitly choose a rendering. You can enter the right codepoints
-directly, so for instance if you enter \UNICODE\ character \type {U+1D434} you
-will get \mathematics {\utfchar {"1D434}}. In practice something like \type {$\bi
-A$} should also give that character if only because that is what we have been
-doing for over three decades. This means that the engine has to map a regular
-\type {A} onto the bold italic alphabet. In a traditional approach you will use
-math families for this, but in \CONTEXT\ \MKIV\ we simply use one font and one
-family and let the \MKIV\ machinery do the rest.
-
-In text mode we switch fonts styles in the following way:
-
-\startbuffer
-regular {\it italic} {\bf bold} {\bi bold italic} and so on
-\stopbuffer
-
-\typebuffer
-
-The three commands shown here are shortcuts for font switches. This input is
-converted into an internal representation and after whatever manipulations
-are applied end up as:
-
-\blank \getbuffer \blank
-
-If we look at what fonts we end up with we get:
-
-\blank \markfonts{\getbuffer} \blank
-
-Now lets do the same in math mode:
-
-\startbuffer
-$regular {\it italic} {\bf bold} {\bi bold italic} and so on$
-\stopbuffer
-
-\typebuffer
-
-This time we get a different result:
-
-\blank \getbuffer \blank
-
-If again we analyze the fonts you see this:
-
-\blank \markfonts{\getbuffer} \blank
-
-All glyphs come from the same font. Instead of regular we get italic simply because
-math characters are italic by nature. The two character style switches are not
-really font switches but just make sure that the given input is mapped onto the
-right alphabet.
-
-A traditional approach using \TYPEONE\ fonts is to use a so called math family for
-each alphabet. In that case each alphabet maps one||to||one onto the font: when
-we switch to a bold family we just take the glyph that sits in that slot. In \MKIV\
-we have all characters in one family so behind the screens a given character is
-remapped.
-
-Now take a look at the following example:
-
-\startbuffer
-$text^{script^{scriptscript}}$
-\stopbuffer
-
-\typebuffer
-
-This renders to this, with the characters marked by font:
-
-\blank \markfonts{\getbuffer} \blank
-
-This time we have three different fonts: one for each of the three math sizes.
-But this representation is not entirely honest, because indeed we have three font
-instances for math, but the glyphs come from the same \OPENTYPE\ math font. We
-just load the same font three times, once for each size. In fact we load the
-font once, but use three copies, scaled accordingly to the relative scale the
-font prescribes.
-
-There is a whole bunch of commands to choose specific characters in math mode
-using a regular input. These are state switching commands.
-
-\def\SampleLine#1#2#3%
- {\NC \type{#1}\space
- \ifx#2\empty\else\type{#2}\fi\space
- \ifx#3\empty\else\type{#3}\fi
- \NC $#1 a$
- \NC $#1 A$
- \NC \NR}
-
-\starttabulate[|||||]
-\HL
-\SampleLine \mr \empty \empty
-\HL
-\SampleLine \mathdefault \empty \empty
-\SampleLine \mathscript \empty \empty
-\SampleLine \mathfraktur \empty \empty
-\SampleLine \mathblackboard\empty \empty
-\HL
-\SampleLine \rm \mathrm \empty
-\SampleLine \ss \mathss \empty
-\SampleLine \tt \mathtt \empty
-\HL
-\SampleLine \tf \mathtf \tfmath
-\SampleLine \sl \mathsl \slmath
-\SampleLine \it \mathit \itmath
-\HL
-\SampleLine \bf \mathbf \bfmath
-\SampleLine \bs \mathbs \bsmath
-\SampleLine \bi \mathbi \bimath
-\HL
-\stoptabulate
-
-As you can see here, some commands have synonyms. The short commands adapt
-themselves to text and mathmode, the longer ones are meant for use in math mode
-only.
-
-In text mode distinctive shapes are either a font property (the whole font looks
-that way) or a stylistic alternate (an extra feature of a font). In math mode we
-can have alternates, but in addition to the previously mentioned alphabet
-switchers we have a few more:
-
-\starttabulate[|||||]
-\HL
-\SampleLine \frak \empty \empty
-\SampleLine \cal \empty \empty
-\SampleLine \bbd \empty \empty
-\SampleLine \blackboard \empty \empty
-\SampleLine \fraktur \empty \empty
-\SampleLine \gothic \empty \empty
-\HL
-\stoptabulate
-
-This chapter is not meant as an introduction to math but it is good to know
-that math font support in \CONTEXT\ is rather flexible. There are several
-mechanisms for remapping and converting characters and sequences into
-others and more is possible. Here is one:
-
-\startbuffer
-\startformula
-\reals {\mathbf R} \utfchar{"0211D} \utfchar{"1D411}
-\stopformula
-\stopbuffer
-
-\typebuffer \blank \getbuffer \blank
-
-Compare this to:
-
-\startbuffer
-\setupmathematics[symbolset=blackboard-to-bold]
-\startformula
-\reals {\mathbf R} \utfchar{"0211D} \utfchar{"1D411}
-\stopformula
-\stopbuffer
-
-\typebuffer \blank \start \getbuffer \stop \blank
-
-Greek is always troublesome because instead of regular text shapes math uses a
-few variants. Because in \UNICODE\ characters are only included once, we have
-gaps in the math alphabets but \MKIV\ will take care of this. \footnote {This is
-a typical example of where exceptions in a standard force all applications that
-deal with it have to implement tweaks.} Depending on the field an author has to
-choose between upright and italic greek:
-
-\startbuffer
-$\nabla \alpha \mathgreekupright \nabla \alpha \mathgreekitalic \nabla \alpha$
-\stopbuffer
-
-\typebuffer \blank \start \getbuffer \stop \blank
-
-By default \CONTEXT\ is set up as follows:
-
-\starttyping
-\setupmathematics
- [sygreek=normal,
- lcgreek=italic,
- ucgreek=normal]
-\stoptyping
-
-Again, these are not features of a font. The font just provides the glyphs and
-the \TEX\ engine, controlled by \CONTEXT\ takes care of mapping characters to
-glyphs and building special constructs. The same is true for spacing. Although
-math fonts do have kerning information, most of the math spacing is controlled
-by properties of characters and not by the font.
-
-\unexpanded\def\SampleLine#1%
- {\NC
- \type{$a #1{+} b$}
- \NC
- \ruledhbox{$\mathsurround\zeropoint a#1{+}b$}
- \NC \NR}
-
-\starttabulate[|||]
-\SampleLine \mathord
-\SampleLine \mathpunct
-\SampleLine \mathinner
-\SampleLine \mathop
-\SampleLine \mathalpha
-\SampleLine \mathnothing
-\SampleLine \mathbin
-\SampleLine \mathrel
-\stoptabulate
-
-As a user you don't have to worry about these issues because characters are tagged
-according to their usage. \footnote {There are a few more commands, like \type
-{\mathlimop}, \type {\mathnolop} and \type {mathbox} but these are used
-differently.}
-
-With \TEX\ being the oldest and still dominant math renderer it is no surprise
-that \MICROSOFT\ modelled its math renderer after \TEX\ and Cambria quite well
-suits the concept. In retrospect it is somewhat unfortunate that we're still
-stuck with some left overs (or compromises) from the past with respect to spacing
-built into the font. However, as long as this is consistent over fonts it's not
-that relevant. You can always influence the spacing with the commands mentioned.
-
-If you look at the low level definitions in for instance plain \TEX\ but also in
-\CONTEXT\ \MKII\ that relate to prime symbols it probably takes a while before you
-figure out what happens there. For instance, the prime symbol is triggered by a
-quote and multiple in a row results in primes that are spaced tightly. In
-\UNICODE\ we have slots for single, double and tripple primes. Therefore, in
-\MKIV\ we have a mechanism that accepts different kinds of input that eventually
-all end up in one of these three glyphs.
-
-\unexpanded\def\SampleLine#1%
- {\NC \type{#1} \NC #1 \NC \NR}
-
-\starttabulate[|||]
-\SampleLine{$f^2$}
-\SampleLine{$f\prime^2$}
-\SampleLine{$f\prime\prime^2$}
-\SampleLine{$f\prime\prime\prime^2$}
-\SampleLine{$f{\prime}^2$}
-\SampleLine{$f{\prime\prime}^2$}
-\SampleLine{$f{\prime\prime\prime}^2$}
-\SampleLine{$f'(x)$}
-\SampleLine{$f''(x)$}
-\SampleLine{$f'''(x)$}
-\SampleLine{$f\utfchar{0x2032}(x)$}
-\SampleLine{$f\utfchar{0x2033}(x)$}
-\SampleLine{$f\utfchar{0x2034}(x)$}
-\SampleLine{$f\utfchar{0x2032}\utfchar{0x2032}(x)$}
-\SampleLine{$f\utfchar{0x2032}\utfchar{0x2032}\utfchar{0x2032}(x)$}
-\SampleLine{$f\utfchar{0x2033}\utfchar{0x2032}(x)$}
-\SampleLine{$f\utfchar{0x2032}\utfchar{0x2033}(x)$}
-\stoptabulate
-
-Again, this is not the same as ligature building features in text fonts, but
-handled in a different way.
-
-The \TEX\ engine understands the concept of italic correction. When an italic
-shape is followed by for instance an upright shape, you can insert a \type {\/}
-and the engine will add a correction as defined in the font. In \OPENTYPE\ we
-don't have such corrections available but we can fake it, which is what the \type
-{itlc} feature in \CONTEXT\ does. However, you need to enable this feature
-explicitly. An example of a setup is:
-
-\starttyping
-\definefontfeature
- [default]
- [default]
- [itlc=yes,textitalics=yes]
-
-\setupitaliccorrection
- [global,always]
-\stoptyping
-
-This will make sure that the right amount of correction is added between
-italic shapes and non italics or boxes. Using \type {text} instead of
-\type {always} would limit the correction to glyphs only and leaving out
-the \type {global} would permit selective (grouped) usage at the cost
-of more runtime. There is no need for the \type {\/} here.
-
-In math we also can have italic correction but there it is built into the engine
-and in traditional \TEX\ no directives are needed. Italic correction properties
-in math fonts are somewhat troublesome as their application depends on what we're
-dealing with: symbols, super- and subscripts, etc. Because early versions of
-\LUATEX\ didn't handle all of it well, if only because the fonts were not yet okay,
-the \MKIV\ math handler provides a bit of control.
-
-\def\SampleLine#1#2%
- {\NC #1
- \NC \setupmathematics[italics=#1]\ruledhbox{$m$ t}
- \NC \setupmathematics[italics=#1]\ruledhbox{$m$ {\it t}}
- \NC \setupmathematics[italics=#1]\ruledhbox{t $m$ t $m$ {\it t}}
- \NC #2
- \NC \NR}
-
-\starttabulate[||||||]
-\SampleLine0{no correction}
-\SampleLine1{only apply italics when the font carries them}
-\SampleLine2{apply italics provided by the font or automatically calculated}
-\SampleLine3{apply italics based on an emwidth and character properties}
-\SampleLine4{use method 1 but fall back on 3 if needed}
-\stoptabulate
-
-Because we cannot rely on fonts too much, we default to method~3 which in practice
-works out well, so the setup is:
-
-\starttyping
-\setupmathematics
- [italics=3]
-\stoptyping
-
-There are all kind of commands that can be used to build math constructs in such a
-way that super- and subscripts are consistently rendered. It goes beyond this
-chapter to discuss them and most users will never see or use those commands. The
-main message of the examples above is that text and math use different fonts and
-properties and therefore also different methods in rendering text or a formula.
-Even if the names of mechanisms are the same (like italics) you cannot assume
-that both modes do exactly the same.
-
-\stopsection
-
-\startsection[title=Bold math]
-
-If you look at what \UNICODE\ provides you will notice that there are quite some
-bold characters. First of all there are a bunch of alphabets and because bold is
-not present in the text part of \UNICODE\ these alphabets have no holes. Then
-there are some symbols that have special meaning.
-
-\startluacode
-local find = string.find
-local NC, NR = context.NC, context.NR
-
-context.starttabulate { "|Tl||l|" }
-for unicode, entry in table.sortedhash(characters.data) do
- local description = entry.description
- if find(description,"^MATHEMATICAL BOLD") then
- NC() context("U+04X",unicode)
- NC() context.mathematics(utf.char(unicode))
- NC() context(description)
- NC() NR()
- end
-end
-context.stoptabulate()
-\stopluacode
-
-The biggest mistake one can make when discussing bold math is the assumption that
-these bold alphabets are meant for section titles and other structural elements
-that need some emphasis. This is not true, in that case we would expect the whole
-formula to be bold and the bold symbols or variables would be even more bold.
-Bold math boils down to {\em all} math being bold. The reason why we show the
-list of bold characters on the previous pages is that it gives a good impression of
-fact that we're mostly given alphabets in an otherwise regular font.
-
-As Latin Modern (being derived from Computer Modern) has some bold extras in
-\MKII\ to some extend we do support a complete bold math switch but mixing bold
-formulas with regular ones has some limitations. Math typesetting consists of two
-phases: first the input is translated into a special list where references to
-fonts are not yet resolved. Instead families are used and each family has three
-sizes: text, script and scriptscript. In a second pass the formula is typeset and
-the families get translated into fonts. So, if we change the definition of a
-family, say math italic into bold math italic, then the definition that is actual
-when the second pass takes place is used.
-
-Although \LUATEX\ provides for many more families and as a consequence we could
-have replaced the \MKII\ mechanism with a more complete one, instead we just
-forgot about it and stuck to one family for regular math and another one for bold
-math. Okay, this is not entirely true as later on we added some more in order to
-deal with bidirectional typesetting.
-
-Only a few math fonts come with a bold variant. One of the objectives of the \TEX
-Gyre math font project is to explore the possibilities of bold math companions,
-but such a font will probably have less coverage, simply because no real complex
-math will end up in for instance section titles.
-
-When I wrote this down there were not that many math fonts that come with a real
-(complete) bold variant. The \CONTEXT\ math font subsystem tries to fill this gap
-as good as possible by using pseudo fonts. When a typeface doesn't define a math
-bold variant a pseudo setup is used. When a real bold font is used, it could be
-that not all alphabets are supported in which case a suitable alternative is
-tried.
-
-The Xits font, assembed from Stix and enhanced by Khaled Hosny, comes with a bold
-variant but the coverage is not complete, at least not when I wrote this
-paragraph. This can go unnoticed because \CONTEXT\ tries to work around this. On
-the other hand, it definitely has bold properties, which can be seen from the
-next example. You switch between regular and bold math with the \type {\mr} and
-\type {\mb} commands.
-
-\startbuffer
-\switchtobodyfont[xitsbidi]
-
-$ \sqrt{x } \quad
- \mb \sqrt{mb} \quad
- \mathupright \sqrt{u } \quad
- \mr \sqrt{mr} \quad
- \mathupright \sqrt{u } \quad
- \mathdefault \sqrt{d }
-$
-\stopbuffer
-
-\typebuffer \blank \start \getbuffer \stop \blank
-
-You can track some of what happens with:
-
-\starttyping
-\enabletrackers[math.remapping,math.families]
-\stoptyping
-
-You will get some information about remapping or when it fails if fallback
-remapping is used. But no matter what happens with glyphs, you will notice in
-this example that the radical symbol is bold indeed.
-
-\stopsection
-
-\startsection[title=Bidirectional math]
-
-There is not that much to tell about bidirectional math typesetting, simply
-because the fonts are still in development. However, Khaled Hosny added
-some support to the Xits font. Of course you need to load this font first:
-
-\starttyping
-\switchtobodyfont[xitsbidi]
-\stoptyping
-
-In the previous chapter we mentioned bold math and as Xits also comes with
-a bold variant which means that this command loads the whole lot (which is
-fast enough anyway).
-
-Easiest is to just show a few examples. When in left to right mode we get what we
-are accustomed to:
-
-\startbuffer
-\setupmathematics[align=l2r]
-
-\startformula
-\sqrt{x^2\over 4x} \eqno(1)
-\stopformula
-
-\startformula
-5 < 6 > 4
-\stopformula
-
-\startformula
-5 \leq 6 \geq 7
-\stopformula
-\stopbuffer
-
-\typebuffer \start \switchtobodyfont[xitsbidi] \getbuffer \stop
-
-However, when we go the other way, we automatically get digits converted to
-arabic.
-
-\startbuffer
-\setupmathematics[align=r2l,bidi=yes]
-
-\startformula
-\sqrt{ف^2\over 4ب} \eqno(1)
-\stopformula
-
-\startformula
-5 < 6 > 4
-\stopformula
-
-\startformula
-5 \leq 6 \geq 7
-\stopformula
-\stopbuffer
-
-\typebuffer \start \switchtobodyfont[xitsbidi] \getbuffer \stop
-
-You don't have to worry about how the font is set up, but not that much is needed
-because \CONTEXT\ does it for you and the Xits typescripts carries the right
-definitions. Just to give you an idea, we show a feature definition: The magic is
-in the \type {rtlm} feature combined with \type {locl}.
-
-\starttyping
-\definefontfeature
- [mathematics-r2l]
- [mathematics]
- [language=ara,
- rtlm=yes,
- locl=yes]
-\stoptyping
-
-Some symbols are mirrored too:
-
-\startbuffer
-\setupmathematics[align=r2l,bidi=yes]
-
-\startformula
-\sum^\infty_{س=0} س^2 \eqno(2)
-\stopformula
-\stopbuffer
-
-\typebuffer \start \switchtobodyfont[xitsbidi] \getbuffer \stop
-
-And of course the extensible fences are done properly too:
-
-\startbuffer
-\setupmathematics[align=r2l,bidi=yes]
-
-\startformula
-\left(\root{2} \of{155}\right)
-\stopformula
-
-\startformula
-\left[\int^{55}_{123} 666^3\right]
-\qquad\textstyle\left[\int^{55}_{123} 666^3\right]
-\stopformula
-
-\startformula
-\left\{\sum^{55}_{123} 666^3\right\}
-\stopformula
-\stopbuffer
-
-\typebuffer \start \switchtobodyfont[xitsbidi] \getbuffer \stop
-
-The real torture test is the radical sign. A mirrored shape is used
-and it grows upwards as well as leftwards.
-
-\startbuffer
-\setupmathematics[align=r2l,bidi=yes]
-
-\startformula
-\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{55}}}}}}}}}}
-\stopformula
-\stopbuffer
-
-\typebuffer \start \switchtobodyfont[xitsbidi] \getbuffer \stop
-
-\stopsection
-
-\startsection[title=Styles]
-
-In text mode you use font switches like \type {\sl} that switches the current font
-to a slanted one. In math mode it is an alphabet switch in the same font. In
-fact, there isn't much to choose from fonts there, apart from a massive switch
-to bold, in which case \type {\bf} is just a bolder alphabet in that bolder font.
-
-A lot of things in math mode happen automatically. There are for instance always
-three instances of (the same) font active, each different in size: text, script
-and the smallest, scriptscript and when you ask for instance for a superscript
-the next smaller size is used.
-
-\starttabulate[|l|l|l|]
-\NC normal \NC \type {\textstyle} \NC $\textstyle text^{script^{scriptscript}}$ \NC \NR
-\NC smaller \NC \type {\scriptstyle} \NC $\scriptstyle text^{script^{scriptscript}}$ \NC \NR
-\NC smallest \NC \type {\scriptscriptstyle} \NC $\scriptscriptstyle text^{script^{scriptscript}}$ \NC \NR
-\stoptabulate
-
-In text style, superscripts can go twice smaller, but in script style only one
-smaller size is left, and in scriptscript style you're stuck with one size. The
-commands in the second column can be used to force a style.
-
-The math formula builder has an important property: the formula is typeset after
-it has been scanned completely. In a traditional setup that has some
-consequences. Take this:
-
-\starttyping
-one \sl two \bf three \bi four
-\stoptyping
-
-In a traditional setup four so called families are used and each character gets
-tagged with a family number. So we have (for instance):
-
-\blank \start \tttf
-o\low7n\low7e\low7 t\low6w\low6o\low6 t\low5h\low5r\low5e\low5e\low5 f\low9o\low9u\low9r\low9
-\stop \blank
-
-As the number of families was limited there could be at most 16 families. In
-fact, the first four were traditionally reserved for math roman, math italic,
-symbol and extensibles. Then, due to the limit of 256 characters per font,
-another few were used for additional symbol fonts. So, adding a few more variants
-could exhaust the family pool quite fast. You could argue that we could halfway
-redefine a family but this will not work as there is a one to one relationship
-between family numbers and fonts assigned to them when the formula has been
-read in (the last value counts). And grouping won't help you either.
-
-The actual (plain) situation is even more complex. As we have a limited number of
-characters per font, most symbols are accessed by name, and the name relates to a
-mathematical character definition using for instance \type {\mathchardef}. Such a
-definition refers to a slot in a specific family number and therefore font. It
-also puts a character in a so called math class. One of these, the alphanumeric
-class, with number~7, is special. Characters that are input directly on the
-keyboard (like \type {a}||\type {z} can also be tagged this way using \type
-{\mathcode}.
-
-When we switch a family, this will normally not affect a symbol defined as math
-character, simply because we refer to a specific family|/|slot combination, but
-when a character has class~7, then it will be taken from the current family. This
-permits latin letters, digits and greek letters to be typeset in different
-styles. So, in that traditional approach we have fonts that provide a bunch of
-symbols as well as some alphabets. Think for instance of a font with additional
-symbols where the regular alphabet slots contain blackboard shapes. The symbols
-are accessed directly and the characters are accessed via the regular \type
-{a}||\type {z} characters as these will adapt to the family and therefore font.
-In practice users will not notice this complication as macro packages hide the
-implementation details.
-
-In \MKIV\ the situation is different as there we have one family (or a few more
-if we use a full bold switch and|/|or bidirectional math). Although we no longer
-have the limit of 16 fonts we actually don't need that many families, at least
-not in the way we've set up \MKIV \footnote{A technical note: in principle the
-\MKIV\ approach can have a speed penalty compared to a multi||family approach but
-we don't care too much about it. Also, as we load less fonts the extra overhead gets
-compensated nicely.}
-
-\blank \start \tttf
-o\low1n\low1e\low1 t\low1w\low1o\low1 t\low1h\low1r\low1e\low1e\low1 f\low1o\low1u\low1r\low1
-\stop \blank
-
-So how does this relate to styles? Each family has three fonts and we can use the
-switch commands to choose any of these. In text mode we use the term style for a
-font switch, while in math mode it's more than that: indeed we switch a font, but
-only in size, but the spacing is also adapted. If a proper math font is used, the
-smaller sizes are actually alternates in the font, visually adapted to suit their
-use.
-
-In text mode we do this in order to limit the scope of a switch:
-
-\starttyping
-normal {\bf bold {\it italic} bold} normalbracket
-\stoptyping
-
-This is the same as:
-
-\starttyping
-normal \bgroup \bf bold \bgroup \it italic\egroup
- \ bold\egroup \ normalbracket
-\stoptyping
-
-and:
-
-\starttyping
-normal \begingroup \bf bold \begingroup \it italic\endgroup
- \ bold\endgroup \ normalbracket
-\stoptyping
-
-The \CONTEXT\ distribution ships with a plain math definition file that also uses
-one family but reassigns some math codes when we switch to another style. As the
-number of characters that this applies to this is efficient enough for a modern
-computer. A peek into \type {luatex-math.tex} gives an impression of what we deal
-with. However, keep in mind that the implementation in \MKIV\ goes it differently
-and is therefore more powerful. We also have hardly any definitions at the \TEX\
-end and use information from \type {char-def.lua} instead.
-
-In math mode there is a subtle difference in the way grouping works with styles:
-
-\starttyping
-text {\scriptstyle script} normal
-\stoptyping
-
-This is the same as:
-
-\starttyping
-text \bgroup\scriptstyle script\egroup\ normal
-\stoptyping
-
-but different from:
-
-\starttyping
-text \begingroup\scriptstyle script\endgroup\ script
-\stoptyping
-
-This has to do with the fact that a style switch is explicitly registered in the
-math list and grouping like this is not limiting the scope. In math mode the
-braced grouping mode actually does create a math group and there the scope of the
-switch is limited to that group. In practice users will not run into this but
-they can use macros that use \type {\begingroup}. Among other reasons, this is
-why we have a special mathstyle mechanism.
-
-\startbuffer
-\ruledhbox{$x\begingroup\scriptstyle x\endgroup x$} \quad
-\ruledhbox{$x\begingroup\setupmathstyle[script]x\endgroup x$} \quad
-\ruledhbox{$x{\setupmathstyle[script]x}x$} \quad
-\ruledhbox{$x\startmathstyle[script]x\stopmathstyle x$}
-\stopbuffer
-
-\typebuffer
-
-This gives:
-
-\startlinecorrection[blank] \dontleavehmode \getbuffer \stoplinecorrection
-
-Mechanisms that support the \type {mathstyle} parameter know how to apply the
-proper grouping so you don't have to worry there. You can best avoid using the
-verbose grouping command and stick to braces or the \type {start}||\type {stop}
-command. An example is the fence mechanism:
-
-\startbuffer
-\definemathfence
- [fancybracket] [bracket]
- [color=darkblue]
-\definemathfence
- [smallbracket] [bracket]
- [command=yes,color=darkgreen,mathstyle=small]
-\definemathfence
- [normalbracket] [bracket]
- [command=yes,color=darkred]
-\stopbuffer
-
-\typebuffer \getbuffer
-
-We apply this to an example:
-
-\startbuffer
-$x \fenced[bar]{\frac{1}{x}} x$ \quad
-$x \fenced[doublebar]{\frac{1}{x}} x$ \quad
-$x \fenced[bracket]{\frac{1}{x}} x$ \quad
-$x \fenced[fancybracket]{\frac{1}{x}} x$ \quad
-$x \frac{1}{n} \normalbracket{\frac{1}{n}} \smallbracket{\frac{1}{s}} x$
-\stopbuffer
-
-\typebuffer
-
-Of course these somewhat weird examples are not real but at least they
-demonstrate the principles.
-
-\startlinecorrection[blank] \dontleavehmode \getbuffer \stoplinecorrection
-
-A math style is a combination of the following keys. Their effect can depend on
-the current state, for instance you can switch cramp or size indepently.
-
-\starttabulate[|T||]
-\NC display \NC display style, like text style but somewhat more spacy \NC \NR
-\NC text \NC text style, normally used inline \NC \NR
-\NC script \NC smaller than text cq. display style \NC \NR
-\NC scriptscript \NC smaller than script style \NC \NR
-\NC cramped packed \NC more tightly positioned superscripts \NC \NR
-\NC uncramped normal \NC normal positioned superscripts \NC \NR
-\NC small \NC switch to the next smaller style but keep cramp state \NC \NR
-\NC big \NC switch to the next larger style but keep cramp state \NC \NR
-\stoptabulate
-
-Future versions of \MKIV\ will provide more features (like parameter sets driven
-by keywords). As you might prefer a more symbolic approach we provide:
-
-\starttyping
-\definemathstyle[default][text,cramped]
-\stoptyping
-
-After this you can use the keyword \type {default} which has the advantage that
-you only need to change one definition in order to get different rendering.
-
-\stopsection
-
-\startsection[title=Supported fonts]
-
-As in \CONTEXT\ MKIV\ I wanted to go ahead with \UNICODE\ math as soon as the
-first version of \LUATEX\ showed up. Because at that time only Cambria was
-available I decided to provide virtual \UNICODE\ math fonts as a prelude to
-proper replacements for the popular \TYPEONE\ math fonts. In the meantime Xits
-came around and in 2012 we had quite useable math companions for the public Latin
-Modern, Pagella and Termes fonts and the \TEX\ user groups started shipping
-\OPENTYPE\ variants of Lucida. The virtual variants will still around so that we
-can compare them with the new implementations. As the official specification of
-\OPENTYPE\ math is not always clear from the beginning the \OPENTYPE\ fonts get
-improved over time. In fact, this is true not only for math fonts. Just think of
-this:
-
-\startitemize
-
-\startitem As \UNICODE\ gets extended, fonts might get more glyphs and possibly
-alternate shapes. \stopitem
-
-\startitem The more languages are supported, the more glyphs are to be available
-and features have to get language dependent instances. \stopitem
-
-\startitem The larger the font, the bigger the chance that mistakes get unnoticed
-especially when contextual subtitutions and positioning are used. \stopitem
-
-\startitem Math fonts can get more script and scriptscript alternates, more size
-variants, more advanced extensibles, bidirectional support, etc. \stopitem
-
-\stopitemize
-
-So, like regular programs, \LUATEX\ and macro packages, we now have fonts as
-component that needs occasional updating. Of course resources like hyphenation
-patterns are also subjected to this, so it's not a new aspect. But still, best
-keep en eye on font updates.
-
-While there are lots of text fonts, there are not that many math fonts, so you
-can safely assume that \CONTEXT\ ships with the proper setup for those fonts. Of
-course you have to choose a specific instance when you set up your own
-combination of fonts, but a peek into the typescripts shows the way.
-
-In the font manual and on the wiki you can find more about typescript and what is
-possible, so here we just take a look at one definition:
-
-\startnarrowtyping
-\starttypescript [serif] [dejavu] [name]
- \definefontsynonym [Serif] [name:dejavuserif] [features=default]
- \definefontsynonym [SerifBold] [name:dejavuserifbold] [features=default]
- \definefontsynonym [SerifItalic] [name:dejavuserifitalic] [features=default]
- \definefontsynonym [SerifBoldItalic] [name:dejavuserifbolditalic] [features=default]
-\stoptypescript
-
-\starttypescript [sans] [dejavu] [name]
- \definefontsynonym [Sans] [name:dejavusans] [features=default]
- \definefontsynonym [SansBold] [name:dejavusansbold] [features=default]
- \definefontsynonym [SansItalic] [name:dejavusansoblique] [features=default]
- \definefontsynonym [SansBoldItalic] [name:dejavusansboldoblique] [features=default]
-\stoptypescript
-
-\starttypescript [mono] [dejavu] [name]
- \definefontsynonym [Mono] [name:dejavusansmono] [features=none]
- \definefontsynonym [MonoBold] [name:dejavusansmonobold] [features=none]
- \definefontsynonym [MonoItalic] [name:dejavusansmonooblique] [features=none]
- \definefontsynonym [MonoBoldItalic] [name:dejavusansmonoboldoblique] [features=none]
-\stoptypescript
-
-\starttypescript[dejavu]
- \definetypeface [dejavu] [rm] [serif] [dejavu] [default]
- \definetypeface [dejavu] [ss] [sans] [dejavu] [default]
- \definetypeface [dejavu] [tt] [mono] [dejavu] [default]
- \definetypeface [dejavu] [mm] [math] [xits] [default] [scale=1.2]
-\stoptypescript
-\stopnarrowtyping
-
-So, in many cases you can just copy this blob and replace the font names by your
-own.
-
-Loading a font, and Dejavu is a predefined one, is done as follows:
-
-\starttyping
-\setupbodyfont[dejavu]
-\stoptyping
-
-In a similar fashion you can enable \type {cambria}, \type {pagella}, \type
-{termes}, \type {lucidaot}, etc.\ and if you don't use this command at all, you
-get Latin Modern. These fonts are part of \TEX\ distributions, including
-\CONTEXT\ stand||alone that can be downloaded from \CONTEXT\ garden.
-
-If you want to use Lucida, all you have to do when you have bought the fonts, is
-to put the \OPENTYPE\ files in a place where they can be found, for instance:
-
-\starttyping
-tex/texmf-fonts/fonts/data/lucida
-\stoptyping
-
-Of course you need to run \type {mtxrun --generate} afterwards so that the files
-can be found.
-
-\startnotabene
- Tracing and characters coverage will be discussed here as soon as the styles
- that are used for them are normalized.
-\stopnotabene
-
-\stopsection
-
-\startsection[title={Stylistic alternates}]
-
-Some fonts provide stylistic alternates. These can be described in goodies files
-and the Lucida setup is a good example. Here we demonstrate the effects. We
-disable the default math rendering (which takes the italic variants).
-
-\startbuffer[sa:1]
-\switchtobodyfont[lucidaot,14.4pt]
-\setupmathrendering[lucidaot][it=]
-$x
- ^{i \leftarrow 0 = ∅}
- _{i \leftarrow 0 = ∅}
-$
-\stopbuffer
-
-\typebuffer[sa:1]
-
-The next code enabled three alternatives:
-
-\startbuffer[sa:2]
-\switchtobodyfont[lucidaot,14.4pt]
-\setupmathrendering[lucidaot][it=]
-$x
- ^{i \leftarrow 0 = ∅}
- _{\setmathfontalternate{arrow}
- \setmathfontalternate{dotless}
- \setmathfontalternate{zero}
- i \leftarrow 0 = ∅}
-$
-\stopbuffer
-
-\typebuffer[sa:2]
-
-Here we set them in one go:
-
-\startbuffer[sa:3]
-\switchtobodyfont[lucidaot,14.4pt]
-\setupmathrendering[lucidaot][it=]
-$x
- ^{i \leftarrow 0 = ∅}
- _{\setmathfontalternate{arrow,dotless,zero}
- i \leftarrow 0 = ∅}
-$
-\stopbuffer
-\
-\typebuffer[sa:3]
-
-The last example shows how to enable these features globally:
-
-\startbuffer[sa:4]
-\switchtobodyfont[lucidaot,14.4pt]
-\setupmathrendering[lucidaot][it=]
-\setupmathematics[stylealternative={arrow,dotless,zero}]
-$x
- ^{i \leftarrow 0 = ∅}
- _{i \leftarrow 0 = ∅}
-$
-\stopbuffer
-
-\typebuffer[sa:4]
-
-The results are collected here:
-
-\startlinecorrection[blank]
-\startcombination[4*1]
- {\vbox{\hsize.2\hsize\midaligned{\nospacing\getbuffer[sa:1]}}} {\bf nothing}
- {\vbox{\hsize.2\hsize\midaligned{\nospacing\getbuffer[sa:2]}}} {\bf stepwise}
- {\vbox{\hsize.2\hsize\midaligned{\nospacing\getbuffer[sa:3]}}} {\bf combined}
- {\vbox{\hsize.2\hsize\midaligned{\nospacing\getbuffer[sa:4]}}} {\bf global}
-\stopcombination
-\stoplinecorrection
-
-\stopsection
-
-\startsection[title=Italics and limits]
-
-An \OPENTYPE\ font treats italic correction differently from traditional fonts.
-Officially the italic correction is used for placement above and below limits
-where the scripts shift left and right half of the correction from the center of
-the shape. Advanced kerns are then to be used for anchoring the scripts when they
-are placed at the right side (so far no fonts seem to do this). Because we cannot
-foresee if fonts compensate for correction then we can control placement a bit.
-There is a parameter \type {\mathnolimitsmode} that controls the correction.
-
-\definebodyfontenvironment[20pt]
-
-\startlinecorrection
-\startcombination[5*1]
- {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[20pt]\mathnolimitsmode0$\displaystyle\int\nolimits^0_1$\hss}} {\tttf 0}
- {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[20pt]\mathnolimitsmode1$\displaystyle\int\nolimits^0_1$\hss}} {\tttf 1}
- {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[20pt]\mathnolimitsmode2$\displaystyle\int\nolimits^0_1$\hss}} {\tttf 2}
- {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[20pt]\mathnolimitsmode3$\displaystyle\int\nolimits^0_1$\hss}} {\tttf 3}
- {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[20pt]\mathnolimitsmode4$\displaystyle\int\nolimits^0_1$\hss}} {\tttf 4}
-\stopcombination
-\stoplinecorrection
-
-A value larger than 15 is interpreted as a factor (in the usual \TEX\ way 1000
-means 1.0). We have some values left for future use when correction is to be
-combined with kerns.
-
-In \CONTEXT\ we set the value to 1 which means that the factors for super- and
-subscript are set via math parameters (or constants in the font). We use a
-default of \type {{0,800}} so we don't shift the superscript and the subscript we
-shift less than the italic correction. This is driven by a feature but you can
-change the values before loading a font, for instance with:
-
-\starttyping
-\adaptfontfeature[*math*][mathnolimitsmode={100,700}]
-\stoptyping
-
-The defaults come out as:
-
-\startlinecorrection
-\startcombination[5*1]
- {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[modern, 20pt]$\displaystyle\int\nolimits^0_1$\hss}} {\tttf modern}
- {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[xits, 20pt]$\displaystyle\int\nolimits^0_1$\hss}} {\tttf xits}
- {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[lucidaot,20pt]$\displaystyle\int\nolimits^0_1$\hss}} {\tttf lucidaot}
- {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[pagella, 20pt]$\displaystyle\int\nolimits^0_1$\hss}} {\tttf pagella}
- {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[cambria, 20pt]$\displaystyle\int\nolimits^0_1$\hss}} {\tttf cambria}
-\stopcombination
-\stoplinecorrection
-
-\stopsection
-
-\startsection[title=Kerning]
-
-Math kerns in \OPENTYPE\ are quite advanced and use a staircase model left
-and|/|or right of characters. However, hardly any math font implements them
-(extensively). Therefore we provide a way to fine tune your fonts to your
-preferences. You can test this mechanism by patching \type {cambria-math.lfg} by
-adding this to the mathematics subtable:
-
-\starttyping
-kernpairs = {
- [0x1D44E] = {
- [0x1D44F] = 1000, -- 𝑎𝑏 demo
- }
-}
-\stoptyping
-
-After that, the next example should work:
-
-\starttyping
-\starttext
- \setupbodyfont[cambria]
- \setupmathematics[kernpairs=yes]
- $abcd$
-\stoptext
-\stoptyping
-
-There should be a gap between the $𝑎$ and $𝑏$. It is not shown here because I
-don't want to mess up my goodie file.
-
-\stopsection
-
-\stopchapter
-
-\stopcomponent