r3tex

custom LuaTeX format
git clone git://git.rr3.xyz/r3tex
Log | Files | Refs | README | LICENSE

commit 646f7f64013c195bd1d9a2e0ca542a59c4eee6ff
parent f52925e8f0c1d8f73d88004cca2cfa733e09cf7a
Author: Robert Russell <robertrussell.72001@gmail.com>
Date:   Tue, 20 Sep 2022 09:59:47 -0700

Add transitional macros

Some of these changes are not fit for the final r3tex.

Diffstat:
Mmath.tex | 140++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------
Mmathenc.tex | 4++--
Mtext.tex | 29+++++++++++++++++++----------
Mutil.tex | 29+++++++++++++++++------------
4 files changed, 149 insertions(+), 53 deletions(-)

diff --git a/math.tex b/math.tex @@ -26,6 +26,9 @@ \def\le{\leq} \def\ge{\geq} +\def\:{\colon\,} % For use in $f\: X \to Y$ +\def\divides{\mid} +\def\notdivides{\nmid} \def\to{\rightarrow} \def\mapsto{\mapstochar\rightarrow} @@ -33,7 +36,7 @@ \def\<{\langle} \def\>{\rangle} \def\{{\lbrace} \def\}{\rbrace} \def\lc{\lceil} \def\rc{\rceil} -\def\lr{\lfoor} \def\rf{\rfloor} +\def\lf{\lfloor} \def\rf{\rfloor} \def\joinrel{\mathrel{\mkern-3mu}} \def\relbar{\mathrel{\smash-}} % \smash, because - has the same height as + @@ -49,7 +52,10 @@ \def\longmapsto{\mapstochar\longrightarrow} \def\longleftrightarrow{\leftarrow\joinrel\rightarrow} \def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow} -\def\iff{\;\Longleftrightarrow\;} +\def\Iff{\mskip\thickmuskip \Longleftrightarrow \mskip\thickmuskip} +\def\Imp{\mskip\thickmuskip \Longrightarrow \mskip\thickmuskip} +\def\iff{\mskip\thickmuskip \Leftrightarrow \mskip\thickmuskip} +\def\imp{\mskip\thickmuskip \Rightarrow \mskip\thickmuskip} \def\ldots{\mathinner{\ldotp\ldotp\ldotp}} \def\cdots{\mathinner{\cdotp\cdotp\cdotp}} @@ -57,6 +63,8 @@ \baselineskip=4pt \lineskiplimit=0pt \kern6pt \hbox{.}\hbox{.}\hbox{.}% }} +\def\tightvdots{\vbox{\baselineskip=4pt \lineskiplimit=0pt + \def\.{\hbox{.}}\.\.\.}} \def\ddots{\mathinner{% \mkern1mu \raise7pt\vbox{\kern7pt\hbox{.}}% @@ -66,6 +74,15 @@ \raise1pt\hbox{.}% \mkern1mu }} +\def\iddots{\mathinner{% + \mkern1mu + \raise\p@\hbox{.}% + \mkern2mu + \raise4\p@\hbox{.}% + \mkern2mu + \raise7\p@\vbox{\kern7\p@\hbox{.}}% + \mkern1mu +}} % \def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr % \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} @@ -76,9 +93,24 @@ % \def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\p@} % \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip} % $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits} -% \def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr - % $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip} - % \upbracefill\crcr\noalign{\kern3\p@}}}}\limits} +\def\overbrace#1{% + \mathop{\vbox{\m@th\ialign{% + ##\crcr + \noalign{\kern1pt}% + \downbracefill\crcr + \noalign{\kern3pt\nointerlineskip}% + $\hfil\displaystyle{#1}\hfil$\crcr + }}}\limits +} +\def\underbrace#1{% + \mathop{\vtop{\m@th\ialign{% + ##\crcr + $\hfil\displaystyle{#1}\hfil$\crcr + \noalign{\kern3pt\nointerlineskip}% + \upbracefill\crcr + \noalign{\kern1pt}% + }}}\limits +} % Primes (with nice syntax) % TODO: simplify with \isnextchar<char>{true}{false} macro; see optex @@ -101,8 +133,8 @@ \def\@root#1#2{% \setbox0=\hbox{$\m@th\sty#1\sqrt{#2}$}% \dimenA=\dimexpr\ht0 - \dp0\relax - % XXX hard-coded dimens --- probably specific to CM surd - \mkern5mu \raise.6\dimenA\copy\@rootbox \mkern-10mu \box0 + % XXX hard-coded dimens + \mkern4mu \raise.82\dimenA\copy\@rootbox \mkern-10.5mu \box0 } \def\mathstrut{\vphantom(} @@ -121,17 +153,17 @@ % \def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}} % \def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}} % \def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}} -\def\n@space{\nulldelimiterspace\z@ \m@th} +\def\n@space{\nulldelimiterspace=0pt \m@th} \def\choose{\atopwithdelims()} \def\brack{\atopwithdelims[]} \def\brace{\atopwithdelims\{\}} -% \def\cong{\mathrel{\mathpalette\@vereq\sim}} -% \def\@vereq#1#2{\lower.5\p@\vbox{\lineskiplimit\maxdimen\lineskip-.5\p@ - % \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} -% \def\notin{\mathrel{\mathpalette\c@ncel\in}} -% \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} +\def\cong{\mathrel{\mathpalette\@vereq\sim}} +\def\@vereq#1#2{\lower.5pt \vbox{\lineskiplimit\maxdimen\lineskip-.5pt + \ialign{$\m@th\sty#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} +\def\notin{\mathrel{\mathpalette\c@ncel\in}} +\def\c@ncel#1#2{\m@th\ooalign{$\hfil\sty#1\mkern1mu/\hfil$\crcr$\sty#1#2$}} % \def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}} % \def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt % \hbox{$#1\rightharpoonup$}\crcr @@ -139,6 +171,26 @@ % \def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}} % \def\doteq{\buildrel\textstyle.\over=} +% Customizable \overline. +% \barx<sty><top space><thickness><clearance><left trim><right trim><atom> +% All units are in mu relative to sty. +\newdimen\@stymu +\def\barx#1#2#3#4#5#6#7{\hbox{% + \@stymu=\dimexpr\styfontdimen{#1}{2}{6}/18\relax % get mu size + \kern#5\@stymu + \vbox{% + \boxmaxdepth=\maxdimen + \kern#2\@stymu + \hrule height#3\@stymu + \kern#4\@stymu + \hbox{\kern-#5\@stymu$\m@th\sty#1{#7}$\kern-#6\@stymu}% + }% + \kern#6\@stymu +}} +\def\bartrim#1#2#3{\mathpalette\@bartrim{{#1}{#2}{#3}}} +\def\@bartrim#1#2{\barx#1{.5}12#2} % TODO: hardcoded values +\def\overbar{\bartrim11} + % XXX hard-coded \rm; should be font specific to operators \def\log{\mathop{\rm log}\nolimits} \def\lg{\mathop{\rm lg}\nolimits} @@ -173,16 +225,54 @@ \def\gcd{\mathop{\rm gcd}} \def\deg{\mathop{\rm deg}\nolimits} +% TODO: review +\def\openup{\afterassignment\@penup \dimenA=} +\def\@penup{\advance\lineskip\dimenA + \advance\baselineskip\dimenA + \advance\lineskiplimit\dimenA} +\let\dsty\displaystyle +\def\@malign{\hfil\strut$\dsty{##}$\tabskip=0pt&$\dsty{{}##}$\hfil} +\def\eqalignskip{\qquad} +\def\eqalign#1{\null\,\vcenter{\openup1\jot \m@th + \ialign{\cspan\@malign&&\eqalignskip\cspan\@malign\crcr #1\crcr}}\,} +\newif\ifdt@p +\def\displ@y{\global\dt@ptrue\openup\jot\m@th + \everycr{\noalign{\ifdt@p \global\dt@pfalse \ifdim\prevdepth>-1000pt + \vskip-\lineskiplimit \vskip\normallineskiplimit \fi + \else \penalty\interdisplaylinepenalty \fi}}} +\def\@lign{\tabskip0pt \everycr={}} % restore inside \displ@y +\def\exalignno#1{\displ@y \tabskip=\centering + \halign to\displaywidth{% + \hfil$\@lign\dsty{##}$\tabskip=0pt&$\@lign\dsty{{}##}$\hfil& + \qquad\hbox{\rm##}\hfil\tabskip=\centering& + \llap{$\@lign##$}\tabskip=0pt\crcr #1\crcr}} +\def\eqalignno#1{\displ@y \tabskip\centering + \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip0pt + &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering + &\llap{$\@lign##$}\tabskip0pt\crcr + #1\crcr}} +\def\displaylines#1{\displ@y \tabskip0pt + \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr + #1\crcr}} + % \def\bmod{\nonscript\mskip-\medmuskip\mkern5mu % \mathbin{\rm mod}\penalty900\mkern5mu\nonscript\mskip-\medmuskip} -% \def\pmod#1{\allowbreak\mkern18mu({\rm mod}\,\,#1)} - -% \def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th - % \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\right.} -% \def\matrix#1{\null\,\vcenter{\normalbaselines\m@th - % \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr - % \mathstrut\crcr\noalign{\kern-\baselineskip} - % #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,} +\def\mod#1{\allowbreak\ifinner\ \else\mkern18mu\fi({\rm mod}\,\,#1)} + +\def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th % XXX: \m@th here is wrong; should be inside leftmost column + \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\right.} +\def\matrix#1{% + \null\,\vcenter{% + \normalbaselines\m@th + \ialign{% + \hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr + \mathstrut\crcr \noalign{\kern-\baselineskip}% + #1\crcr + \mathstrut\crcr \noalign{\kern-\baselineskip}% + }% + }\,% +} +\def\bmatrix#1{\left[\matrix{#1}\right]} % \def\pmatrix#1{\left(\matrix{#1}\right)} % \newdimen\p@renwd % \setbox0=\hbox{\tenex B} \p@renwd=\wd0 % width of the big left ( @@ -212,14 +302,6 @@ % \vskip-\lineskiplimit \vskip\normallineskiplimit \fi % \else \penalty\interdisplaylinepenalty \fi}}} % \def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y -% \def\displaylines#1{\displ@y \tabskip\z@skip - % \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr - % #1\crcr}} -% \def\eqalignno#1{\displ@y \tabskip\centering - % \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip - % &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering - % &\llap{$\@lign##$}\tabskip\z@skip\crcr - % #1\crcr}} % \def\leqalignno#1{\displ@y \tabskip\centering % \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip % &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering diff --git a/mathenc.tex b/mathenc.tex @@ -235,12 +235,12 @@ \def\acute{\mathaccent"7013 } \def\grave{\mathaccent"7012 } \def\ddot{\mathaccent"707F } -\def\tilde{\mathaccent"707E } +\def\tilde{\mathaccent"7003 } \def\bar{\mathaccent"7016 } \def\breve{\mathaccent"7015 } \def\check{\mathaccent"7014 } \def\hat{\mathaccent"705E } -\def\vec{\mathaccent"017E } +\def\vec{\Umathaccent"0"02"AE } \def\dot{\mathaccent"705F } \def\widetilde{\mathaccent"0365 } \def\widehat{\mathaccent"0362 } diff --git a/text.tex b/text.tex @@ -19,7 +19,7 @@ \lineskip=\normallineskip \lineskiplimit=\normallineskiplimit } -\def\@constlineskip{% +\def\@constlineskip{% TODO helper isn't needed here \baselineskip=-1000pt \lineskip=\skipA \lineskiplimit=\maxdimen @@ -145,6 +145,24 @@ \def\multispan#1{\omit \mscount=#1\relax \loop\ifnum\mscount>1 \@cspan \repeat} \def\@cspan{\cspan\omit \decr\mscount} +\mathchardef\braceld="37A \mathchardef\bracerd="37B +\mathchardef\bracelu="37C \mathchardef\braceru="37D +\def\downbracefill{% + $\m@th + \setbox0=\hbox{$\braceld$}% + \braceld \leaders\vrule height\ht0 depth0pt \hfill \braceru + \bracelu \leaders\vrule height\ht0 depth0pt \hfill \bracerd + $% +} +\def\upbracefill{% + $\m@th + \setbox0=\hbox{$\braceld$}% + \bracelu \leaders\vrule height\ht0 depth0pt \hfill \bracerd + \braceld \leaders\vrule height\ht0 depth0pt \hfill \braceru + $% +} +\def\dots{\relax\ifmmode\ldots\else$\m@th\ldots\,$\fi} + \endinput @@ -159,7 +177,6 @@ % \def\bigbreak{\par\ifdim\lastskip<\bigskipamount % \removelastskip\penalty-200\bigskip\fi} -% \def\dots{\relax\ifmmode\ldots\else$\m@th\ldots\,$\fi} % \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX} % \def\hrulefill{\leaders\hrule\hfill} @@ -170,13 +187,5 @@ % \def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu% % \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill % \mkern-7mu\smash-$} -% \mathchardef\braceld="37A \mathchardef\bracerd="37B -% \mathchardef\bracelu="37C \mathchardef\braceru="37D -% \def\downbracefill{$\m@th \setbox\z@\hbox{$\braceld$}% - % \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru - % \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd$} -% \def\upbracefill{$\m@th \setbox\z@\hbox{$\braceld$}% - % \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd - % \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru$} % \outer\def\bye{\par\vfill\supereject\end} diff --git a/util.tex b/util.tex @@ -1,6 +1,8 @@ +% TODO: is there a meaningful difference between abbreviation and alias? % Primitive abbreviations \let\g=\global \let\ea=\expandafter +\let\nx=\noexpand % TODO: replace noexpand with nx \let\attr=\attribute \let\attrdef=\attributedef \let\cctab=\catcodetable @@ -10,6 +12,7 @@ \let\endcs=\endcsname \let\ifcs=\ifcsname \let\beggroup=\begingroup +\let\easn=\immediateassignment % Primitive aliases \let\rescan=\scantextokens @@ -29,7 +32,7 @@ \def\empty{} \def\space{ } \def\tab{^^I} -\def\m@th{\mathsurround=0pt } +\def\m@th{\mathsurround=0pt } % XXX: \mathsurroundskip and \mathsurroundmode % Special constants \chardef\maxchar=1114111 @@ -39,8 +42,11 @@ \newbox\voidbox % Expansion control -\def\nea{\noexpand\ea} \def\eonce#1{\unexpanded\ea{#1}} +% XXX: are these useful? +\def\deferfi#1#2\fi{#2\fi#1} +\def\afterfi#1\fi{\fi#1} +\def\jumpfi#1#2\fi{\fi#1} % Caution: \incr\count0 does not do what you'd hope. We use the "by" keyword % to catch this error. @@ -83,11 +89,13 @@ \ea\newtoks\begcs hooks:#2\endcs \cs{hooks:#2}={}% } \protected\def\event[#1]{% + \relax % events can appear in weird places (e.g., the standard \par event) \begcs event:#1\ea\endcs\ea{\the\cs{hooks:#1}}% \@hooks } \protected\def\addhook[#1]#2{\cs{hooks:#1}\ea{\the\cs{hooks:#1}#2}} +\def\swap#1#2{#2#1} \def\selectx#1{} % \gobble \def\selecto#1{#1} \def\selectxx#1#2{} % \gobbletwo @@ -143,6 +151,7 @@ % Generalized mathpalette---gives number to be used with \ifcase \def\mathpalette#1#2{\mathchoice{#10{#2}}{#11{#2}}{#12{#2}}{#13{#2}}} +% XXX: protect or start with \relax? \def\sty#1{% \ifcase\numexpr#1\relax \displaystyle @@ -159,6 +168,8 @@ \or\scriptscriptfont \fi } +% \styfontdimen<sty><fam><number> +\def\styfontdimen#1#2#3{\fontdimen\numexpr#3\relax\styfont{#1}\numexpr#2\relax} {\catcode`\p=12 \catcode`\t=12 \gdef\csA#1pt{#1}} \let\rempt=\csA @@ -188,19 +199,13 @@ % register assignments, the tokens are placed after the entire assignment, % unlike with \afterassignment. \deferasn does not use any temporary registers. \newcount\@grouplevel +\def\@checkgrouplevel{\ifnum\currentgrouplevel>\@grouplevel \ea\aftergroup \fi} +\def\@savegrouplevel{\@grouplevel\currentgrouplevel} +\def\@deferasnA{\@checkgrouplevel\@deferasnB} \protected\def\deferasn#1{% - \@grouplevel=\currentgrouplevel + \@savegrouplevel \def\@deferasnB{#1}% - \def\@deferasnA{% - \ifnum\currentgrouplevel>\@grouplevel \ea\aftergroup \fi - \@deferasnB - }% \afterassignment\@deferasnA } -% XXX: are these useful? -\def\deferfi#1#2\fi{#2\fi#1} -\def\afterfi#1\fi{\fi#1} -\def\jumpfi#1#2\fi{\fi#1} - \endinput