diff options
Diffstat (limited to 'Master/texmf-dist/tex/optex/base/basic-macros.opm')
-rw-r--r-- | Master/texmf-dist/tex/optex/base/basic-macros.opm | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/optex/base/basic-macros.opm b/Master/texmf-dist/tex/optex/base/basic-macros.opm new file mode 100644 index 00000000000..4d465c30109 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/basic-macros.opm @@ -0,0 +1,130 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \sdef {Basic macros for OpTeX <2021-02-03>} % 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) +\_public \bgroup \egroup \empty \space \null \wlog ; + + \_doc ------------------------------ + \`\ignoreit` ignores next token or `{<text>}`, + \`\useit``{<text>}` expands to `<text>` (removes outer braces), + \`\ignoresecond` uses first, ignores second parameter and + \`\usesecond` ignores first, uses second parameter. + \_cod ------------------------------ + +\_long\_def \_ignoreit #1{} +\_long\_def \_useit #1{#1} +\_long\_def \_ignoresecond #1#2{#1} +\_long\_def \_usesecond #1#2{#2} +\_public \ignoreit \useit \ignoresecond \usesecond ; + + \_doc ------------------------------ + \`\bslash` is \"normal backslash" with category code 12. + \`\nbb` is double backslash + and \`\pcent` is normal~`%`. + They can be used in Lua codes, for example. + \_cod ------------------------------ + +\_edef \_bslash {\_csstring\\} +\_edef \_nbb {\_bslash\_bslash} +\_edef \_pcent{\_csstring\%} +\_public \bslash \nbb \pcent ; + + \_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{\}}. + \nl + \`\sxdef` `{<text>}` is equivalent to `\xdef\<text>`. + \nl + \`\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} +\_public \sdef \sxdef \slet ; + + \_doc ------------------------------ + \`\adef` `{<char>}{<body>}` puts the <char> as active character and defines it + as `{<body>}`. You can declare a macro with parameters too. For example + `\adef @#1{...#1...}`. + \_cod ------------------------------ + +\_def \_adef #1{\_catcode`#1=13 \_begingroup \_lccode`\~=`#1\_lowercase{\_endgroup\_def~}} +\_public \adef ; + + \_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>`. + \nl + \`\trycs` `{<csname>}{<text>}` expands to `\<csname>` + if it is defined else to the `<text>`. + \_cod ------------------------------ + +\_def \_cs #1{\_csname#1\_endcsname} +\_def \_trycs#1#2{\_ifcsname #1\_endcsname \_csname #1\_ea\_endcsname \_else #2\_fi} +\_public \cs \trycs ; + + \_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}} +\_public \addto ; + + \_doc ----------------------------- + \`\incr``<counter>` increases `<counter>` by one globally. + \`\decr``<counter>` decreases `<counter>` by one globally. + \_cod ----------------------------- + +\_def\_incr #1{\_global\_advance#1by1 } +\_def\_decr #1{\_global\_advance#1by-1 } +\_public \incr \decr ; + + \_doc ------------------------------ + \`\opwarning` `{<text>}` prints warning on the terminal and to the log file. + \_cod ------------------------------ + +\_def \_opwarning #1{\_wterm{WARNING l.\_the\_inputlineno: #1.}} +\_public \opwarning ; + + \_doc ------------------------------ + \`\loggingall` and \`\tracingall` are defined similarly as in + plain \TeX/, but they print + more logging information to the log file and 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 \loggingall \tracingall ; + + \_doc ------------------------------ + Write a warning if the user did not load a Unicode Font {\em or} + if there were unresolved references. \`\_byehook` is used in the \^`\bye` macro. + \_cod ------------------------------ + +\_def\_byehook{% + \_ifx\_initunifonts\_relax \_relax\_else \_opwarning{Unicode font was not loaded}\_fi + \_ifnum\_unresolvedrefs>0 \_opwarning{Try to rerun to get references right}\_fi +} + +\_endcode % ------------------------------------- + +2021-02-03: \useit defined. +2021-01-22: \trycs: \ea added in order to be able to use cs with parameters +2021-01-08: \opwarning format changed (secondly, hope that conclusively) +2020-10-12: \opwarning: line numbers added +2020-02-14: introduced |