1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
%% This is part of OpTeX project, see http://petr.olsak.net/optex
\_codedecl \sdef {Basic macros for OpTeX <2020-02-14>} % loaded in format
\_doc ------------------------------
`\bgroup`, `\egroup`, `\empty`, `\space`, `\null` and `\wlog` are classical
macros from plain \TeX/.
\_cod ------------------------------
\let\_bgroup={ \let\_egroup=}
\_def \_empty {}
\_def \_space { }
\_def \_null {\_hbox{}}
\_def \_wlog {\_immediate\_write-1 } % write on log file (only)
\_doc ------------------------------
`\bslash` is \"normal backslash" with category code 12.
`\nbb` and `\pcent` are double backslash and normal `%`, they should
be used in lua codes, for example.
\_cod ------------------------------
\_edef\_bslash {\_csstring\\}
\_edef \_nbb {\_bslash\_bslash}
\_edef \_pcent{\_csstring\%}
\_doc ------------------------------
`\sdef{<text>}` is equivalent to `\def\<text>`, where `\<text>` is a control
sequence. You can use arbitrary parameter mask after `\sdef{<text>}`, don't
put the (unwanted) space immediately after closing brace \code{\}}.
`\sxdef{<text>}` is equivalent to `\xdef\<text>`.
`\slet{<textA>}{<textB>}` is equivalent to `\let \<textA> = \<textB>`.
\_cod ------------------------------
\_def \_sdef #1{\_ea\_def \_csname#1\_endcsname}
\_def \_sxdef #1{\_ea\_xdef \_csname#1\_endcsname}
\_def \_slet #1#2{\_ea\_let \_csname#1\_ea\_endcsname \_csname#2\_endcsname}
\_doc ------------------------------
`\adef{<char>}{<body>}` puts the <char> as active character and defines it
as {<body>}. You can use parameter mask too, for example
`\adef @#1{...$1...}`
\_cod ------------------------------
\_def \_adef #1{\_catcode`#1=13 \_begingroup
\_lccode`\~=`#1\_lowercase{\_endgroup\_def~}}
\_doc ------------------------------
`\cs{<text>}` is only a shortcut to `\csname <text>\endcsname`, but you need
one more `\ea` if you need to get the real control sequence `\<text>`.
\_cod ------------------------------
\_def \_cs #1{\_csname#1\_endcsname}
\_doc ------------------------------
`\addto\macro{<text>}` adds <text> to your `\macro`, which must be defined.
\_cod ------------------------------
\_long\_def \_addto #1#2{\_ea\_def\_ea#1\_ea{#1#2}}
\_doc ------------------------------
`\opwarning{<text>}` prints warning on the terminal and to the log file.
\_cod ------------------------------
\_def \_opwarning #1{\_wterm{WARNING: #1.}}
\_doc ------------------------------
`\loggingall` and `\tracingall` is similar as in plain \TeX/, but prints
more logging information to the log file and to the terminal.
\_cod ------------------------------
\_def\_loggingall{\_tracingcommands=3 \_tracingstats=2 \_tracingpages=1
\_tracingoutput=1 \_tracinglostchars=1 \_tracingmacros=2
\_tracingparagraphs=1 \_tracingrestores=1 \_tracingscantokens=1
\_tracingifs=1 \_tracinggroups=1 \_tracingassigns=1 }
\_def\_tracingall{\_tracingonline=1 \_loggingall}
\_public
\bgroup \egroup \empty \space \null \wlog
\bslash \nbb \pcent
\sdef \sxdef \slet \cs \adef
\addto \wlog \opwarning
\loggingall \tracingall ;
\_endcode % -------------------------------------
|