texlive[74708] Build/source/texk/web2c: LuaTeX: some more never used
commits+lscarso at tug.org
commits+lscarso at tug.org
Thu Mar 20 11:47:33 CET 2025
Revision: 74708
https://tug.org/svn/texlive?view=revision&revision=74708
Author: lscarso
Date: 2025-03-20 11:47:33 +0100 (Thu, 20 Mar 2025)
Log Message:
-----------
LuaTeX: some more never used modes made obsolete + staircase kerns adapted (H.Hagen). LuaTeX 1.23.1
Modified Paths:
--------------
trunk/Build/source/texk/web2c/doc/luatex/luatex-math.tex
trunk/Build/source/texk/web2c/doc/luatex/luatex.pdf
trunk/Build/source/texk/web2c/luatexdir/ChangeLog
trunk/Build/source/texk/web2c/luatexdir/lua/ltexlib.c
trunk/Build/source/texk/web2c/luatexdir/luatex.c
trunk/Build/source/texk/web2c/luatexdir/luatex_svnversion.h
trunk/Build/source/texk/web2c/luatexdir/tex/commands.c
trunk/Build/source/texk/web2c/luatexdir/tex/equivalents.h
trunk/Build/source/texk/web2c/luatexdir/tex/maincontrol.c
trunk/Build/source/texk/web2c/luatexdir/tex/mlist.c
trunk/Build/source/texk/web2c/luatexdir/tex/mlist.h
trunk/Build/source/texk/web2c/luatexdir/tex/texmath.c
Modified: trunk/Build/source/texk/web2c/doc/luatex/luatex-math.tex
===================================================================
--- trunk/Build/source/texk/web2c/doc/luatex/luatex-math.tex 2025-03-20 08:56:52 UTC (rev 74707)
+++ trunk/Build/source/texk/web2c/doc/luatex/luatex-math.tex 2025-03-20 10:47:33 UTC (rev 74708)
@@ -888,94 +888,94 @@
% % This kind of parameters relate to the fact that italic correction in \OPENTYPE\
% % math is bound to fuzzy rules. So, control is the solution.
-\subsection {Script and kerning}
+% \subsection {Script and kerning}
+%
+% \topicindex {math+kerning}
+% \topicindex {math+scripts}
+%
+% If you want to typeset text in math macro packages often provide something \type
+% {\text} which obeys the script sizes. As the definition can be anything there is
+% a good chance that the kerning doesn't come out well when used in a script. Given
+% that the first glyph ends up in a \prm {hbox} we have some control over this.
+% And, as a bonus we also added control over the normal sublist kerning. The \lpr
+% {mathscriptboxmode} parameter defaults to~1.
+%
+% \starttabulate[|c|l|]
+% \DB value \BC meaning \NC \NR
+% \TB
+% \NC \type {0} \NC forget about kerning \NC \NR
+% \NC \type {1} \NC kern math sub lists with a valid glyph \NC \NR
+% \NC \type {2} \NC also kern math sub boxes that have a valid glyph \NC \NR
+% \NC \type {2} \NC only kern math sub boxes with a boundary node present\NC \NR
+% \LL
+% \stoptabulate
+%
+% Here we show some examples. Of course this doesn't solve all our problems, if
+% only because some fonts have characters with bounding boxes that compensate for
+% italics, while other fonts can lack kerns.
+%
+% \startbuffer[1]
+% $T_{\tf fluff}$
+% \stopbuffer
+%
+% \startbuffer[2]
+% $T_{\text{fluff}}$
+% \stopbuffer
+%
+% \startbuffer[3]
+% $T_{\text{\boundary1 fluff}}$
+% \stopbuffer
+%
+% \unexpanded\def\Show#1#2#3%
+% {\doifelsenothing{#3}
+% {\small\tx\typeinlinebuffer[#1]}
+% {\doifelse{#3}{-}
+% {\small\bf\tt mode #2}
+% {\switchtobodyfont[#3]\showfontkerns\showglyphs\mathscriptboxmode#2\relax\inlinebuffer[#1]}}}
+%
+% \starttabulate[|lBT|c|c|c|c|c|]
+% \NC \NC \Show{1}{0}{} \NC\Show{1}{1}{} \NC \Show{2}{1}{} \NC \Show{2}{2}{} \NC \Show{3}{3}{} \NC \NR
+% \NC \NC \Show{1}{0}{-} \NC\Show{1}{1}{-} \NC \Show{2}{1}{-} \NC \Show{2}{2}{-} \NC \Show{3}{3}{-} \NC \NR
+% \NC modern \NC \Show{1}{0}{modern} \NC\Show{1}{1}{modern} \NC \Show{2}{1}{modern} \NC \Show{2}{2}{modern} \NC \Show{3}{3}{modern} \NC \NR
+% \NC lucidaot \NC \Show{1}{0}{lucidaot} \NC\Show{1}{1}{lucidaot} \NC \Show{2}{1}{lucidaot} \NC \Show{2}{2}{lucidaot} \NC \Show{3}{3}{lucidaot} \NC \NR
+% \NC pagella \NC \Show{1}{0}{pagella} \NC\Show{1}{1}{pagella} \NC \Show{2}{1}{pagella} \NC \Show{2}{2}{pagella} \NC \Show{3}{3}{pagella} \NC \NR
+% \NC cambria \NC \Show{1}{0}{cambria} \NC\Show{1}{1}{cambria} \NC \Show{2}{1}{cambria} \NC \Show{2}{2}{cambria} \NC \Show{3}{3}{cambria} \NC \NR
+% \NC dejavu \NC \Show{1}{0}{dejavu} \NC\Show{1}{1}{dejavu} \NC \Show{2}{1}{dejavu} \NC \Show{2}{2}{dejavu} \NC \Show{3}{3}{dejavu} \NC \NR
+% \stoptabulate
+%
+% % Kerning between a character subscript is controlled by \lpr {mathscriptcharmode}
+% % which also defaults to~1.
+%
+% Here is another example. Internally we tag kerns as italic kerns or font kerns
+% where font kerns result from the staircase kern tables. In 2018 fonts like Latin
+% Modern and Pagella rely on cheats with the boundingbox, Cambria uses staircase
+% kerns and Lucida a mixture. Depending on how fonts evolve we might add some more
+% control over what one can turn on and off.
+%
+% \def\MathSample#1#2#3%
+% {\NC
+% #1 \NC
+% #2 \NC
+% \showglyphdata \switchtobodyfont[#2,17.3pt]$#3T_{f}$ \NC
+% \showglyphdata \switchtobodyfont[#2,17.3pt]$#3\gamma_{e}$ \NC
+% \showglyphdata \switchtobodyfont[#2,17.3pt]$#3\gamma_{ee}$ \NC
+% \showglyphdata \switchtobodyfont[#2,17.3pt]$#3T_{\tf fluff}$ \NC
+% \NR}
+%
+% \starttabulate[|Tl|Tl|l|l|l|l|]
+% \FL
+% \MathSample{normal}{modern} {\mr}
+% \MathSample{} {pagella} {\mr}
+% \MathSample{} {cambria} {\mr}
+% \MathSample{} {lucidaot}{\mr}
+% \ML
+% \MathSample{bold} {modern} {\mb}
+% \MathSample{} {pagella} {\mb}
+% \MathSample{} {cambria} {\mb}
+% \MathSample{} {lucidaot}{\mb}
+% \LL
+% \stoptabulate
-\topicindex {math+kerning}
-\topicindex {math+scripts}
-
-If you want to typeset text in math macro packages often provide something \type
-{\text} which obeys the script sizes. As the definition can be anything there is
-a good chance that the kerning doesn't come out well when used in a script. Given
-that the first glyph ends up in a \prm {hbox} we have some control over this.
-And, as a bonus we also added control over the normal sublist kerning. The \lpr
-{mathscriptboxmode} parameter defaults to~1.
-
-\starttabulate[|c|l|]
-\DB value \BC meaning \NC \NR
-\TB
-\NC \type {0} \NC forget about kerning \NC \NR
-\NC \type {1} \NC kern math sub lists with a valid glyph \NC \NR
-\NC \type {2} \NC also kern math sub boxes that have a valid glyph \NC \NR
-\NC \type {2} \NC only kern math sub boxes with a boundary node present\NC \NR
-\LL
-\stoptabulate
-
-Here we show some examples. Of course this doesn't solve all our problems, if
-only because some fonts have characters with bounding boxes that compensate for
-italics, while other fonts can lack kerns.
-
-\startbuffer[1]
- $T_{\tf fluff}$
-\stopbuffer
-
-\startbuffer[2]
- $T_{\text{fluff}}$
-\stopbuffer
-
-\startbuffer[3]
- $T_{\text{\boundary1 fluff}}$
-\stopbuffer
-
-\unexpanded\def\Show#1#2#3%
- {\doifelsenothing{#3}
- {\small\tx\typeinlinebuffer[#1]}
- {\doifelse{#3}{-}
- {\small\bf\tt mode #2}
- {\switchtobodyfont[#3]\showfontkerns\showglyphs\mathscriptboxmode#2\relax\inlinebuffer[#1]}}}
-
-\starttabulate[|lBT|c|c|c|c|c|]
- \NC \NC \Show{1}{0}{} \NC\Show{1}{1}{} \NC \Show{2}{1}{} \NC \Show{2}{2}{} \NC \Show{3}{3}{} \NC \NR
- \NC \NC \Show{1}{0}{-} \NC\Show{1}{1}{-} \NC \Show{2}{1}{-} \NC \Show{2}{2}{-} \NC \Show{3}{3}{-} \NC \NR
- \NC modern \NC \Show{1}{0}{modern} \NC\Show{1}{1}{modern} \NC \Show{2}{1}{modern} \NC \Show{2}{2}{modern} \NC \Show{3}{3}{modern} \NC \NR
- \NC lucidaot \NC \Show{1}{0}{lucidaot} \NC\Show{1}{1}{lucidaot} \NC \Show{2}{1}{lucidaot} \NC \Show{2}{2}{lucidaot} \NC \Show{3}{3}{lucidaot} \NC \NR
- \NC pagella \NC \Show{1}{0}{pagella} \NC\Show{1}{1}{pagella} \NC \Show{2}{1}{pagella} \NC \Show{2}{2}{pagella} \NC \Show{3}{3}{pagella} \NC \NR
- \NC cambria \NC \Show{1}{0}{cambria} \NC\Show{1}{1}{cambria} \NC \Show{2}{1}{cambria} \NC \Show{2}{2}{cambria} \NC \Show{3}{3}{cambria} \NC \NR
- \NC dejavu \NC \Show{1}{0}{dejavu} \NC\Show{1}{1}{dejavu} \NC \Show{2}{1}{dejavu} \NC \Show{2}{2}{dejavu} \NC \Show{3}{3}{dejavu} \NC \NR
-\stoptabulate
-
-Kerning between a character subscript is controlled by \lpr {mathscriptcharmode}
-which also defaults to~1.
-
-Here is another example. Internally we tag kerns as italic kerns or font kerns
-where font kerns result from the staircase kern tables. In 2018 fonts like Latin
-Modern and Pagella rely on cheats with the boundingbox, Cambria uses staircase
-kerns and Lucida a mixture. Depending on how fonts evolve we might add some more
-control over what one can turn on and off.
-
-\def\MathSample#1#2#3%
- {\NC
- #1 \NC
- #2 \NC
- \showglyphdata \switchtobodyfont[#2,17.3pt]$#3T_{f}$ \NC
- \showglyphdata \switchtobodyfont[#2,17.3pt]$#3\gamma_{e}$ \NC
- \showglyphdata \switchtobodyfont[#2,17.3pt]$#3\gamma_{ee}$ \NC
- \showglyphdata \switchtobodyfont[#2,17.3pt]$#3T_{\tf fluff}$ \NC
- \NR}
-
-\starttabulate[|Tl|Tl|l|l|l|l|]
- \FL
- \MathSample{normal}{modern} {\mr}
- \MathSample{} {pagella} {\mr}
- \MathSample{} {cambria} {\mr}
- \MathSample{} {lucidaot}{\mr}
- \ML
- \MathSample{bold} {modern} {\mb}
- \MathSample{} {pagella} {\mb}
- \MathSample{} {cambria} {\mb}
- \MathSample{} {lucidaot}{\mb}
- \LL
-\stoptabulate
-
\subsection{Fixed scripts}
We have three parameters that are used for this fixed anchoring:
@@ -1055,52 +1055,52 @@
\startsection[title={Math constructs}]
-\subsection {Unscaled fences}
+% \subsection {Unscaled fences}
+%
+% \topicindex {math+fences}
+%
+% The \lpr {mathdelimitersmode} primitive is experimental and deals with the
+% following (potential) problems. Three bits can be set. The first bit prevents an
+% unwanted shift when the fence symbol is not scaled (a cambria side effect). The
+% second bit forces italic correction between a preceding character ordinal and the
+% fenced subformula, while the third bit turns that subformula into an ordinary so
+% that the same spacing applies as with unfenced variants. Here we show Cambria
+% (with \lpr {mathitalicsmode} enabled).
+%
+% \starttexdefinition Whatever #1
+% \NC \type{\mathdelimitersmode = #1}
+% \NC \mathitalicsmode1\mathdelimitersmode#1\ruledhbox{\showglyphs\showfontkerns\showfontitalics$f(x)$}
+% \NC \mathitalicsmode1\mathdelimitersmode#1\ruledhbox{\showglyphs\showfontkerns\showfontitalics$f\left(x\right)$}
+% \NC \NR
+% \stoptexdefinition
+%
+% \start
+% \switchtobodyfont[cambria]
+% \starttabulate[|l|l|l|]
+% \Whatever{0}\Whatever{1}\Whatever{2}\Whatever{3}%
+% \Whatever{4}\Whatever{5}\Whatever{6}\Whatever{7}%
+% \stoptabulate
+% \stop
+%
+% So, when set to 7 fenced subformulas with unscaled delimiters come out the same
+% as unfenced ones. This can be handy for cases where one is forced to use \prm
+% {left} and \prm {right} always because of unpredictable content. As said, it's an
+% experimental feature (which somehow fits in the exceptional way fences are dealt
+% with in the engine). The full list of flags is given in the next table:
+%
+% \starttabulate[|c|l|]
+% \DB value \BC meaning \NC \NR
+% \TB
+% \NC \type{"01} \NC don't apply the usual shift \NC \NR
+% \NC \type{"02} \NC apply italic correction when possible \NC \NR
+% \NC \type{"04} \NC force an ordinary subformula \NC \NR
+% \NC \type{"08} \NC no shift when a base character \NC \NR
+% \NC \type{"10} \NC only shift when an extensible \NC \NR
+% \LL
+% \stoptabulate
+%
+% The effect can depend on the font (and for Cambria one can use for instance \type {"16}).
-\topicindex {math+fences}
-
-The \lpr {mathdelimitersmode} primitive is experimental and deals with the
-following (potential) problems. Three bits can be set. The first bit prevents an
-unwanted shift when the fence symbol is not scaled (a cambria side effect). The
-second bit forces italic correction between a preceding character ordinal and the
-fenced subformula, while the third bit turns that subformula into an ordinary so
-that the same spacing applies as with unfenced variants. Here we show Cambria
-(with \lpr {mathitalicsmode} enabled).
-
-\starttexdefinition Whatever #1
- \NC \type{\mathdelimitersmode = #1}
- \NC \mathitalicsmode1\mathdelimitersmode#1\ruledhbox{\showglyphs\showfontkerns\showfontitalics$f(x)$}
- \NC \mathitalicsmode1\mathdelimitersmode#1\ruledhbox{\showglyphs\showfontkerns\showfontitalics$f\left(x\right)$}
- \NC \NR
-\stoptexdefinition
-
-\start
- \switchtobodyfont[cambria]
- \starttabulate[|l|l|l|]
- \Whatever{0}\Whatever{1}\Whatever{2}\Whatever{3}%
- \Whatever{4}\Whatever{5}\Whatever{6}\Whatever{7}%
- \stoptabulate
-\stop
-
-So, when set to 7 fenced subformulas with unscaled delimiters come out the same
-as unfenced ones. This can be handy for cases where one is forced to use \prm
-{left} and \prm {right} always because of unpredictable content. As said, it's an
-experimental feature (which somehow fits in the exceptional way fences are dealt
-with in the engine). The full list of flags is given in the next table:
-
-\starttabulate[|c|l|]
-\DB value \BC meaning \NC \NR
-\TB
-\NC \type{"01} \NC don't apply the usual shift \NC \NR
-\NC \type{"02} \NC apply italic correction when possible \NC \NR
-\NC \type{"04} \NC force an ordinary subformula \NC \NR
-\NC \type{"08} \NC no shift when a base character \NC \NR
-\NC \type{"10} \NC only shift when an extensible \NC \NR
-\LL
-\stoptabulate
-
-The effect can depend on the font (and for Cambria one can use for instance \type {"16}).
-
\subsection[mathacc]{Accent handling}
\topicindex {math+accents}
@@ -1570,49 +1570,60 @@
\startsection[title={Goodies}]
-\subsection {Flattening: \lpr {mathflattenmode}}
+\subsection {Obsolete}
-\topicindex {math+flattening}
+Per TL 2026 the following primitives are \quote {ignored}. They were not used in
+two decades unless by \CONTEXT\ for exploring variants but we can do that
+differently now. Obsolete commands that trigger a warning: \typ {\mathoption},
+\typ {\mathitalicssmode}, \typ {\mathnolimitsmode}, \typ {\mathscriptboxmode},
+\typ {\mathscriptcharmode}, \typ {\mathflattenmode}, \typ {\mathdefaultsmode},
+\typ {\mathrulethicknessmode}, \typ {\mathdelimitersmode}. Also no longer used
+are the parameters \typ {\Umathnolimitsupfactor} and \typ
+{\Umathnolimitsubfactor}.
-The \TEX\ math engine collapses \type {ord} noads without sub- and superscripts
-and a character as nucleus. and which has the side effect that in \OPENTYPE\ mode
-italic corrections are applied (given that they are enabled).
+% \subsection {Flattening: \lpr {mathflattenmode}}
+%
+% \topicindex {math+flattening}
+%
+% The \TEX\ math engine collapses \type {ord} noads without sub- and superscripts
+% and a character as nucleus. and which has the side effect that in \OPENTYPE\ mode
+% italic corrections are applied (given that they are enabled).
+%
+% \startbuffer[sample]
+% \switchtobodyfont[modern]
+% $V \mathbin{\mathbin{v}} V$\par
+% $V \mathord{\mathord{v}} V$\par
+% \stopbuffer
+%
+% \typebuffer[sample]
+%
+% This renders as:
+%
+% \blank \start \mathflattenmode\plusone \getbuffer[sample] \stop \blank
+%
+% When we set \lpr {mathflattenmode} to 31 we get:
+%
+% \blank \start \mathflattenmode\numexpr1+2+4+8+16\relax \getbuffer[sample] \stop \blank
+%
+% When you see no difference, then the font probably has the proper character
+% dimensions and no italic correction is needed. For Latin Modern (at least till
+% 2018) there was a visual difference. In that respect this parameter is not always
+% needed unless of course you want efficient math lists anyway.
+%
+% You can influence flattening by adding the appropriate number to the value of the
+% mode parameter. The default value is~1.
+%
+% \starttabulate[|Tc|c|]
+% \DB mode \BC class \NC \NR
+% \TB
+% \NC 1 \NC ord \NC \NR
+% \NC 2 \NC bin \NC \NR
+% \NC 4 \NC rel \NC \NR
+% \NC 8 \NC punct \NC \NR
+% \NC 16 \NC inner \NC \NR
+% \LL
+% \stoptabulate
-\startbuffer[sample]
-\switchtobodyfont[modern]
-$V \mathbin{\mathbin{v}} V$\par
-$V \mathord{\mathord{v}} V$\par
-\stopbuffer
-
-\typebuffer[sample]
-
-This renders as:
-
-\blank \start \mathflattenmode\plusone \getbuffer[sample] \stop \blank
-
-When we set \lpr {mathflattenmode} to 31 we get:
-
-\blank \start \mathflattenmode\numexpr1+2+4+8+16\relax \getbuffer[sample] \stop \blank
-
-When you see no difference, then the font probably has the proper character
-dimensions and no italic correction is needed. For Latin Modern (at least till
-2018) there was a visual difference. In that respect this parameter is not always
-needed unless of course you want efficient math lists anyway.
-
-You can influence flattening by adding the appropriate number to the value of the
-mode parameter. The default value is~1.
-
-\starttabulate[|Tc|c|]
-\DB mode \BC class \NC \NR
-\TB
-\NC 1 \NC ord \NC \NR
-\NC 2 \NC bin \NC \NR
-\NC 4 \NC rel \NC \NR
-\NC 8 \NC punct \NC \NR
-\NC 16 \NC inner \NC \NR
-\LL
-\stoptabulate
-
\subsection {Less Tracing}
\topicindex {math+tracing}
@@ -1621,45 +1632,45 @@
to limit tracing. Only when \type {tracingassigns} and|/|or \type
{tracingrestores} are set to~2 or more they will be traced.
-\subsection {Math options with \lpr {mathdefaultsmode}}
+% \subsection {Math options with \lpr {mathdefaultsmode}}
+%
+% This option has been introduced because \LATEX\ developers wanted some of the
+% defaults to be different from the ones that were set in stone when we froze
+% \LUATEX. The default values are:
+%
+% \starttabulate[|l|c|c|]
+% \DB \BC scanning \BC rendering \NC \NR
+% \TB
+% \NC radical/root \NC cramped \NC cramped \NC \NR
+% \NC under delimiter \NC cramped \NC supstyle \NC \NR
+% \NC over delimiter \NC cramped \NC substyle \NC \NR
+% \NC delimiter under \NC cramped \NC current \NC \NR
+% \NC delimiter over \NC cramped \NC current \NC \NR
+% \LL
+% \stoptabulate
+%
+% When \type {\mathdefaultsmode} is larger than zero, we have:
+%
+% \starttabulate[|l|c|c|]
+% \DB \BC scanning \BC rendering \NC \NR
+% \TB
+% \NC radical/root \NC cramped \NC cramped \NC \NR
+% \NC under delimiter \NC substyle \NC substyle \NC \NR
+% \NC over delimiter \NC supstyle \NC supstyle \NC \NR
+% \NC delimiter under \NC current \NC current \NC \NR
+% \NC delimiter over \NC cramped \NC cramped \NC \NR
+% \LL
+% \stoptabulate
+%
+% It is outside the scope of this manual to discuss the rationale behind these
+% defaults. The zero values date back from the early times. If needed you can
+% explicitly set the style in the content argument.
-This option has been introduced because \LATEX\ developers wanted some of the
-defaults to be different from the ones that were set in stone when we froze
-\LUATEX. The default values are:
+% \subsection {Math options with \lpr {mathoption}}
+%
+% This command is now obsolete and triggers an error message. It was only meant
+% for experiments.
-\starttabulate[|l|c|c|]
-\DB \BC scanning \BC rendering \NC \NR
-\TB
-\NC radical/root \NC cramped \NC cramped \NC \NR
-\NC under delimiter \NC cramped \NC supstyle \NC \NR
-\NC over delimiter \NC cramped \NC substyle \NC \NR
-\NC delimiter under \NC cramped \NC current \NC \NR
-\NC delimiter over \NC cramped \NC current \NC \NR
-\LL
-\stoptabulate
-
-When \type {\mathdefaultsmode} is larger than zero, we have:
-
-\starttabulate[|l|c|c|]
-\DB \BC scanning \BC rendering \NC \NR
-\TB
-\NC radical/root \NC cramped \NC cramped \NC \NR
-\NC under delimiter \NC substyle \NC substyle \NC \NR
-\NC over delimiter \NC supstyle \NC supstyle \NC \NR
-\NC delimiter under \NC current \NC current \NC \NR
-\NC delimiter over \NC cramped \NC cramped \NC \NR
-\LL
-\stoptabulate
-
-It is outside the scope of this manual to discuss the rationale behind these
-defaults. The zero values date back from the early times. If needed you can
-explicitly set the style in the content argument.
-
-\subsection {Math options with \lpr {mathoption}}
-
-This command is now obsolete and triggers an error message. It was only meant
-for experiments.
-
% % even more obsolete:
% The logic in the math engine is rather complex and there are often no universal
Modified: trunk/Build/source/texk/web2c/doc/luatex/luatex.pdf
===================================================================
(Binary files differ)
Modified: trunk/Build/source/texk/web2c/luatexdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/ChangeLog 2025-03-20 08:56:52 UTC (rev 74707)
+++ trunk/Build/source/texk/web2c/luatexdir/ChangeLog 2025-03-20 10:47:33 UTC (rev 74708)
@@ -1,4 +1,13 @@
-2025-03-17 Luigi Scarso <luigi.scarso at gmail.com>
+2025-03-20 Luigi Scarso <luigi.scarso at gmail.com>
+ * some more never used modes made obsolete + staircase kerns adapted (H.Hagen)
+ LuaTeX 1.23.1
+
+
+2025-03-18 Luigi Scarso <luigi.scarso at gmail.com>
+ * LuaTeX 1.23.0
+
+
+025-03-17 Luigi Scarso <luigi.scarso at gmail.com>
* final solution for italic (H.Hagen)
Modified: trunk/Build/source/texk/web2c/luatexdir/lua/ltexlib.c
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/lua/ltexlib.c 2025-03-20 08:56:52 UTC (rev 74707)
+++ trunk/Build/source/texk/web2c/luatexdir/lua/ltexlib.c 2025-03-20 10:47:33 UTC (rev 74708)
@@ -3564,6 +3564,21 @@
return 1;
}
+/*tex
+ This setter is only there so that we can still generate older \CONTEXT\ documents (like
+ articles and progress reports) that refer to some now obsolete commands. Some of these
+ math control are still present in \LUAMETATEX\ but in a different way. In \LUATEX\ they
+ became obsolete in 2025 (prelude to TL 2026) because we (MS/HH) notices that they'd
+ never been used anywhere else.
+*/
+
+static int tex_permitmathobsolete(lua_State * L)
+{
+ permit_math_obsolete = lua_toboolean(L, 1);
+ formatted_warning("math","obsolete commands are %s", permit_math_obsolete ? "permitted" : "blocked" );
+ return 0;
+}
+
/* till here */
void init_tex_table(lua_State * L)
@@ -3687,6 +3702,8 @@
{ "quittoks", quittoks },
{ "forcehmode", forcehmode },
{ "getmodevalues", tex_getmodevalues },
+ /* private */
+ { "permitmathobsolete", tex_permitmathobsolete },
/* sentinel */
{ NULL, NULL }
};
Modified: trunk/Build/source/texk/web2c/luatexdir/luatex.c
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/luatex.c 2025-03-20 08:56:52 UTC (rev 74707)
+++ trunk/Build/source/texk/web2c/luatexdir/luatex.c 2025-03-20 10:47:33 UTC (rev 74708)
@@ -32,9 +32,9 @@
stick to "0" upto "9" so users can expect a number represented as string.
*/
-int luatex_version = 122;
-int luatex_revision = '0';
-const char *luatex_version_string = "1.22.0";
+int luatex_version = 123;
+int luatex_revision = '1';
+const char *luatex_version_string = "1.23.1";
const char *engine_name = my_name;
#include <kpathsea/c-ctype.h>
Modified: trunk/Build/source/texk/web2c/luatexdir/luatex_svnversion.h
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/luatex_svnversion.h 2025-03-20 08:56:52 UTC (rev 74707)
+++ trunk/Build/source/texk/web2c/luatexdir/luatex_svnversion.h 2025-03-20 10:47:33 UTC (rev 74708)
@@ -1,4 +1,4 @@
#ifndef luatex_svn_revision_h
#define luatex_svn_revision_h
-#define luatex_svn_revision 7674
+#define luatex_svn_revision 7676
#endif
Modified: trunk/Build/source/texk/web2c/luatexdir/tex/commands.c
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/tex/commands.c 2025-03-20 08:56:52 UTC (rev 74707)
+++ trunk/Build/source/texk/web2c/luatexdir/tex/commands.c 2025-03-20 10:47:33 UTC (rev 74708)
@@ -54,10 +54,6 @@
primitive_tex("thickmuskip", assign_mu_glue_cmd, glue_base + thick_mu_skip_code, glue_base + thin_mu_skip_code);
primitive_luatex("mathsurroundskip", assign_glue_cmd, glue_base + math_skip_code, glue_base);
primitive_luatex("mathsurroundmode", assign_int_cmd, int_base + math_skip_mode_code, int_base);
- primitive_luatex("mathscriptboxmode", assign_int_cmd, int_base + math_script_box_mode_code, int_base);
- primitive_luatex("mathscriptcharmode", assign_int_cmd, int_base + math_script_char_mode_code, int_base);
- primitive_luatex("mathrulethicknessmode", assign_int_cmd, int_base + math_rule_thickness_mode_code, int_base);
- primitive_luatex("mathflattenmode", assign_int_cmd, int_base + math_flatten_mode_code, int_base);
primitive_tex("output", assign_toks_cmd, output_routine_loc, local_base);
primitive_tex("everypar", assign_toks_cmd, every_par_loc, local_base);
primitive_tex("everymath", assign_toks_cmd, every_math_loc, local_base);
@@ -86,7 +82,6 @@
primitive_tex("predisplaypenalty", assign_int_cmd, int_base + pre_display_penalty_code, int_base);
primitive_tex("postdisplaypenalty", assign_int_cmd, int_base + post_display_penalty_code, int_base);
primitive_luatex("mathpenaltiesmode", assign_int_cmd, int_base + math_penalties_mode_code, int_base);
- primitive_luatex("mathdelimitersmode", assign_int_cmd, int_base + math_delimiters_mode_code, int_base);
primitive_tex("interlinepenalty", assign_int_cmd, int_base + inter_line_penalty_code, int_base);
primitive_tex("doublehyphendemerits", assign_int_cmd, int_base + double_hyphen_demerits_code, int_base);
primitive_tex("finalhyphendemerits", assign_int_cmd, int_base + final_hyphen_demerits_code, int_base);
@@ -177,7 +172,6 @@
primitive_luatex("exceptionpenalty", assign_int_cmd, int_base + exception_penalty_code, int_base);
primitive_luatex("fixupboxesmode", assign_int_cmd, int_base + fixup_boxes_code, int_base);
primitive_luatex("glyphdimensionsmode", assign_int_cmd, int_base + glyph_dimensions_code, int_base);
- primitive_luatex("mathdefaultsmode", assign_int_cmd, int_base + math_defaults_mode_code, int_base);
primitive_luatex("discretionaryligaturemode", assign_int_cmd, int_base + discretionary_ligature_mode_code, int_base);
primitive_etex("partokencontext", assign_int_cmd, int_base + partoken_context_code, int_base);
primitive_luatex("mathemptydisplaymode", assign_int_cmd, int_base + math_empty_display_mode_code, int_base);
@@ -804,11 +798,21 @@
primitive_luatex("mathrulesfam", assign_int_cmd, int_base + math_rules_fam_code, int_base);
primitive_luatex("synctex", assign_int_cmd, int_base + synctex_code, int_base);
- /* obsolete: */
+ /*
+ These are obsolete per TL 2026 because we decided to stick to the more traditional \TEX\
+ approach: less discussion, confusion and documentation that way. The primitives are not
+ used in TL 2025 but we keep them for older documents that describe them (articles).
+ */
primitive_luatex("mathoption", option_cmd, 0, 0);
primitive_luatex("mathitalicsmode", assign_int_cmd, int_base + math_italics_mode_code, int_base);
primitive_luatex("mathnolimitsmode", assign_int_cmd, int_base + math_nolimits_mode_code, int_base);
+ primitive_luatex("mathscriptboxmode", assign_int_cmd, int_base + math_script_box_mode_code, int_base);
+ primitive_luatex("mathscriptcharmode", assign_int_cmd, int_base + math_script_char_mode_code, int_base);
+ primitive_luatex("mathflattenmode", assign_int_cmd, int_base + math_flatten_mode_code, int_base);
+ primitive_luatex("mathdefaultsmode", assign_int_cmd, int_base + math_defaults_mode_code, int_base);
+ primitive_luatex("mathrulethicknessmode", assign_int_cmd, int_base + math_rule_thickness_mode_code, int_base);
+ primitive_luatex("mathdelimitersmode", assign_int_cmd, int_base + math_delimiters_mode_code, int_base);
/* */
Modified: trunk/Build/source/texk/web2c/luatexdir/tex/equivalents.h
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/tex/equivalents.h 2025-03-20 08:56:52 UTC (rev 74707)
+++ trunk/Build/source/texk/web2c/luatexdir/tex/equivalents.h 2025-03-20 10:47:33 UTC (rev 74708)
@@ -300,10 +300,10 @@
# define pre_rel_penalty_code 108
# define math_penalties_mode_code 109
# define math_delimiters_mode_code 110
-# define math_script_box_mode_code 111
-# define math_script_char_mode_code 112
+# define math_script_box_mode_code 111 /* obsolete */
+# define math_script_char_mode_code 112 /* obsolete */
# define math_rule_thickness_mode_code 113
-# define math_flatten_mode_code 114
+# define math_flatten_mode_code 114 /* obsolete */
# define copy_lua_input_nodes_code 115
# define suppress_primitive_error_code 116
@@ -662,11 +662,6 @@
#define pre_bin_op_penalty_par int_par(pre_bin_op_penalty_code)
#define pre_rel_penalty_par int_par(pre_rel_penalty_code)
#define math_penalties_mode_par int_par(math_penalties_mode_code)
-#define math_delimiters_mode_par int_par(math_delimiters_mode_code)
-#define math_script_box_mode_par int_par(math_script_box_mode_code)
-#define math_script_char_mode_par int_par(math_script_char_mode_code)
-#define math_rule_thickness_mode_par int_par(math_rule_thickness_mode_code)
-#define math_flatten_mode_par int_par(math_flatten_mode_code)
#define null_delimiter_space_par dimen_par(null_delimiter_space_code)
#define disable_lig_par int_par(disable_lig_code)
#define disable_kern_par int_par(disable_kern_code)
@@ -797,7 +792,6 @@
#define fixup_boxes_par int_par(fixup_boxes_code)
#define glyph_dimensions_par int_par(glyph_dimensions_code)
-#define math_defaults_mode_par int_par(math_defaults_mode_code)
#define math_eq_dir_mode_par int_par(math_eq_dir_mode_code)
#define discretionary_ligature_mode_par int_par(discretionary_ligature_mode_code)
#define partoken_context_code_par int_par(partoken_context_code)
@@ -810,6 +804,17 @@
#define math_use_current_family_code 7
+/* obsolete */
+
+#define math_italics_mode_par int_par(math_italics_mode_code)
+#define math_script_char_mode_par int_par(math_script_char_mode_code)
+#define math_script_box_mode_par int_par(math_script_box_mode_code)
+#define math_nolimits_mode_par int_par(math_nolimits_mode_code)
+#define math_flatten_mode_par int_par(math_flatten_mode_code)
+#define math_defaults_mode_par int_par(math_defaults_mode_code)
+#define math_rule_thickness_mode_par int_par(math_rule_thickness_mode_code)
+#define math_delimiters_mode_par int_par(math_delimiters_mode_code)
+
/*
#define box(A) equiv(box_base+(A))
#define box(A) eqtb[box_base+(A)].hh.rh
Modified: trunk/Build/source/texk/web2c/luatexdir/tex/maincontrol.c
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/tex/maincontrol.c 2025-03-20 08:56:52 UTC (rev 74707)
+++ trunk/Build/source/texk/web2c/luatexdir/tex/maincontrol.c 2025-03-20 10:47:33 UTC (rev 74708)
@@ -3581,6 +3581,64 @@
word_define(p, val);
}
break;
+ /* */
+ case math_italics_mode_code:
+ if (permit_math_obsolete) {
+ if (math_italics_mode_par != val) {
+ normal_warning("math", "\\mathitalicsmode is obsolete");
+ }
+ word_define(p, val);
+ }
+ break;
+ case math_nolimits_mode_code:
+ if (permit_math_obsolete) {
+ if (math_nolimits_mode_par != val) {
+ normal_warning("math", "\\mathnolimitssmode is obsolete");
+ }
+ word_define(p, val);
+ }
+ break;
+ case math_script_char_mode_code:
+ if (permit_math_obsolete) {
+ if (math_script_char_mode_par != val) {
+ normal_warning("math", "\\mathscriptcharmode is obsolete");
+ }
+ word_define(p, val);
+ }
+ break;
+ case math_script_box_mode_code:
+ if (permit_math_obsolete) {
+ if (math_script_box_mode_par != val) {
+ normal_warning("math", "\\mathscriptboxmode is obsolete");
+ }
+ word_define(p, val);
+ }
+ break;
+ case math_flatten_mode_code:
+ if (permit_math_obsolete) {
+ if (math_flatten_mode_par != val) {
+ normal_warning("math", "\\mathflattenmode is obsolete");
+ }
+ word_define(p, val);
+ }
+ break;
+ case math_defaults_mode_code:
+ if (permit_math_obsolete) {
+ if (math_defaults_mode_par != val) {
+ normal_warning("math", "\\mathdefaultsmode is obsolete");
+ }
+ word_define(p, val);
+ }
+ break;
+ case math_delimiters_mode_code:
+ if (permit_math_obsolete) {
+ if (math_delimiters_mode_par != val) {
+ normal_warning("math", "\\mathdelimitersmode is obsolete");
+ }
+ word_define(p, val);
+ }
+ break;
+ /* */
default:
word_define(p, val);
break;
@@ -4317,8 +4375,12 @@
max_dead_cycles_par = 25;
math_pre_display_gap_factor_par = 2000;
pre_bin_op_penalty_par = inf_penalty;
- math_script_box_mode_par = 1;
- math_script_char_mode_par = 1;
+ /* obsolete but kept for old documents */
+ math_script_box_mode_par = 1;
+ math_script_char_mode_par = 1;
+ math_flatten_mode_par = 1;
+ math_defaults_mode_par = 1; /* was 0 in TL 2025 but set by latex to 1 */
+ /* */
pre_rel_penalty_par = inf_penalty;
compound_hyphen_mode_par = 1;
escape_char_par = '\\';
@@ -4347,7 +4409,6 @@
font_bytes = 0;
px_dimen_par = one_bp;
math_eqno_gap_step_par = 1000 ;
- math_flatten_mode_par = 1; /* ord */
var_fam_par = -1;
cs_text(frozen_protection) = maketexstring("inaccessible");
format_ident = maketexstring(" (INITEX)");
Modified: trunk/Build/source/texk/web2c/luatexdir/tex/mlist.c
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/tex/mlist.c 2025-03-20 08:56:52 UTC (rev 74707)
+++ trunk/Build/source/texk/web2c/luatexdir/tex/mlist.c 2025-03-20 10:47:33 UTC (rev 74708)
@@ -19,14 +19,27 @@
/*tex
- These are now obsolete:
+ These are now obsolete because we found otu that no one uses them. A few are used in \CONTEXT\
+ but we can deal with that. Most users moved on to \LUAMETATEX\ where we plenty of ways to
+ control the engine. Some code is still present because we need it for legacy progress reports.
\starttyping
+ \mathoption
+ \mathitalicssmode
+ \mathnolimitsmode
+ \mathscriptboxmode
+ \mathscriptcharmode
+ \mathflattenmode
+ \mathdefaultsmode
+ \mathrulethicknessmode
+ \mathdelimitersmode
+ \stoptyping
+
+ Also no longer used are:
+
+ \starttyping
\Umathnolimitsupfactor
\Umathnolimitsubfactor
- \mathnolimitsmode
- \mathitalicssmode
- \mathoption
\stoptyping
*/
@@ -137,6 +150,8 @@
*/
+int permit_math_obsolete = 0;
+
#define is_new_mathfont(A) ((font_math_params(A) > 0))
#define is_old_mathfont(A,B) ((font_math_params(A) == 0) && (font_params(A) >= (B)))
#define assume_new_math(A) ((font_math_params(A) > 0) && (font_oldmath(A) == 0))
@@ -3550,7 +3565,7 @@
krn = (krn_l + krn_r);
krn_l = math_kern_at(l_f, l_c, top_right_kern, corr_height_bot);
krn_r = math_kern_at(r_f, r_c, bottom_left_kern, corr_height_bot);
- if ((krn_l + krn_r) < krn)
+ if((krn_l + krn_r) >= krn) /* was < */
krn = (krn_l + krn_r);
return (krn);
} else if (cmd == sub_mark_cmd) {
@@ -3562,7 +3577,7 @@
krn = (krn_l + krn_r);
krn_l = math_kern_at(l_f, l_c, bottom_right_kern, corr_height_bot);
krn_r = math_kern_at(r_f, r_c, top_left_kern, corr_height_bot);
- if ((krn_l + krn_r) < krn)
+ if((krn_l + krn_r) >= krn) /* was < */
krn = (krn_l + krn_r);
return (krn);
} else {
@@ -3610,119 +3625,136 @@
the new fonts so eventualy there will be an option to ignore such
corrections.
+ We used to use the base characters corner kerns (we only had cambria to test)
+ but now use the ssty ones instead.
+
+ In the following code the |\mathscriptcharmode| and |\mathscriptboxmode| are
+ still present but they are obsolete. We keep them because older documentation
+ can then be run.
+
*/
#define analyze_script(init,su_n,su_f,su_c) do { \
- su_n = init; \
- if (su_n != null) { \
- if (math_script_char_mode_par > 0 && type(su_n) == math_char_node) { \
- fetch(su_n); \
- if (char_exists(cur_f, cur_c)) { \
- su_f = cur_f; \
- su_c = cur_c; \
- } else { \
- su_n = null; \
- } \
- } else if (math_script_box_mode_par > 0 && type(su_n) == sub_mlist_node) { \
- su_n = math_list(su_n); \
- while (su_n != null) { \
- if ((type(su_n) == kern_node) || (type(su_n) == glue_node)) { \
- su_n = vlink(su_n); \
- } else if (type(su_n) == simple_noad) { \
- su_n = nucleus(su_n); \
- if (type(su_n) == math_char_node) { \
- fetch(su_n); \
- if (char_exists(cur_f, cur_c)) { \
- su_f = cur_f; \
- su_c = cur_c; \
+ { \
+ int saved_cur_size = cur_size; \
+ if (cur_size < 2) ++cur_size; \
+ su_n = init; \
+ if (su_n != null) { \
+ if (math_script_char_mode_par > 0 && type(su_n) == math_char_node) { \
+ fetch(su_n); \
+ if (char_exists(cur_f, cur_c)) { \
+ su_f = cur_f; \
+ su_c = cur_c; \
+ } else { \
+ su_n = null; \
+ } \
+ } else if (math_script_box_mode_par > 0 && type(su_n) == sub_mlist_node) { \
+ su_n = math_list(su_n); \
+ while (su_n != null) { \
+ if ((type(su_n) == kern_node) || (type(su_n) == glue_node)) { \
+ su_n = vlink(su_n); \
+ } else if (type(su_n) == simple_noad) { \
+ su_n = nucleus(su_n); \
+ if (type(su_n) == math_char_node) { \
+ fetch(su_n); \
+ if (char_exists(cur_f, cur_c)) { \
+ su_f = cur_f; \
+ su_c = cur_c; \
+ } else { \
+ su_n = null; \
+ } \
} else { \
su_n = null; \
} \
+ break; \
} else { \
su_n = null; \
+ break; \
} \
- break; \
- } else { \
- su_n = null; \
- break; \
} \
- } \
- } else if (type(su_n) == sub_box_node) { \
- su_n = math_list(su_n); \
- if (su_n != null) { \
- if (type(su_n) == hlist_node) { \
- su_n = list_ptr(su_n); \
- } \
+ } else if (type(su_n) == sub_box_node) { \
+ su_n = math_list(su_n); \
if (su_n != null) { \
- if (math_script_box_mode_par == 2) { \
- while (su_n != null) { \
- if ((type(su_n) == kern_node) || (type(su_n) == glue_node)) { \
- su_n = vlink(su_n); \
- } else if (type(su_n) == glyph_node) { \
- if (char_exists(font(su_n), character(su_n))) { \
- su_f = font(su_n); \
- su_c = character(su_n); \
+ if (type(su_n) == hlist_node) { \
+ su_n = list_ptr(su_n); \
+ } \
+ if (su_n != null) { \
+ if (math_script_box_mode_par == 2) { \
+ while (su_n != null) { \
+ if ((type(su_n) == kern_node) || (type(su_n) == glue_node)) { \
+ su_n = vlink(su_n); \
+ } else if (type(su_n) == glyph_node) { \
+ if (char_exists(font(su_n), character(su_n))) { \
+ su_f = font(su_n); \
+ su_c = character(su_n); \
+ } else { \
+ su_n = null; \
+ } \
+ break ; \
} else { \
su_n = null; \
+ break; \
} \
- break ; \
- } else { \
- su_n = null; \
- break; \
} \
- } \
- } else if (math_script_box_mode_par == 3) { \
- int boundary = -1; \
- while (su_n != null) { \
- if ((type(su_n) == boundary_node) && (subtype(su_n) == user_boundary)) { \
- boundary = boundary_value(su_n); \
- su_n = vlink(su_n); \
- } else if ((type(su_n) == kern_node) || (type(su_n) == glue_node)) { \
- su_n = vlink(su_n); \
- } else if ((boundary > -1) && (type(su_n) == glyph_node)) { \
- if (char_exists(font(su_n), character(su_n))) { \
- su_f = font(su_n); \
- su_c = character(su_n); \
+ } else if (math_script_box_mode_par == 3) { \
+ int boundary = -1; \
+ while (su_n != null) { \
+ if ((type(su_n) == boundary_node) && (subtype(su_n) == user_boundary)) { \
+ boundary = boundary_value(su_n); \
+ su_n = vlink(su_n); \
+ } else if ((type(su_n) == kern_node) || (type(su_n) == glue_node)) { \
+ su_n = vlink(su_n); \
+ } else if ((boundary > -1) && (type(su_n) == glyph_node)) { \
+ if (char_exists(font(su_n), character(su_n))) { \
+ su_f = font(su_n); \
+ su_c = character(su_n); \
+ } else { \
+ su_n = null; \
+ } \
+ break ; \
} else { \
su_n = null; \
+ break; \
} \
- break ; \
- } else { \
- su_n = null; \
- break; \
} \
} \
} \
+ } else { \
+ su_n = null; \
} \
} else { \
su_n = null; \
} \
- } else { \
- su_n = null; \
} \
- } \
- } while (0) \
+ cur_size = saved_cur_size; \
+ } \
+ } while (0) \
+
#define x_su_style(n,cur_style,su_style) \
(noadoptionnosubscript(n) ? cur_style : su_style(cur_style))
+/*tex
+
+ Here |subshift| and |supshift| are no longer used. We could remove them.
+
+*/
+
static void make_scripts(pointer q, pointer p, scaled it, int cur_style, scaled supshift, scaled subshift)
{
pointer x, y, z;
- scaled shift_up, shift_down, clr;
- scaled delta1, delta2;
- halfword sub_n, sup_n, subtyp;
- internal_font_number sub_f, sup_f;
- int sub_c, sup_c;
- sub_n = null;
- sup_n = null;
- sub_f = 0;
- sup_f = 0;
- sub_c = 0;
- sup_c = 0;
- delta1 = it;
- delta2 = 0;
- subtyp = 0;
+ scaled shift_up = 0;
+ scaled shift_down = 0;
+ scaled clr = 0;
+ halfword sub_n = null;
+ halfword sup_n = null;
+ halfword subtyp = 0;
+ internal_font_number sub_f = 0;
+ internal_font_number sup_f = 0;
+ int sub_c = 0;
+ int sup_c = 0;
+ scaled delta1 = it;
+ scaled delta2 = 0;
switch (type(nucleus(q))) {
case math_char_node:
case math_text_char_node:
Modified: trunk/Build/source/texk/web2c/luatexdir/tex/mlist.h
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/tex/mlist.h 2025-03-20 08:56:52 UTC (rev 74707)
+++ trunk/Build/source/texk/web2c/luatexdir/tex/mlist.h 2025-03-20 10:47:33 UTC (rev 74708)
@@ -24,6 +24,8 @@
extern int cur_size;
+extern int permit_math_obsolete;
+
extern halfword del_width;
extern halfword del_height;
extern halfword del_depth;
Modified: trunk/Build/source/texk/web2c/luatexdir/tex/texmath.c
===================================================================
--- trunk/Build/source/texk/web2c/luatexdir/tex/texmath.c 2025-03-20 08:56:52 UTC (rev 74707)
+++ trunk/Build/source/texk/web2c/luatexdir/tex/texmath.c 2025-03-20 10:47:33 UTC (rev 74708)
@@ -2123,12 +2123,17 @@
if (p != null && vlink(p) == null) {
if (type(p) == simple_noad) {
if (subscr(p) == null && supscr(p) == null) {
- /*tex (subtype(p) == ord_noad_type) */
+ /*tex
+ In traditional \TEX\ this only happens for ordinary noads. Per TL 2026 this
+ is now an undocumented features and eventually it might get dropped (unless
+ it makes some \CONTEXT\ \MKIV\ things more difficult.
+ */
+ // int flatten = subtype(p) == ord_noad_type; /*tex traditional \TEX. */
int flatten = 0;
int modepar = math_flatten_mode_par;
switch (subtype(p)) {
case ord_noad_type :
- flatten = (modepar & 1) == 1;
+ flatten = (modepar & 1) == 1; /* the default */
break;
case bin_noad_type :
flatten = (modepar & 2) == 2;
More information about the tex-live-commits
mailing list.