1 General TeX like operators
Here is a complete list of general operators.
1.1 A
x \(\amalg\) y bin := "\amalg" =># '(nos _1)'; x \(\approx\) y cmp := "\approx" =># '(nos _1)'; x \(\approxeq\) y cmp := "\approxeq" =># '(nos _1)'; x \(\Arrowvert\) y cmp := "\Arrowvert" =># '(nos _1)'; x \(\arrowvert\) y cmp := "\arrowvert" =># '(nos _1)'; x \(\asymp\) y cmp := "\asymp" =># '(nos _1)';
1.2 B
x \(\backsim\) y cmp := "\backsim" =># '(nos _1)'; x \(\backsimeq\) y cmp := "\backsimeq" =># '(nos _1)'; x \(\bar\) y cmp := "\bar" =># '(nos _1)'; x \(\barwedge\) y cmp := "\barwedge" =># '(nos _1)'; x \(\between\) y cmp := "\between" =># '(nos _1)'; x \(\bigcap\) y bin := "\bigcap" =># '(nos _1)'; x \(\bigcirc\) y bin := "\bigcirc" =># '(nos _1)'; x \(\bigcup\) y bin := "\bigcup" =># '(nos _1)'; x \(\bigodot\) y bin := "\bigodot" =># '(nos _1)'; x \(\bigoplus\) y bin := "\bigoplus" =># '(nos _1)'; x \(\bigotimes\) y bin := "\bigotimes" =># '(nos _1)'; x \(\bigsqcup\) y bin := "\bigsqcup" =># '(nos _1)'; x \(\bigtriangledown\) y bin := "\bigtriangledown" =># '(nos _1)'; x \(\bigtriangleup\) y bin := "\bigtriangleup" =># '(nos _1)'; x \(\biguplus\) y bin := "\biguplus" =># '(nos _1)'; x \(\bigvee\) y bin := "\bigvee" =># '(nos _1)'; x \(\bigwedge\) y bin := "\bigwedge" =># '(nos _1)'; x \(\bowtie\) y bin := "\bowtie" =># '(nos _1)'; x \(\Box\) y bin := "\Box" =># '(nos _1)'; x \(\boxdot\) y bin := "\boxdot" =># '(nos _1)'; x \(\boxminus\) y bin := "\boxminus" =># '(nos _1)'; x \(\boxplus\) y bin := "\boxplus" =># '(nos _1)'; x \(\boxtimes\) y bin := "\boxtimes" =># '(nos _1)'; x \(\Bumpeq\) y cmp := "\Bumpeq" =># '(nos _1)'; x \(\bumpeq\) y cmp := "\bumpeq" =># '(nos _1)';
1.3 C
x \(\cap\) y bin := "\cap" =># '(nos _1)'; x \(\Cap\) y bin := "\Cap" =># '(nos _1)'; x \(\cdot\) y bin := "\cdot" =># '(nos _1)'; x \(\cdotp\) y bin := "\cdotp" =># '(nos _1)'; x \(\circeq\) y cmp := "\circeq" =># '(nos _1)'; x \(\circledast\) y bin := "\circledast" =># '(nos _1)'; x \(\circledcirc\) y bin := "\circledcirc" =># '(nos _1)'; x \(\circleddash\) y bin := "\circleddash" =># '(nos _1)'; x \(\cong\) y cmp := "\cong" =># '(nos _1)'; x \(\coprod\) y bin := "\coprod" =># '(nos _1)'; //bin := "\cup" =># '(nos _1)'; x \(\Cup\) y bin := "\Cup" =># '(nos _1)'; x \(\curlyeqprec\) y cmp := "\curlyeqprec" =># '(nos _1)'; x \(\curlyeqsucc\) y cmp := "\curlyeqsucc" =># '(nos _1)'; x \(\curlyvee\) y bin := "\curlyvee" =># '(nos _1)'; x \(\curlywedge\) y bin := "\curlywedge" =># '(nos _1)';
1.4 D
x \(\dashleftarrow\) y arr := "\dashleftarrow" =># '(nos _1)'; x \(\dashrightarrow\) y arr := "\dashrightarrow" =># '(nos _1)'; x \(\divideontimes\) y bin := "\divideontimes" =># '(nos _1)'; x \(\doteq\) y cmp := "\doteq" =># '(nos _1)'; x \(\Doteq\) y cmp := "\Doteq" =># '(nos _1)'; x \(\doteqdot\) y cmp := "\doteqdot" =># '(nos _1)'; x \(\dotplus\) y bin := "\dotplus" =># '(nos _1)'; x \(\doublebarwedge\) y bin := "\doublebarwedge" =># '(nos _1)'; x \(\doublecap\) y bin := "\doublecap" =># '(nos _1)'; x \(\doublecup\) y bin := "\doublecup" =># '(nos _1)'; x \(\Downarrow\) y bin := "\Downarrow" =># '(nos _1)'; x \(\downarrow\) y bin := "\downarrow" =># '(nos _1)'; x \(\downdownarrows\) y bin := "\downdownarrows" =># '(nos _1)'; x \(\downharpoonleft\) y bin := "\downharpoonleft" =># '(nos _1)'; x \(\downharpoonright\) y bin := "\downharpoonright" =># '(nos _1)';
1.5 E
x \(\eqcirc\) y cmp := "\eqcirc" =># '(nos _1)'; x \(\eqsim\) y cmp := "\eqsim" =># '(nos _1)'; x \(\eqslantgtr\) y cmp := "\eqslantgtr" =># '(nos _1)'; x \(\eqslantless\) y cmp := "\eqslantless" =># '(nos _1)'; x \(\equiv\) y cmp := "\equiv" =># '(nos _1)';
1.6 F
x \(\fallingdotseq\) y bin := "\fallingdotseq" =># '(nos _1)';
1.7 G
x \(\ge\) y cmp := "\ge" =># '(nos _1)'; x \(\geq\) y cmp := "\geq" =># '(nos _1)'; x \(\geqq\) y cmp := "\geqq" =># '(nos _1)'; x \(\geqslant\) y cmp := "\geqslant" =># '(nos _1)'; x \(\gets\) y arr := "\gets" =># '(nos _1)'; x \(\gg\) y cmp := "\gg" =># '(nos _1)'; x \(\ggg\) y cmp := "\ggg" =># '(nos _1)'; x \(\gggtr\) y cmp := "\gggtr" =># '(nos _1)'; x \(\gnapprox\) y cmp := "\gnapprox" =># '(nos _1)'; x \(\gneq\) y cmp := "\gneq" =># '(nos _1)'; x \(\gneqq\) y cmp := "\gneqq" =># '(nos _1)'; x \(\gnsim\) y cmp := "\gnsim" =># '(nos _1)'; x \(\gt\) y cmp := "\gt" =># '(nos _1)'; x \(\gtrapprox\) y cmp := "\gtrapprox" =># '(nos _1)'; x \(\gtrdot\) y cmp := "\gtrdot" =># '(nos _1)'; x \(\gtreqless\) y cmp := "\gtreqless" =># '(nos _1)'; x \(\gtreqqless\) y cmp := "\gtreqqless" =># '(nos _1)'; x \(\gtrless\) y cmp := "\gtrless" =># '(nos _1)'; x \(\gtrsim\) y cmp := "\gtrsim" =># '(nos _1)'; x \(\gvertneqq\) y cmp := "\gvertneqq" =># '(nos _1)';
1.8 H
x \(\hookleftarrow\) y arr := "\hookleftarrow" =># '(nos _1)'; x \(\hookrightarrow\) y arr := "\hookrightarrow" =># '(nos _1)';
1.9 I
x \(\iff\) y bin := "\iff" =># '(nos _1)'; x \(\impliedby\) y bin := "\impliedby" =># '(nos _1)'; //bin := "\implies" =># '(nos _1)'; //cmp := "\in" =># '(nos _1)';
1.10 J
x \(\Join\) y bin := "\Join" =># '(nos _1)';
1.11 K
1.12 L
x \(\le\) y cmp := "\le" =># '(nos _1)'; x \(\leadsto\) y arr := "\leadsto" =># '(nos _1)'; x \(\Leftarrow\) y arr := "\Leftarrow" =># '(nos _1)'; x \(\leftarrow\) y arr := "\leftarrow" =># '(nos _1)'; x \(\leftarrowtail\) y arr := "\leftarrowtail" =># '(nos _1)'; x \(\leftharpoondown\) y arr := "\leftharpoondown" =># '(nos _1)'; x \(\leftharpoonup\) y arr := "\leftharpoonup" =># '(nos _1)'; x \(\leftleftarrows\) y arr := "\leftleftarrows" =># '(nos _1)'; x \(\Leftrightarrow\) y arr := "\Leftrightarrow" =># '(nos _1)'; x \(\leftrightarrow\) y arr := "\leftrightarrow" =># '(nos _1)'; x \(\leftrightarrows\) y cmp := "\leftrightarrows" =># '(nos _1)'; x \(\leftrightharpoons\) y cmp := "\leftrightharpoons" =># '(nos _1)'; x \(\leftrightsquigarrow\) y arr := "\leftrightsquigarrow" =># '(nos _1)'; x \(\leq\) y cmp := "\leq" =># '(nos _1)'; x \(\leqq\) y cmp := "\leqq" =># '(nos _1)'; x \(\leqslant\) y cmp := "\leqslant" =># '(nos _1)'; x \(\lessapprox\) y cmp := "\lessapprox" =># '(nos _1)'; x \(\lessdot\) y cmp := "\lessdot" =># '(nos _1)'; x \(\lesseqgtr\) y cmp := "\lesseqgtr" =># '(nos _1)'; x \(\lesseqqgtr\) y cmp := "\lesseqqgtr" =># '(nos _1)'; x \(\lessgtr\) y cmp := "\lessgtr" =># '(nos _1)'; x \(\lesssim\) y cmp := "\lesssim" =># '(nos _1)'; x \(\Lleftarrow\) y arr := "\Lleftarrow" =># '(nos _1)'; x \(\lll\) y cmp := "\lll" =># '(nos _1)'; x \(\llless\) y cmp := "\llless" =># '(nos _1)'; x \(\lnapprox\) y cmp := "\lnapprox" =># '(nos _1)'; x \(\lneq\) y cmp := "\lneq" =># '(nos _1)'; x \(\lneqq\) y cmp := "\lneqq" =># '(nos _1)'; x \(\lnot\) y cmp := "\lnot" =># '(nos _1)'; x \(\lnsim\) y cmp := "\lnsim" =># '(nos _1)'; x \(\Longleftarrow\) y arr := "\Longleftarrow" =># '(nos _1)'; x \(\longleftarrow\) y arr := "\longleftarrow" =># '(nos _1)'; x \(\Longleftrightarrow\) y arr := "\Longleftrightarrow" =># '(nos _1)'; x \(\longleftrightarrow\) y arr := "\longleftrightarrow" =># '(nos _1)'; x \(\longmapsto\) y arr := "\longmapsto" =># '(nos _1)'; x \(\Longrightarrow\) y arr := "\Longrightarrow" =># '(nos _1)'; x \(\longrightarrow\) y arr := "\longrightarrow" =># '(nos _1)'; x \(\lt\) y cmp := "\lt" =># '(nos _1)'; x \(\ltimes\) y cmp := "\ltimes" =># '(nos _1)'; x \(\lvertneqq\) y cmp := "\lvertneqq" =># '(nos _1)';
1.13 M
x \(\mapsto\) y arr := "\mapsto" =># '(nos _1)';
1.14 N
x \(\ncong\) y cmp := "\ncong" =># '(nos _1)'; x \(\ne\) y cmp := "\ne" =># '(nos _1)'; x \(\neq\) y cmp := "\neq" =># '(nos _1)'; x \(\ngeq\) y cmp := "\ngeq" =># '(nos _1)'; x \(\ngeqq\) y cmp := "\ngeqq" =># '(nos _1)'; x \(\ngeqslant\) y cmp := "\ngeqslant" =># '(nos _1)'; x \(\ngtr\) y cmp := "\ngtr" =># '(nos _1)'; x \(\ni\) y cmp := "\ni" =># '(nos _1)'; x \(\nleq\) y cmp := "\nleq" =># '(nos _1)'; x \(\nleqq\) y cmp := "\nleqq" =># '(nos _1)'; x \(\nleqslant\) y cmp := "\nleqslant" =># '(nos _1)'; x \(\nless\) y cmp := "\nless" =># '(nos _1)'; x \(\notin\) y cmp := "\notin" =># '(nos _1)'; x \(\nparallel\) y cmp := "\nparallel" =># '(nos _1)'; x \(\nprec\) y cmp := "\nprec" =># '(nos _1)'; x \(\npreceq\) y cmp := "\npreceq" =># '(nos _1)'; x \(\nsim\) y cmp := "\nsim" =># '(nos _1)'; x \(\nsubseteq\) y cmp := "\nsubseteq" =># '(nos _1)'; x \(\nsubseteqq\) y cmp := "\nsubseteqq" =># '(nos _1)'; x \(\nsucc\) y cmp := "\nsucc" =># '(nos _1)'; x \(\nsucceq\) y cmp := "\nsucceq" =># '(nos _1)'; x \(\nsupseteq\) y cmp := "\nsupseteq" =># '(nos _1)'; x \(\nsupseteqq\) y cmp := "\nsupseteqq" =># '(nos _1)'; x \(\ntriangleleft\) y cmp := "\ntriangleleft" =># '(nos _1)'; x \(\ntrianglelefteq\) y cmp := "\ntrianglelefteq" =># '(nos _1)'; x \(\ntriangleright\) y cmp := "\ntriangleright" =># '(nos _1)'; x \(\ntrianglerighteq\) y cmp := "\ntrianglerighteq" =># '(nos _1)';
1.15 O
x \(\odot\) y bin := "\odot" =># '(nos _1)'; x \(\ominus\) y bin := "\ominus" =># '(nos _1)'; x \(\oplus\) y bin := "\oplus" =># '(nos _1)'; x \(\oslash\) y bin := "\oslash" =># '(nos _1)'; x \(\otimes\) y bin := "\otimes" =># '(nos _1)'; x \(\owns\) y cmp := "\owns" =># '(nos _1)';
1.16 P
x \(\perp\) y cmp := "\perp" =># '(nos _1)'; x \(\pm\) y bin := "\pm" =># '(nos _1)'; x \(\prec\) y cmp := "\prec" =># '(nos _1)'; x \(\precapprox\) y cmp := "\precapprox" =># '(nos _1)'; x \(\preccurlyeq\) y cmp := "\preccurlyeq" =># '(nos _1)'; x \(\preceq\) y cmp := "\preceq" =># '(nos _1)'; x \(\precnapprox\) y cmp := "\precnapprox" =># '(nos _1)'; x \(\precneqq\) y cmp := "\precneqq" =># '(nos _1)'; x \(\precnsim\) y cmp := "\precnsim" =># '(nos _1)'; x \(\precsim\) y cmp := "\precsim" =># '(nos _1)'; x \(\prod\) y bin := "\prod" =># '(nos _1)'; x \(\propto\) y cmp := "\propto" =># '(nos _1)';
1.17 Q
1.18 R
x \(\rhd\) y cmp := "\rhd" =># '(nos _1)'; x \(\Rightarrow\) y arr := "\Rightarrow" =># '(nos _1)'; x \(\rightarrow\) y arr := "\rightarrow" =># '(nos _1)'; x \(\rightarrowtail\) y arr := "\rightarrowtail" =># '(nos _1)'; x \(\rightharpoondown\) y arr := "\rightharpoondown" =># '(nos _1)'; x \(\rightharpoonup\) y arr := "\rightharpoonup" =># '(nos _1)'; x \(\rightleftarrows\) y arr := "\rightleftarrows" =># '(nos _1)'; x \(\rightleftharpoons\) y arr := "\rightleftharpoons" =># '(nos _1)'; x \(\rightleftharpoons\) y arr := "\rightleftharpoons" =># '(nos _1)'; x \(\rightrightarrows\) y arr := "\rightrightarrows" =># '(nos _1)'; x \(\rightsquigarrow\) y arr := "\rightsquigarrow" =># '(nos _1)'; x \(\Rrightarrow\) y arr := "\Rrightarrow" =># '(nos _1)'; x \(\rtimes\) y cmp := "\rtimes" =># '(nos _1)';
1.19 S
x \(\setminus\) y bin := "\setminus" =># '(nos _1)'; x \(\sim\) y cmp := "\sim" =># '(nos _1)'; x \(\simeq\) y cmp := "\simeq" =># '(nos _1)'; x \(\smallsetminus\) y cmp := "\smallsetminus" =># '(nos _1)'; x \(\sqcap\) y bin := "\sqcap" =># '(nos _1)'; x \(\sqcup\) y bin := "\sqcup" =># '(nos _1)'; x \(\sqsubset\) y cmp := "\sqsubset" =># '(nos _1)'; x \(\sqsubseteq\) y cmp := "\sqsubseteq" =># '(nos _1)'; x \(\sqsupset\) y cmp := "\sqsupset" =># '(nos _1)'; x \(\sqsupseteq\) y cmp := "\sqsupseteq" =># '(nos _1)'; x \(\square\) y bin := "\square" =># '(nos _1)'; x \(\subset\) y cmp := "\subset" =># '(nos _1)'; x \(\Subset\) y cmp := "\Subset" =># '(nos _1)'; x \(\subseteq\) y cmp := "\subseteq" =># '(nos _1)'; x \(\subseteqq\) y cmp := "\subseteqq" =># '(nos _1)'; x \(\subsetneq\) y cmp := "\subsetneq" =># '(nos _1)'; x \(\subsetneqq\) y cmp := "\subsetneqq" =># '(nos _1)'; x \(\succ\) y cmp := "\succ" =># '(nos _1)'; x \(\succapprox\) y cmp := "\succapprox" =># '(nos _1)'; x \(\succcurlyeq\) y cmp := "\succcurlyeq" =># '(nos _1)'; x \(\succeq\) y cmp := "\succeq" =># '(nos _1)'; x \(\succnapprox\) y cmp := "\succnapprox" =># '(nos _1)'; x \(\succneqq\) y cmp := "\succneqq" =># '(nos _1)'; x \(\succnsim\) y cmp := "\succnsim" =># '(nos _1)'; x \(\succsim\) y cmp := "\succsim" =># '(nos _1)'; x \(\supset\) y cmp := "\supset" =># '(nos _1)'; x \(\Supset\) y cmp := "\Supset" =># '(nos _1)'; x \(\supseteq\) y cmp := "\supseteq" =># '(nos _1)'; x \(\supseteqq\) y cmp := "\supseteqq" =># '(nos _1)'; x \(\supsetneq\) y cmp := "\supsetneq" =># '(nos _1)'; x \(\supsetneqq\) y cmp := "\supsetneqq" =># '(nos _1)';
1.20 T
x \(\thickapprox\) y cmp := "\thickapprox" =># '(nos _1)'; x \(\thicksim\) y cmp := "\thicksim" =># '(nos _1)'; x \(\times\) y cmp := "\times" =># '(nos _1)'; x \(\to\) y arr := "\to" =># '(nos _1)'; x \(\triangle\) y bin := "\triangle" =># '(nos _1)'; x \(\triangledown\) y bin := "\triangledown" =># '(nos _1)'; x \(\triangleleft\) y cmp := "\triangleleft" =># '(nos _1)'; x \(\trianglelefteq\) y cmp := "\trianglelefteq" =># '(nos _1)'; x \(\triangleq\) y cmp := "\triangleq" =># '(nos _1)'; x \(\triangleright\) y cmp := "\triangleright" =># '(nos _1)'; x \(\trianglerighteq\) y cmp := "\trianglerighteq" =># '(nos _1)'; x \(\twoheadleftarrow\) y arr := "\twoheadleftarrow" =># '(nos _1)'; x \(\twoheadrightarrow\) y arr := "\twoheadrightarrow" =># '(nos _1)';
1.21 U
x \(\unlhd\) y cmp := "\unlhd" =># '(nos _1)'; x \(\unrhd\) y cmp := "\unrhd" =># '(nos _1)'; x \(\Uparrow\) y bin := "\Uparrow" =># '(nos _1)'; x \(\uparrow\) y bin := "\uparrow" =># '(nos _1)'; x \(\Updownarrow\) y bin := "\Updownarrow" =># '(nos _1)'; x \(\updownarrow\) y bin := "\updownarrow" =># '(nos _1)'; x \(\upharpoonleft\) y bin := "\upharpoonleft" =># '(nos _1)'; x \(\upharpoonright\) y bin := "\upharpoonright" =># '(nos _1)'; x \(\uplus\) y bin := "\uplus" =># '(nos _1)'; x \(\upuparrows\) y bin := "\upuparrows" =># '(nos _1)';
1.22 V
x \(\varsubsetneq\) y cmp := "\varsubsetneq" =># '(nos _1)'; x \(\varsubsetneqq\) y cmp := "\varsubsetneqq" =># '(nos _1)'; x \(\varsupsetneq\) y cmp := "\varsupsetneq" =># '(nos _1)'; x \(\varsupsetneqq\) y cmp := "\varsupsetneqq" =># '(nos _1)'; x \(\vee\) y bin := "\vee" =># '(nos _1)'; x \(\veebar\) y cmp := "\veebar" =># '(nos _1)';
1.23 W
x \(\wedge\) y bin := "\wedge" =># '(nos _1)';
1.24 X
x \(\xleftarrow\) y arr := "\xleftarrow" =># '(nos _1)'; x \(\xrightarrow\) y arr := "\xrightarrow" =># '(nos _1)';
1.25 Y
1.26 Z
2 Grammar
Precedence rules.
x[scomparison_pri]:= x[>scomparison_pri] bin x[>scomparison_pri] =># "`(ast_apply ,_sr (,_2 (,_1 ,_3)))"; x[scomparison_pri]:= x[>scomparison_pri] cmp x[>scomparison_pri] =># "`(ast_apply ,_sr (,_2 (,_1 ,_3)))"; // tex logic operators x[stex_implies_condition_pri] := x[>stex_implies_condition_pri] "\implies" x[>stex_implies_condition_pri] =># "(infix 'implies)"; x[stex_or_condition_pri] := x[>stex_or_condition_pri] ( "\lor" x[>stex_or_condition_pri])+ =># "(chain 'ast_orlist _1 _2)" note "lor"; x[stex_and_condition_pri] := x[>stex_and_condition_pri] ( "\land" x[>stex_and_condition_pri])+ =># "(chain 'ast_andlist _1 _2)" note "land"; x[stex_not_condition_pri] := "\lnot" x[stex_not_condition_pri] =># "(prefix 'lnot)"; // set ops (note: no setminus, its a standard binop at the moment ;) // note: no \Cap or other variants .. would interfere with chain // there's no reason at all to chain these anyhow, they're standard left assoc operators x[ssetunion_pri] := x[ssetunion_pri] "\cup" x[>ssetunion_pri] =># "(infix 'setunion)" note "setunion"; x[ssetintersection_pri] := x[ssetintersection_pri] "\cap" x[>ssetintersection_pri] =># "(infix 'setintersection)" note "setintersection"; // All arrows are right associative .. hmm .. x[sarrow_pri] := x[scase_literal_pri] arr x[sarrow_pri] =># "`(ast_apply ,_sr (,_2 (,_1 ,_3)))"; // atomic satom := "\lceil" sexpr "\rceil" =># "`(ast_apply ,_sr (,(noi 'ceil) (,_2)))"; satom := "\lfloor" sexpr "\rfloor" =># "`(ast_apply ,_sr (,(noi 'floor) (,_2)))";