r3tex

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

commit adc40175359ae1e2bc4a12ec2e1eab9be4222e43
parent c1933146b0fe171b3aabee9366641514f7c27e02
Author: Robert Russell <robert@rr3.xyz>
Date:   Mon, 26 Aug 2024 01:43:42 -0700

Add some files I ought to have added ages ago

Diffstat:
M.gitignore | 4++--
Ar3asn.tex | 225+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ar3base.tex | 196+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ar3notes.tex | 11+++++++++++
Averbatim.tex | 49+++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 483 insertions(+), 2 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -5,5 +5,5 @@ *.aux OpTeX font -test*.tex -test*.lua +test +unicode diff --git a/r3asn.tex b/r3asn.tex @@ -0,0 +1,225 @@ +\csname input:r3asn.tex\endcsname +\expandafter\let\csname input:r3asn.tex\endcsname=\endinput + +% Extra fonts +\let\FSbody=\FSpnrutl + + +% Pararmeters +\paper[letter] +\hoffset=1.5in \voffset=1.5in % 1.5in margins +\hsize=5.5in \vsize=7.9in +\normalparindent=10pt \parindent=\normalparindent +\normalparskip=0pt plus1pt \parskip=\normalparskip + + +% Math spacing +\newmuskip\tthinmuskip \tthinmuskip=3mu +\newmuskip\dthinmuskip \dthinmuskip=3mu +\newmuskip\tmedmuskip \tmedmuskip=4mu plus 2mu minus 4mu +\newmuskip\dmedmuskip \dmedmuskip=4mu plus 2mu minus 2mu +\newmuskip\tthickmuskip \tthickmuskip=6mu plus 4mu +\newmuskip\dthickmuskip \dthickmuskip=10mu minus 3mu +\def\textmath{% + \thinmuskip=\tthinmuskip + \medmuskip=\tmedmuskip + \thickmuskip=\tthickmuskip +} +\def\displaymath{% + \thinmuskip=\dthinmuskip + \medmuskip=\dmedmuskip + \thickmuskip=\dthickmuskip +} +% TODO: use event? +\everymath={\textmath} +\everydisplay={\displaymath} + + +% Title +\newtoks\title +\newtoks\author +\newtoks\date +\Fdef\titlefont\FSpntit16pt +\Fdef\subtitlefont\FSbody10pt +\def\maketitle{% + \topglue 0.05in + \centerline{\titlefont \the\title}% + \edef\csA{\the\author}% + \edef\csB{\the\date}% + \unless\ifx\csA\empty + \nobreak\medskip + \centerline{\subtitlefont \csA}% + \ifx\csB\empty\else + \nobreak\smallskip + \centerline{\subtitlefont \csB}% + \fi + \else\ifx\csB\empty\else + \nobreak\medskip + \centerline{\subtitlefont\csB}% + \fi\fi + \nobreak\vskip 0.5in plus0.15in +} + + +% Output +\countdef\pageno=0 \pageno=1 + +\newtoks\footline +\Fdef\footfont\FSbody10pt +\footline={\hss\footfont\number\pageno\hss} +\def\nopagenumbers{\footline={\hfil}} + +\output={\asnoutput} +\def\asnoutput{% + \shipout\vbox{\pagebody\makefootline}% + \gincr\pageno +} +\def\pagebody{\vbox to\vsize{\boxmaxdepth\maxdepth \unvbox255}} +\def\makefootline{\baselineskip=24pt \lineskiplimit=0pt \line{\the\footline}} + + +% Sectioning +% TODO consider moving to text.tex +\newcount\@mpenalty \newif\if@mpenalty +\def\mpenalty{\global\@mpenaltytrue \@mpenalty=} +\def\@mvskip{% + \par + \ifdim\lastskip<\skipA + \removelastskip + \if@mpenalty \penalty\@mpenalty \fi + \vskip\skipA + \fi + \global\@mpenaltyfalse +} +\def\mvskip{\afterassignment\@mvskip \skipA=} +\def\msmallskip{\mvskip\smallskipamount} +\def\mmedskip{\mvskip\medskipamount} +\def\mbigskip{\mvskip\bigskipamount} +\def\removelastskip{\ifdim\lastskip=0pt \else \vskip-\lastskip \fi} + +\def\topic #1. {\msmallskip\noindent{\it#1.}\enspace} + +\def\begolbf{\begxlist{\bf\number\Lcnt.\enspace}} % 1. 2. 3. ... +\def\endolbf{\Lend} + + +% p@last is last problem-related macro used. +% 0 => other +% 1 => header +% 2 => statement +\newcount\p@last \p@last=0 +\newbox\pstmt@box +\Fdef\probfont\FSpnimp12pt +\def\prob{\@phdr\probfont} +\Fdef\partfont\FSpnimp10pt +\def\part{\@phdr\partfont} +\def\@phdr#1.{% + \ifnum\p@last=2 \@endpstmt \else \par \fi + \ifnum\p@last=0 + \vskip 0pt plus.3\vsize \penalty0 \vskip 0pt plus-.3\vsize + \nobreak\vskip16pt plus6pt minus6pt + \fi + \ifnum\p@last=1 \nobreak\medskip \fi + \hbox{#1}\nobreak% + \p@last=1 +} +\def\pstmt{% + \par + \p@last=2 + \nobreak\medskip + \setbox\pstmt@box=\vbox\bgroup + \advance \hsize by -2\normalparindent + \def\nostrut{\let\strut=\relax}% + \noindent\strut +} +\def\@endpstmt{% + \ifhmode\unskip\fi\strut\egroup% End the vbox started in \pstmt. + \dimen0=\ht\pstmt@box \advance \dimen0 by 2pt + \dimen1=\dp\pstmt@box \advance \dimen1 by 2pt + \nointerlineskip\hbox to \hsize{% + \hfil + \vrule height\dimen0 depth\dimen1 width0.5pt + \hskip5pt + \box\pstmt@box + \hskip5pt + \hskip 0.5pt plus1fil + }% + \nointerlineskip + \penalty25\medskip +} +\def\psoln{% + \ifcase\p@last + \errmessage{psoln must be preceded by prob/part/pstmt}% + \or + \nobreak\medskip + \or + \@endpstmt + \fi + \p@last=0 + \tmpparindentw0pt + \tmpparskipw0pt +} + +\newif\ifpmark +\def\begp#1 [#2] (#3). {% + \par + \global\pmarkfalse + \mpenalty-100 + \mmedskip + \noindent{\bf#1% + \def\\{#2}\ifx\\\empty\else\ {\rm[\\]}\fi + \def\\{#3}\ifx\\\empty\else\ {\rm({\it\\\/})}\fi + .}\enspace +} +\def\pmark{\global\pmarktrue} % TODO +\def\endp{\ifpmark\else \pmark \fi \mpenalty55 \mmedskip} + +\newif\ifqed +\def\qed{\slug \global\qedtrue} +\newtoks\prooftext \prooftext={Proof} +\def\begproof{% + \par \global\qedfalse + \mmedskip + \noindent{\it\the\prooftext.}\enspace + \prooftext={Proof}% +} +\def\endproof{\ifqed\else \qed \fi \mmedskip} + + +% Lists +\Lindent=0pt +\Lmaxprotrusion=20pt +\Llmargin=20pt +\Ltopskip=\smallskipamount \Ltoppenalty=50 +\Lmidskip=\smallskipamount \Lmidpenalty=0 +\Lbotskip=\smallskipamount \Lbotpenalty=50 + + +% Misc +\def\slugbox{\hbox{\kern1.5pt\vrule width2.5pt height6pt depth1.5pt\kern1.5pt}} +\def\slug{\unskip\nobreak\quad\slugbox} +\def\pdfimg#1file #2.pdf{\pdfximage#1{#2.pdf}\pdfrefximage\pdflastximage} +\def\eqref(#1){({\oldstyle#1})} +\def\C{{\f[d]C}} +\def\Q{{\f[d]Q}} +\def\R{{\f[d]R}} +\def\Z{{\f[d]Z}} +\def\N{{\f[d]N}} +\def\utext#1{{\Fmch7pt/7pt/5pt/5pt/8.5pt + \vbox{\ialign{\hfil##\hfil\cr\noalign{\kern-2pt}#1\crcr}}}} +\def\set#1{\hbox{$\m@th\{\,#1\,\}$}} +\def\@cycend\,\@cyciter{} +\def\@cyciter#1,{#1\,\@cyciter} +\def\cyc(#1){(\@cyciter#1\@cycend,)} +\def\tbin#1{\nonscript\mskip\tmedmuskip{#1}\nonscript\mskip\tmedmuskip} +\def\trel#1{\nonscript\mskip\tthickmuskip{#1}\nonscript\mskip\tthickmuskip} +\def\dbin#1{\nonscript\mskip\dmedmuskip{#1}\nonscript\mskip\dmedmuskip} +\def\drel#1{\nonscript\mskip\dthickmuskip{#1}\nonscript\mskip\dthickmuskip} +\def\upto{\mathinner{\ldotp\ldotp}} +\def\compl{{\sm c}} + +% \left and \right but the resulting atoms are open/close, not inner. +\def\ml{\mathopen{}\mathclose\bgroup\left} +\def\mr{\aftergroup\egroup\right} + +\endinput diff --git a/r3base.tex b/r3base.tex @@ -0,0 +1,196 @@ +\cs{input:r3base.tex} +\cslet{input:r3base.tex}\endinput + + +% Extra fonts +\let\footset=\FSpnrutl +\Fdef\footfont\footset10pt + + +% Pararmeters +\paper[letter] +\hoffset=1.5in \voffset=1.5in % 1.5in margins +\hsize=5.5in \vsize=7.9in +\normalparindent=10pt \parindent=\normalparindent +\normalparskip=0pt plus1pt \parskip=\normalparskip + + +% Math spacing +\newmuskip\tthinmuskip \tthinmuskip=3mu +\newmuskip\dthinmuskip \dthinmuskip=3mu +\newmuskip\tmedmuskip \tmedmuskip=4mu plus 2mu minus 4mu +\newmuskip\dmedmuskip \dmedmuskip=4mu plus 2mu minus 2mu +\newmuskip\tthickmuskip \tthickmuskip=6mu plus 4mu +\newmuskip\dthickmuskip \dthickmuskip=10mu minus 3mu +\def\textmath{% + \thinmuskip=\tthinmuskip + \medmuskip=\tmedmuskip + \thickmuskip=\tthickmuskip +} +\def\displaymath{% + \thinmuskip=\dthinmuskip + \medmuskip=\dmedmuskip + \thickmuskip=\dthickmuskip +} +% TODO: use event? +\everymath={\textmath} +\everydisplay={\displaymath} + + +% Output +\countdef\pageno=0 \pageno=1 + +\newtoks\footline +\footline={\hss\footfont\number\pageno\hss} +\def\nopagenumbers{\footline={\hfil}} + +\output={\baseoutput} +\def\baseoutput{% + \shipout\vbox{\pagebody\makefootline}% + \gincr\pageno +} +\def\pagebody{\vbox to\vsize{\boxmaxdepth\maxdepth \unvbox255}} +\def\makefootline{\baselineskip=24pt \lineskiplimit=0pt \line{\the\footline}} + + +% Sectioning +% TODO consider moving to text.tex +\newcount\@mpenalty \newif\if@mpenalty +\def\mpenalty{\global\@mpenaltytrue \@mpenalty=} +\def\@mvskip{% + \par + \ifdim\lastskip<\skipA + \removelastskip + \if@mpenalty \penalty\@mpenalty \fi + \vskip\skipA + \fi + \global\@mpenaltyfalse +} +\def\mvskip{\afterassignment\@mvskip \skipA=} +\def\msmallskip{\mvskip\smallskipamount} +\def\mmedskip{\mvskip\medskipamount} +\def\mbigskip{\mvskip\bigskipamount} +\def\removelastskip{\ifdim\lastskip=0pt \else \vskip-\lastskip \fi} + + +% Lists +\Lindent=0pt +\Lmaxprotrusion=20pt +\Llmargin=20pt +\Ltopskip=\smallskipamount \Ltoppenalty=50 +\Lmidskip=\smallskipamount \Lmidpenalty=0 +\Lbotskip=\smallskipamount \Lbotpenalty=50 + +\def\begol{\Lbegx{\f[r]\number\Lcnt.\enspace}} +\def\endol{\Lend} + +\def\begolb{\Lbegx{\f[b]\number\Lcnt.\enspace}} +\def\endolb{\Lend} + +\def\begul{\Lbegx{$\nosurround\bullet$\enspace}} +\def\endul{\Lend} + + +% Links + +\pdflinkmargin=.5pt +\def\deflinkdoc[#1]{\pdfdest name {#1} xyz\relax} +\def\linkdoc[#1]#2{% + \leavevmode + {\pdfstartlink goto name {#1}\relax#2\pdfendlink}% +} +\def\linkurl[#1]#2{% + \leavevmode + {\pdfstartlink user {% + /Subtype/Link% + /A<<% + /Type/Action% + /S/URI% + /URI(#1)% + >>% + }\relax#2\pdfendlink}% +} + +\newread\labauxi +\def\readlab{% + \openin\labauxi=lab.aux% + \beggroup + \def\\##1;##2;{\gcsdef{lab:##1}{##2}}% + \loop \unless\ifeof\labauxi + \read\labauxi to\do + \do + \repeat + \endgroup + \closein\labauxi +} + +\newtoks\labname +\newif\iflab \labfalse +\def\lab[#1]{% + \global\labname={#1}% + \global\labtrue + \ignorespaces +} + +\newwrite\labauxo +\newif\iflabauxo \labauxofalse +\def\deflab#1{% + \iflab + \xcsdef{lab:\the\labname}{#1}% + \deflinkdoc[\the\labname]% + \iflabauxo \else + \immediate\openout\labauxo=lab.aux% + \labauxotrue + \fi + \immediate\ea\write\ea\labauxo\ea{\ea\string\ea\\\the\labname;#1;}% + \global\labfalse + \fi +} + +\def\unknownref{\hbox{\f[r]\Chex"CC1111??}} +\def\ref[#1]{% + \ifcs lab:#1\endcs + \cs{lab:#1}% + \else + \unknownref + \fi +} +\def\sref[#1]{\linkdoc[sec.#1]{\char"A7 \ref[sec.#1]}} +\newif\ifcreffirst +\def\cref[#1]{[% + \creffirsttrue + \foreach#1,\do##1,{% + \ifcreffirst\else,\ \fi + \linkdoc[cite.##1]{\ref[cite.##1]}% + \creffirstfalse + }% +]} +\def\href#1[#2]{\linkdoc[#2]{#1\ref[#2]}} +\def\xref#1[#2]{\linkdoc[#2]{#1}} + + +% Misc +\def\slugbox{\hbox{\kern1.5pt\vrule width2.5pt height6pt depth1.5pt\kern1.5pt}} +\def\slug{\unskip\nobreak\quad\slugbox} +\def\pdfimg#1file #2.pdf{\pdfximage#1{#2.pdf}\pdfrefximage\pdflastximage} +\def\eqref(#1){({\f[ro]#1})} +\def\C{{\f[d]C}} +\def\Q{{\f[d]Q}} +\def\R{{\f[d]R}} +\def\Z{{\f[d]Z}} +\def\N{{\f[d]N}} +\def\tbin#1{\nonscript\mskip\tmedmuskip{#1}\nonscript\mskip\tmedmuskip} +\def\trel#1{\nonscript\mskip\tthickmuskip{#1}\nonscript\mskip\tthickmuskip} +\def\dbin#1{\nonscript\mskip\dmedmuskip{#1}\nonscript\mskip\dmedmuskip} +\def\drel#1{\nonscript\mskip\dthickmuskip{#1}\nonscript\mskip\dthickmuskip} +\def\upto{\mathinner{\ldotp\ldotp}} + +% TeX logo modified for Palatino Nova +\def\TeX{T\kern-.1667em\lower.4ex\hbox{E}\kern-.125emX} + +% \left and \right but the resulting atoms are open/close, not inner. +\def\ml{\mathopen{}\mathclose\bgroup\left} +\def\mr{\aftergroup\egroup\right} + + +\endinput diff --git a/r3notes.tex b/r3notes.tex @@ -0,0 +1,11 @@ +\input r3asn + +\Fdef\secfont\FSsans12pt +\def\sec#1\par{% + \vskip0pt plus.3\vsize \penalty-250 \vskip0pt plus-.3\vsize + \vskip24pt plus8pt minus8pt \vskip\parskip + \leftline{\secfont #1}% + \nobreak\medskip +} + +\endinput diff --git a/verbatim.tex b/verbatim.tex @@ -0,0 +1,49 @@ +% Usage: +% \Vbeg[local init]<<an arbitrary delimiter +% {this} %is +% $all$ ~verbatim-- +% an arbitrary delimiter +% Back to non-verbatim. +\newtoks\Vbol \Vbol={} +\newtoks\Vibl \Vibl={\leavevmode\endgraf} +\newtoks\Vend \Vend={} +\def\@Vterm{\errmessage{Vbeg delimiter should be on new line}} +\def\@Vproc{% + \ifx\@Vnext\@Vterm% End of verbatim? + \let\@Vterm=\relax% Silence error message. + \the\Vend + \else + \@Vibl\def\@Vibl{\the\Vibl}\the\Vbol + \fi +} +\beggroup + \obeylines% Lines must end with % + \gdef\Vbeg#1<<{% + \beggroup% + \def\@Verb##1^^M{% Scan delimiter like Unix here doc. + \def\@@Verb####1##1{% + \futurelet\@Vnext\@Vproc####1\@Vterm% + \endgroup% + }% + \@@Verb% + }% + \let\@Vibl=\relax% + \def\do##1{\catcode`##1=12 }\dospecials% Init specials + \def\par{\futurelet\@Vnext\@Vproc}% + \obeylines% Init lines + \@Vobeyspaces% Init spaces + #1% User post-init + \@Verb% + }% +\endgroup + +\def\dospecials{% + \do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% +} + +% Like Plain TeX \obeyspaces, but use control spaces, not \space. +{\obeyspaces\gdef\@Vobeyspaces{\let =\ \obeyspaces}} + + +\endinput