basic.tex (2555B)
1 % Primitive abbreviations 2 \let\ea=\expandafter 3 \let\nx=\noexpand 4 \let\attr=\attribute 5 \let\attrdef=\attributedef 6 \let\cctab=\catcodetable 7 \let\initcctab=\initcatcodetable 8 \let\savecctab=\savecatcodetable 9 \let\begcs=\csname 10 \let\endcs=\endcsname 11 \let\ifcs=\ifcsname 12 \let\beggroup=\begingroup 13 \let\easn=\immediateassignment 14 \let\easnall=\immediateassigned 15 16 % Primitive aliases 17 \let\rescan=\scantextokens 18 \let\endgraf=\par 19 \let\endline=\cr 20 \def\null{\hbox{}} 21 22 % Special character aliases 23 \chardef\%=`\% 24 \chardef\&=`\& 25 \chardef\#=`\# 26 \chardef\$=`\$ 27 \chardef\~=`\~ 28 29 % Misc, mostly from plain 30 \let\bgroup={ 31 \let\egroup=} 32 \def\empty{} 33 \def\space{ } 34 \def\tab{^^I} 35 \def\nosurround{\mathsurround=0pt } % XXX: \mathsurroundskip and \mathsurroundmode 36 \def\m@th{\errmessage{m@th is deprecated}} % TODO: remove 37 38 % Expansion control 39 \def\eonce#1{\unexpanded\ea{#1}} 40 % XXX: are these useful? 41 \def\deferfi#1#2\fi{#2\fi#1} 42 \def\afterfi#1\fi{\fi#1} 43 \def\jumpfi#1#2\fi{\fi#1} 44 45 % Expandable macro to get the number of a defined register. E.g., 46 % \countdef\mycount=255 47 % \regnum\mycount -> 255 48 \def\@regnum#1#2\@END{% 49 \ifx\relax#1\else 50 \ifnum1<1#1 #1\fi % Check if #1 is a digit. 51 \@regnum#2\@END 52 \fi 53 } 54 \def\regnum#1{\ea\@regnum\meaning#1\relax\@END\relax} 55 56 {\catcode`\p=12 \catcode`\t=12 \gdef\csA#1pt{#1}} 57 \let\rempt=\csA 58 \def\decimal{\ea\rempt\the} 59 60 % Caution: \incr\count0 does not do what you'd hope. We use the "by" keyword 61 % to catch this error. 62 \protected\def\incr#1{\advance#1by1 } 63 \protected\def\gincr{\global\incr} 64 \protected\def\decr#1{\advance#1by-1 } 65 \protected\def\gdecr{\global\decr} 66 67 \def\gsetbox{\global\setbox} 68 69 \def\cs#1{\begcs#1\endcs} 70 71 \protected\def\csdef#1{\ea\def\begcs#1\endcs} 72 \protected\def\ecsdef#1{\ea\edef\begcs#1\endcs} 73 \protected\def\gcsdef#1{\ea\gdef\begcs#1\endcs} 74 \protected\def\xcsdef#1{\ea\xdef\begcs#1\endcs} 75 \protected\def\undef#1{\let#1\@undefined} 76 \protected\def\gundef#1{\glet#1\@undefined} 77 78 \protected\def\cslet#1{\ea\let\begcs#1\endcs} 79 \protected\def\gcslet#1{\ea\glet\begcs#1\endcs} 80 \protected\def\letcs#1#2{\ea\let\ea#1\begcs#2\endcs} 81 \protected\def\gletcs#1#2{\ea\glet\ea#1\begcs#2\endcs} 82 \protected\def\csletcs#1#2{\ea\let\begcs#1\ea\endcs\begcs#2\endcs} 83 \protected\def\gcsletcs#1#2{\ea\glet\begcs#1\ea\endcs\begcs#2\endcs} 84 85 \def\swap#1#2{#2#1} 86 \def\selectx#1{} % \gobble 87 \def\selecto#1{#1} 88 \def\selectxx#1#2{} % \gobbletwo 89 \def\selectox#1#2{#1} % \firstoftwo 90 \def\selectxo#1#2{#2} % \secondoftwo 91 \def\selectxxx#1#2#3{} 92 \def\selectoxx#1#2#3{#1} 93 \def\selectxox#1#2#3{#2} 94 \def\selectxxo#1#2#3{#3} 95 96 \endinput