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 | ++-- |
| A | r3asn.tex | | | 225 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | r3base.tex | | | 196 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | r3notes.tex | | | 11 | +++++++++++ |
| A | verbatim.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