From 1d3d5b9b32ac75a13fe40325ae6258f1822a9ae5 Mon Sep 17 00:00:00 2001 From: luigi Date: Thu, 7 Apr 2016 08:44:26 +0000 Subject: [PATCH] another chapter done (HH) git-svn-id: https://foundry.supelec.fr/svn/luatex/trunk@5920 0b2b3880-5936-4365-a048-eb17d2e5a6bf --- manual/luatex-math.tex | 114 ++++++++++++++++++++++++++----------------------- manual/luatex.pdf | Bin 998445 -> 998448 bytes 2 files changed, 60 insertions(+), 54 deletions(-) diff --git a/manual/luatex-math.tex b/manual/luatex-math.tex index d28b4e6b5..cb8d198b1 100644 --- a/manual/luatex-math.tex +++ b/manual/luatex-math.tex @@ -13,7 +13,8 @@ others so that \UNICODE\ input can be used easily. Second, all of \TEX82's internal special values (for example for operator spacing) have been made accessible and changeable via control sequences. Third, there are extensions that make it easier to use \OPENTYPE\ math fonts. And finally, there are some -extensions that have been proposed in the past that are now added to the engine. +extensions that have been proposed or considered in the past that are now added +to the engine. \section{The current math style} @@ -71,44 +72,46 @@ The input for such primitives would look like this: \def\overbrace{\Umathaccent 0 1 "23DE } \stoptyping -Altered \TEX82 primitives: +The altered \TEX82 primitives are: -\starttabulate[|l|l|l|] -\NC \bf primitive \NC \bf value range (in hex) \NC \NR -\NC \type {\mathcode} \NC 0--10FFFF = 0--8000 \NC \NR -\NC \type {\delcode} \NC 0--10FFFF = 0--FFFFFF \NC \NR +\starttabulate[|l|l|r|c|l|r|] +\NC \bf primitive \NC \bf min \NC \bf max \NC \kern 2em \NC \bf min \NC \bf max \NC \NR +\NC \type {\mathcode} \NC 0 \NC 10FFFF \NC = \NC 0 \NC 8000 \NC \NR +\NC \type {\delcode} \NC 0 \NC 10FFFF \NC = \NC 0 \NC FFFFFF \NC \NR \stoptabulate -Unaltered: +The unaltered ones are: -\starttabulate[|l|l|l|] -\NC \bf primitive \NC \bf value range (in hex) \NC \NR -\NC \type {\mathchardef} \NC 0--8000 \NC \NR -\NC \type {\mathchar} \NC 0--7FFF \NC \NR -\NC \type {\mathaccent} \NC 0--7FFF \NC \NR -\NC \type {\delimiter} \NC 0--7FFFFFF \NC \NR -\NC \type {\radical} \NC 0--7FFFFFF \NC \NR +\starttabulate[|l|l|r|] +\NC \bf primitive \NC \bf min \NC \bf max \NC \NR +\NC \type {\mathchardef} \NC 0 \NC 8000 \NC \NR +\NC \type {\mathchar} \NC 0 \NC 7FFF \NC \NR +\NC \type {\mathaccent} \NC 0 \NC 7FFF \NC \NR +\NC \type {\delimiter} \NC 0 \NC 7FFFFFF \NC \NR +\NC \type {\radical} \NC 0 \NC 7FFFFFF \NC \NR \stoptabulate For practical reasons \type {\mathchardef} will silently accept values larger that \type {0x8000} and interpret it as \type {\Umathcharnumdef}. This is needed to satisfy older macro packages. -New primitives that are compatible with \XETEX: - -\starttabulate[|l|l|l|l|] -\NC \bf primitive \NC \bf value range (in hex) \NC \NR -\NC \type {\Umathchardef} \NC 0+0+0--7+FF+10FFFF$^1$ \NC \NR -\NC \type {\Umathcharnumdef}$^5$ \NC -80000000--7FFFFFFF$^3$ \NC \NR -\NC \type {\Umathcode} \NC 0--10FFFF = 0+0+0--7+FF+10FFFF$^1$ \NC \NR -\NC \type {\Udelcode} \NC 0--10FFFF = 0+0--FF+10FFFF$^2$ \NC \NR -\NC \type {\Umathchar} \NC 0+0+0--7+FF+10FFFF \NC \NR -\NC \type {\Umathaccent} \NC 0+0+0--7+FF+10FFFF$^{2,4}$ \NC \NR -\NC \type {\Udelimiter} \NC 0+0+0--7+FF+10FFFF$^2$ \NC \NR -\NC \type {\Uradical} \NC 0+0--FF+10FFFF$^2$ \NC \NR -\NC \type {\Umathcharnum} \NC -80000000--7FFFFFFF$^3$ \NC \NR -\NC \type {\Umathcodenum} \NC 0--10FFFF = -80000000--7FFFFFFF$^3$ \NC \NR -\NC \type {\Udelcodenum} \NC 0--10FFFF = -80000000--7FFFFFFF$^3$ \NC \NR +The following new primitives are compatible with \XETEX: + +% somewhat fuzzy: + +\starttabulate[|l|l|r|c|l|r|] +\NC \bf primitive \NC \bf min \NC \bf max \NC \kern 2em \NC \bf min \NC \bf max \NC \NR +\NC \type {\Umathchardef} \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{1}} \NC \NC \NC \NC \NR +\NC \type {\Umathcharnumdef}\rlap{\high{5}} \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NC \NC \NC \NR +\NC \type {\Umathcode} \NC 0 \NC 10FFFF \NC = \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{1}} \NC \NR +\NC \type {\Udelcode} \NC 0 \NC 10FFFF \NC = \NC 0+0 \NC FF+10FFFF\rlap{\high{2}} \NC \NR +\NC \type {\Umathchar} \NC 0+0+0 \NC 7+FF+10FFFF \NC \NC \NC \NC \NR +\NC \type {\Umathaccent} \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{2,4}} \NC \NC \NC \NC \NR +\NC \type {\Udelimiter} \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{2}} \NC \NC \NC \NC \NR +\NC \type {\Uradical} \NC 0+0 \NC FF+10FFFF\rlap{\high{2}} \NC \NC \NC \NC \NR +\NC \type {\Umathcharnum} \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NC \NC \NC \NR +\NC \type {\Umathcodenum} \NC 0 \NC 10FFFF \NC = \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NR +\NC \type {\Udelcodenum} \NC 0 \NC 10FFFF \NC = \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NR \stoptabulate Specifications typically look like: @@ -118,21 +121,22 @@ Specifications typically look like: \Umathcode 123="1"0"789 \stoptyping -Note 1: The new primitives that deal with delimiter-style objects do not set up a +Note 1: The new primitives that deal with delimiter|-|style objects do not set up a \quote {large family}. Selecting a suitable size for display purposes is expected to be dealt with by the font via the \type {\Umathoperatorsize} parameter (more information can be found in a following section). Note 2: For these three primitives, all information is packed into a single -signed integer. For the first two (\type {\Umathcharnum} and \type {\Umathcodenum}), -the lowest 21 bits are the character code, the 3 bits above that represent the -math class, and the family data is kept in the topmost bits (This means that the -values for math families 128--255 are actually negative). For \type {\Udelcodenum} -there is no math class; the math family information is stored in the bits -directly on top of the character code. Using these three commands is not as -natural as using the two- and three-value commands, so unless you know exactly -what you are doing and absolutely require the speedup resulting from the faster -input scanning, it is better to use the verbose commands instead. +signed integer. For the first two (\type {\Umathcharnum} and \type +{\Umathcodenum}), the lowest 21 bits are the character code, the 3 bits above +that represent the math class, and the family data is kept in the topmost bits +(This means that the values for math families 128--255 are actually negative). +For \type {\Udelcodenum} there is no math class. The math family information is +stored in the bits directly on top of the character code. Using these three +commands is not as natural as using the two- and three|-|value commands, so +unless you know exactly what you are doing and absolutely require the speedup +resulting from the faster input scanning, it is better to use the verbose +commands instead. Note 3: The \type {\Umathaccent} command accepts optional keywords to control various details regarding math accents. See \in {section} [mathacc] below for @@ -258,9 +262,9 @@ has resulted in many more parameters than were accessible before. \NC \type {\Umathradicaldegreeafter} \NC the backward kern that takes place after placement of the radical degree \NC \NR \NC \type {\Umathradicaldegreeraise} \NC this is the percentage of the total height and depth of - the radical sign that the degree is raised by. It is + the radical sign that the degree is raised by; it is expressed in \type {percents}, so 60\% is expressed as the - integer $60$. \NC \NR + integer $60$ \NC \NR \NC \type {\Umathstackvgap} \NC vertical clearance between the two elements in a \type {\atop} stack \NC \NR \NC \type {\Umathstacknumup} \NC numerator shift upward in \type {\atop} stack \NC \NR @@ -336,9 +340,9 @@ case no attention is paid to which family is being assigned to: the \type In the table below, the one|-|letter style abbreviations and symbolic tfm font dimension names match those using in the \TeX book. Assignments to \type -{\textfont} set the values for the cramped and uncramped display and text styles. -Use \type {\scriptfont} for the script styles, and \type {\scriptscriptfont} for the -scriptscript styles (totalling eight parameters for three font sizes). In the +{\textfont} set the values for the cramped and uncramped display and text styles, +\type {\scriptfont} sets the script styles, and \type {\scriptscriptfont} sets +the scriptscript styles, so we have eight parameters for three font sizes. In the \TFM\ case, assignments only happen in family~2 and family~3 (and of course only for the parameters for which there are font dimensions). @@ -420,11 +424,11 @@ Note 1: \OPENTYPE\ fonts set \type {\Umathlimitabovekern} and \type {\Umathlimitbelowkern} to zero and set \type {\Umathquad} to the font size of the used font, because these are not supported in the \type {MATH} table, -Note 2: \TFM\ fonts do not set \type {\Umathradicalrule} because \TEX82\ uses the -height of the radical instead. When this parameter is indeed not set when -\LUATEX\ has to typeset a radical, a backward compatibility mode will kick in -that assumes that an oldstyle \TEX\ font is used. Also, they do not set \type -{\Umathradicaldegreebefore}, \type {\Umathradicaldegreeafter}, and \type +Note 2: Traditional \TFM\ fonts do not set \type {\Umathradicalrule} because +\TEX82\ uses the height of the radical instead. When this parameter is indeed not +set when \LUATEX\ has to typeset a radical, a backward compatibility mode will +kick in that assumes that an oldstyle \TEX\ font is used. Also, they do not set +\type {\Umathradicaldegreebefore}, \type {\Umathradicaldegreeafter}, and \type {\Umathradicaldegreeraise}. These are then automatically initialized to $5/18$quad, $-10/18$quad, and 60. @@ -732,7 +736,9 @@ $\Uhextensible width 1pt middle 0 "2194$ \blank \startnarrower \getbuffer \stopnarrower \blank \LUATEX\ internally uses a structure that supports \OPENTYPE\ \quote -{MathVariants} as well as \TFM\ \quote {extensible recipes}. +{MathVariants} as well as \TFM\ \quote {extensible recipes}. In most cases where +font metrics are involved we have a different code path for traditional fonts end +\OPENTYPE\ fonts. \section {Extracting values} @@ -754,7 +760,7 @@ will return: [2] [3] [4] \stoptyping -These commands are provides as convenience. before they came available you could +These commands are provides as convenience. Before they came available you could do the following: \starttyping @@ -776,9 +782,9 @@ $$ { {a} \abovewithdelims() exact 4pt {b} }$$ The math parameter table contains some parameters that specify a horizontal and vertical gap for skewed fractions. Of course some guessing is needed in order to -implement something that uses then. And so we now provide a primitive similar to the +implement something that uses them. And so we now provide a primitive similar to the other fraction related ones but with a few options so that one can influence the -rendering. Of course a user can mess around a bit with the parameters +rendering. Of course a user can also mess around a bit with the parameters \type {\Umathskewedfractionhgap} and \type {\Umathskewedfractionvgap}. The syntax used here is: @@ -830,7 +836,7 @@ For Latin Modern The result looks as follows: \subsection {Verbose versions of single-character math commands} \LUATEX\ defines six new primitives that have the same function as -\type {^}, \type {_}, \type {$}, and \type {$$}. %$ +\type {^}, \type {_}, \type {$}, and \type {$$}: %$ \starttabulate[|l|l|l|l|] \NC \bf primitive \NC \bf explanation \NC \NR diff --git a/manual/luatex.pdf b/manual/luatex.pdf index b6cb3d8dcad5e7b6544fcc9315d4bda9b946c6a3..b0d2eda398fbed2c6833968b918bde5e04348386 100644 GIT binary patch delta 6592 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 iPS-Z5>h%Qlmc~9ngI^HGGH8KBPbo4