summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/stex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-05-20 17:50:33 +0000
committerKarl Berry <karl@freefriends.org>2008-05-20 17:50:33 +0000
commita62e1d4e096be4d689f337c35488333116c5e3e4 (patch)
tree803679fd4f27b12d609e5920df24f6855150c00c /Master/texmf-dist/tex/latex/stex
parent9f0169e9cace9e8a9a261e3095ea97dac44f3d4a (diff)
new package stex (10may08)
git-svn-id: svn://tug.org/texlive/trunk@8255 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/stex')
-rw-r--r--Master/texmf-dist/tex/latex/stex/cmathml.sty450
-rw-r--r--Master/texmf-dist/tex/latex/stex/cmathml.sty.ltxml974
-rw-r--r--Master/texmf-dist/tex/latex/stex/cmathmlx.sty14
-rw-r--r--Master/texmf-dist/tex/latex/stex/cmathmlx.sty.ltxml22
-rw-r--r--Master/texmf-dist/tex/latex/stex/cnx.cls141
-rw-r--r--Master/texmf-dist/tex/latex/stex/cnx.cls.ltxml281
-rw-r--r--Master/texmf-dist/tex/latex/stex/modules.sty145
-rw-r--r--Master/texmf-dist/tex/latex/stex/modules.sty.ltxml246
-rw-r--r--Master/texmf-dist/tex/latex/stex/omdoc.cls15
-rw-r--r--Master/texmf-dist/tex/latex/stex/omdoc.cls.ltxml22
-rw-r--r--Master/texmf-dist/tex/latex/stex/omdoc.sty83
-rw-r--r--Master/texmf-dist/tex/latex/stex/omdoc.sty.ltxml230
-rw-r--r--Master/texmf-dist/tex/latex/stex/presentation.sty125
-rw-r--r--Master/texmf-dist/tex/latex/stex/presentation.sty.ltxml197
-rw-r--r--Master/texmf-dist/tex/latex/stex/sproof.sty112
-rw-r--r--Master/texmf-dist/tex/latex/stex/sproof.sty.ltxml107
-rw-r--r--Master/texmf-dist/tex/latex/stex/statements.sty85
-rw-r--r--Master/texmf-dist/tex/latex/stex/statements.sty.ltxml142
-rw-r--r--Master/texmf-dist/tex/latex/stex/stex.sty20
19 files changed, 3411 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/stex/cmathml.sty b/Master/texmf-dist/tex/latex/stex/cmathml.sty
new file mode 100644
index 00000000000..90b215dd2ab
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/cmathml.sty
@@ -0,0 +1,450 @@
+%%
+%% This is file `cmathml.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% cmathml.dtx (with options: `sty')
+%%
+\RequirePackage{presentation}
+\newcommand{\Capply}[3][]{#2(#3)}
+\def\CMathML@cn#1{#1}
+\newcommand{\Ccn}[2][]{\CMathML@cn{#2}}
+\def\CMathML@ci#1{#1}
+\newcommand{\Cci}[2][]{\CMathML@ci{#2}}
+\def\CMathML@csymbol#1{#1}
+\newcommand{\Ccsymbol}[2][]{\CMathML@csymbol{#2}}
+\def\CMathML@ccinterval#1#2{[#1,#2]}
+\newcommand{\Cccinterval}[3][]{\CMathML@ccinterval{#2}{#3}}
+\def\CMathML@cointerval#1#2{[#1,#2)}
+\newcommand{\Ccointerval}[3][]{\CMathML@cointerval{#2}{#3}}
+\def\CMathML@ocinterval#1#2{(#1,#2]}
+\newcommand{\Cocinterval}[3][]{\CMathML@ocinterval{#2}{#3}}
+\def\CMathML@oointerval#1#2{(#1,#2)}
+\newcommand{\Coointerval}[3][]{\CMathML@oointerval{#2}{#3}}
+\newcommand{\Cinverse}[2][]{#2^{-1}}
+\def\CMathML@lambda#1#2{\lambda({#1},{#2})}
+\newcommand{\Clambda}[3][]{\CMathML@lambda{#2}{#3}}
+\def\CMathML@lambdaDA#1#2#3{\lambda({#1}\colon{#2},#3)}
+\newcommand{\ClambdaDA}[4][]{\CMathML@lambdaDA{#2}{#3}{#4}}
+\def\CMathML@restrict#1#2{\left.#1\right|_{#2}}
+\newcommand{\Crestrict}[3][]{\CMathML@restrict{#2}{#3}}
+\def\CMathML@composeOp{\circ}
+\newcommand{\CcomposeOp}{\CMathML@composeOp}
+\def\CMathML@compose#1{\assoc[p=500,pi=500]{\CMathML@composeOp}{#1}}
+\newcommand{\Ccompose}[2][]{\CMathML@compose{#2}}
+\def\CMathML@ident#1{\mathrm{id}}
+\newcommand{\Cident}[1][]{\CMathML@ident{#1}}
+\def\CMathML@domain#1{\mbox{dom}(#1)}
+\newcommand{\Cdomain}[2][]{\CMathML@domain{#2}}
+\def\CMathML@codomain#1{\mbox{codom}(#1)}
+\newcommand{\Ccodomain}[2][]{\CMathML@codomain{#2}}
+\def\CMathML@image#1{{\mathbf{Im}}(#1)}
+\newcommand{\Cimage}[2][]{\CMathML@image{#2}}
+\def\CMathML@piecewise#1{\left\{\begin{array}{ll}#1\end{array}\right.}
+\newcommand{\Cpiecewise}[2][]{\CMathML@piecewise{#2}}
+\def\CMathML@piece#1#2{#1&{\mathrm{if}}\;{#2}\\}
+\newcommand{\Cpiece}[3][]{\CMathML@piece{#2}{#3}}
+\def\CMathML@otherwise#1{#1&else\\}
+\newcommand{\Cotherwise}[2][]{\CMathML@otherwise{#2}}
+\def\CMathML@quotient#1#2{\frac{#1}{#2}}
+\newcommand{\Cquotient}[3][]{\CMathML@quotient{#2}{#3}}
+\def\CMathML@factorialOp{!}
+\newcommand{\CfactorialOp}{\CMathML@factorialOp}
+\def\CMathML@factorial#1{#1{\CMathML@factorialOp}}
+\newcommand{\Cfactorial}[2][]{\CMathML@factorial{#2}}
+\def\CMathML@divideOp{\div}
+\newcommand{\CdivideOp}{\CMathML@divideOp}
+\def\CMathML@divide#1#2{\infix[p=400]{\CMathML@divideOp}{#1}{#2}}
+\newcommand{\Cdivide}[3][]{\CMathML@divide{#2}{#3}}
+\def\CMathML@maxOp{\mathrm{max}}
+\newcommand{\CmaxOp}{\CMathML@maxOp}
+\def\CMathML@max#1{{\CMathML@maxOp}(#1)}
+\newcommand{\Cmax}[2][]{\CMathML@max{#2}}
+\def\CMathML@minOp{\mathrm{min}}
+\newcommand{\CminOp}{\CMathML@minOp}
+\def\CMathML@min#1{{\CMathML@minOp}(#1)}
+\newcommand{\Cmin}[2][]{\CMathML@min{#2}}
+\def\CMathML@minusOp{-}
+\newcommand{\CminusOp}{\CMathML@minusOp}
+\def\CMathML@minus#1#2{\infix[p=500]{\CMathML@minusOp}{#1}{#2}}
+\newcommand{\Cminus}[3][]{\CMathML@minus{#2}{#3}}
+\def\CMathML@uminus#1{\prefix[p=200]{\CMathML@minusOp}{#1}}
+\newcommand{\Cuminus}[2][]{\CMathML@uminus{#2}}
+\def\CMathML@plusOp{+}
+\newcommand{\CplusOp}{\CMathML@plusOp}
+\def\CMathML@plus#1{\assoc[p=500]{\CMathML@plusOp}{#1}}
+\newcommand{\Cplus}[2][]{\CMathML@plus{#2}}
+\def\CMathML@power#1#2{\infix[p=200]{^}{#1}{#2}}
+\newcommand{\Cpower}[3][]{\CMathML@power{#2}{#3}}
+\def\CMathML@remOp{\bmod}
+\newcommand{\CremOp}{\CMathML@remOp}
+\def\CMathML@rem#1#2{#1 \CMathML@remOp #2}
+\newcommand{\Crem}[3][]{\CMathML@rem{#2}{#3}}
+\def\CMathML@timesOp{\cdot}
+\newcommand{\CtimesOp}{\CMathML@timesOp}
+\def\CMathML@times#1{\assoc[p=400]{\CMathML@timesOp}{#1}}
+\newcommand{\Ctimes}[2][]{\CMathML@times{#2}}
+\def\CMathML@rootOp{\sqrt}
+\newcommand{\CrootOp}{\CMathML@rootOp{}}
+\def\CMathML@root#1#2{\CMathML@rootOp[#1]{#2}}
+\newcommand{\Croot}[3][]{\CMathML@root{#2}{#3}}
+\def\CMathML@gcd#1{\gcd(#1)}
+\newcommand{\Cgcd}[2][]{\CMathML@gcd{#2}}
+\def\CMathML@andOp{\wedge}
+\newcommand{\CandOp}{\CMathML@andOp}
+\def\CMathML@and#1{\assoc[p=400]{\CMathML@andOp}{#1}}
+\newcommand{\Cand}[2][]{\CMathML@and{#2}}
+\def\CMathML@orOp{\vee}
+\newcommand{\CorOp}{\CMathML@orOp}
+\def\CMathML@or#1{\assoc[p=500]{\CMathML@orOp}{#1}}
+\newcommand{\Cor}[2][]{\CMathML@or{#2}}
+\def\CMathML@xorOp{\oplus}
+\newcommand{\CxorOp}{\CMathML@xorOp}
+\def\CMathML@xor#1{\assoc[p=400]{\CMathML@xorOp}{#1}}
+\newcommand{\Cxor}[2][]{\CMathML@xor{#2}}
+\def\CMathML@notOp{\neg}
+\newcommand{\CnotOp}{\CMathML@notOp}
+\def\CMathML@not#1{\CMathML@notOp{#1}}
+\newcommand{\Cnot}[2][]{\CMathML@not{#2}}
+\def\CMathML@impliesOp{\Longrightarrow}
+\newcommand{\CimpliesOp}{\CMathML@impliesOp}
+\def\CMathML@implies#1#2{#1\CMathML@impliesOp{#2}}
+\newcommand{\Cimplies}[3][]{\CMathML@implies{#2}{#3}}
+\def\CMathML@AndDA#1#2{\bigwedge_{#1}{#2}} % set, scope
+\newcommand{\CAndDA}[3][]{\CMathML@AndDA{#2}{#3}}
+\def\CMathML@AndCond#1#2#3{\bigwedge_{#2}{#3}} % bvars,condition, scope
+\newcommand{\CAndCond}[4][]{\CMathML@AndCond{#2}{#2}{#3}}
+\def\CMathML@OrDA#1#2{\bigvee_{#1}{#2}} % set, scope
+\newcommand{\COrDa}[3][]{\CMathML@OrDA{#2}{#3}}
+\def\CMathML@OrCond#1#2#3{\bigvee_{#2}{#3}}% bvars,condition, scope
+\newcommand{\COrCond}[4][]{\CMathML@OrCond{#2}{#3}{#4}}
+\def\CMathML@XorDA#1#2{\bigoplus_{#1}{#2}} % set, scope
+\newcommand{\CXorDA}[3][]{\CMathML@XorDA{#2}{#3}}
+\def\CMathML@XorCond#1#2#3{\bigoplus_{#2}{#3}}% bvars,condition, scope
+\newcommand{\CXorCond}[4][]{\CMathML@XorCond{#2}{#3}{#4}}
+\def\CMathML@forall#1#2{\forall{#1}\colon{#2}}
+\newcommand{\Cforall}[3][]{\CMathML@forall{#2}{#3}}
+\def\CMathML@forallCond#1#2#3{\forall{#1},{#2}\colon{#3}} % list), condition, scope
+\newcommand{\CforallCond}[4][]{\CMathML@forallCond{#2}{#3}{#4}}
+\def\CMathML@exists#1#2{\exists{#1}\colon{#2}}
+\newcommand{\Cexists}[3][]{\CMathML@exists{#2}{#3}}
+\def\CMathML@esistsCont#1#2#3{\exists{#1},{#2}\colon{#3}}
+\newcommand{\CexistsCond}[4][]{\CMathML@esistsCont{#2}{#3}{#4}}
+\def\CMathML@abs#1{\left|#1\right|}
+\newcommand{\Cabs}[2][]{\CMathML@abs{#2}}
+\def\CMathML@conjugate#1{\overline{#1}}
+\newcommand{\Cconjugate}[2][]{\CMathML@conjugate{#2}}
+\def\CMathML@arg#1{\angle #1}
+\newcommand{\Carg}[2][]{\CMathML@arg{#2}}
+\def\CMathML@real#1{\Re #1}
+\newcommand{\Creal}[2][]{\CMathML@real{#2}}
+\def\CMathML@imaginary#1{\Im #1}
+\newcommand{\Cimaginary}[2][]{\CMathML@imaginary{#2}}
+\def\CMathML@lcm#1{\mbox{lcm}(#1)}
+\newcommand{\Clcm}[2][]{\CMathML@lcm{#2}}
+\def\CMathML@floor#1{\left\lfloor{#1}\right\rfloor}
+\newcommand{\Cfloor}[2][]{\CMathML@floor{#2}}
+\def\CMathML@ceiling#1{\left\lceil{#1}\right\rceil}
+\newcommand{\Cceiling}[2][]{\CMathML@ceiling{#2}}
+\def\CMathML@eqOp{=}
+\newcommand{\CeqOp}{\CMathML@eqOp}
+\def\CMathML@eq#1{\assoc[p=700]{\CMathML@eqOp}{#1}}
+\newcommand{\Ceq}[2][]{\CMathML@eq{#2}}
+\def\CMathML@neqOp{\neq}
+\newcommand{\CneqOp}{\CMathML@neqOp}
+\def\CMathML@neq#1#2{\infix[p=700]{\CMathML@neqOp}{#1}{#2}}
+\newcommand{\Cneq}[3][]{\CMathML@neq{#2}{#3}}
+\def\CMathML@gtOp{>}
+\newcommand{\CgtOp}{\CMathML@gtOp}
+\def\CMathML@gt#1{\assoc[p=700]{\CMathML@gtOp}{#1}}
+\newcommand{\Cgt}[2][]{\CMathML@gt{#2}}
+\def\CMathML@ltOp{<}
+\newcommand{\CltOp}{\CMathML@ltOp}
+\def\CMathML@lt#1{\assoc[p=700]{\CMathML@ltOp}{#1}}
+\newcommand{\Clt}[2][]{\CMathML@lt{#2}}
+\def\CMathML@geqOp{\geq}
+\newcommand{\CgeqOp}{\CMathML@geqOp}
+\def\CMathML@geq#1{\assoc[p=700]{\CMathML@geqOp}{#1}}
+\newcommand{\Cgeq}[2][]{\CMathML@geq{#2}}
+\def\CMathML@leqOp{\leq}
+\newcommand{\CleqOp}{\CMathML@leqOp}
+\def\CMathML@leq#1{\assoc[p=700]{\CMathML@leqOp}{#1}}
+\newcommand{\Cleq}[2][]{\CMathML@leq{#2}}
+\def\CMathML@equivalentOp{\equiv}
+\newcommand{\CequivalentOp}{\CMathML@equivalentOp}
+\def\CMathML@equivalent#1{\assoc[p=700]{\CMathML@equivalentOp}{#1}}
+\newcommand{\Cequivalent}[2][]{\CMathML@equivalent{#2}}
+\def\CMathML@approxOp{\approx}
+\newcommand{\CapproxOp}{\CMathML@approxOp}
+\def\CMathML@approx#1#2{#1\CMathML@approxOp{#2}}
+\newcommand{\Capprox}[3][]{\CMathML@approx{#2}{#3}}
+\def\CMathML@factorofOp{\mid}
+\newcommand{\CfactorofOp}{\CMathML@factorofOp}
+\def\CMathML@factorof#1#2{#1\CMathML@factorofOp{#2}}
+\newcommand{\Cfactorof}[3][]{\CMathML@factorof{#2}{#3}}
+
+\def\CMathML@intOp{\int}
+\newcommand{\CintOp}{\CMathML@intOp}
+\def\CMathML@int#1{\CMathML@intOp{#1}}
+\newcommand{\Cint}[2][]{\CMathML@int{#2}}
+\def\CMathML@intLimits#1#2#3#4{\CMathML@intOp_{#2}^{#3}{#4}d{#1}} %bvars,llimit, ulimit,body
+\newcommand{\CintLimits}[5][]{\CMathML@intLimits{#2}{#3}{#4}{#5}}
+\def\CMathML@intSet#1#2{\CMathML@intOp_{#1}{#2}}% set,function
+\newcommand{\CintDA}[3][]{\CMathML@intSet{#2}{#3}}
+\def\CMathML@intCond#1#2#3{\CMathML@intOp_{#2}{#3}d{#1}} %bvars, condition, body
+\newcommand{\CintCond}[4][]{\CMathML@intCond{#2}{#3}{#4}}
+
+\def\CMathML@diff#1{#1'}
+\newcommand{\Cdiff}[2][]{\CMathML@diff{#2}}
+\def\CMathML@ddiff#1#2{{d{#2}(#1)\over{d{#1}}}}
+\newcommand{\Cddiff}[3][]{\CMathML@ddiff{#2}{#3}}
+\def\CMathML@partialdiff#1#2#3{{\partial^{#1}\over\partial{#2}}{#3}}% degree, bvars, body
+\newcommand{\Cpartialdiff}[4][]{\CMathML@partialdiff{#2}{#3}{#4}}
+\newcommand{\Cdegree}[2]{#1^{#2}}
+\def\CMathML@limit#1#2#3{\lim_{#1\rightarrow{#2}}{#3}}
+\newcommand{\Climit}[4][]{\CMathML@limit{#2}{#3}{#4}} % bvar, lowlimit, scope
+\def\CMathML@limitCond#1#2#3{\lim_{#2}{#3}}
+\newcommand{\ClimitCond}[4][]{\CMathML@limitCond{#2}{#3}{#4}} % bvars, condition, scope
+\def\CMathML@tendstoOp{\rightarrow}
+\newcommand{\CtendstoOp}{\CMathML@tendstoOp}
+\def\CMathML@tendsto#1#2{#1\CMathML@tendstoOp{#2}}
+\newcommand{\Ctendsto}[3][]{\CMathML@tendsto{#2}{#3}}
+\def\CMathML@tendstoAboveOp{\searrow}
+\newcommand{\CtendstoAboveOp}{\CMathML@tendstoAboveOp}
+\def\CMathML@tendstoAbove#1#2{#1\searrow{#2}}
+\newcommand{\CtendstoAbove}[3][]{\CMathML@tendstoAbove{#2}{#3}}
+\def\CMathML@tendstoBelowOp{\nearrow}
+\newcommand{\CtendstoBelowOp}{\CMathML@tendstoBelowOp}
+\def\CMathML@tendstoBelow#1#2{#1\CMathML@tendstoBelowOp{#2}}
+\newcommand{\CtendstoBelow}[3][]{\CMathML@tendstoBelow{#2}{#3}}
+\def\CMathML@divergence#1{\nabla\cdot{#1}}
+\newcommand{\Cdivergence}[2][]{\CMathML@divergence{#2}}
+\def\CMathML@grad#1{\nabla{#1}}
+\newcommand{\Cgrad}[2][]{\CMathML@grad{#2}}
+\def\CMathML@curl#1{\nabla\times{#1}}
+\newcommand{\Ccurl}[2][]{\CMathML@curl{#2}}
+\def\CMathML@laplacian#1{\nabla^2#1}
+\newcommand{\Claplacian}[2][]{\CMathML@laplacian{#2}}
+\def\CMathML@set#1{\left\{#1\right\}}
+\newcommand{\Cset}[2][]{\CMathML@set{#2}}
+\def\CMathML@setRes#1#2{\{#1|#2\}}
+\newcommand{\CsetRes}[3][]{\CMathML@setRes{#2}{#3}}
+\def\CMathML@setCond#1#2#3{\{#2|#3\}}
+\newcommand{\CsetCond}[4][]{\CMathML@setCond{#2}{#3}{#4}}
+\def\CMathML@setDA#1#2#3{\{#1\in{#2}|#3\}}
+\newcommand{\CsetDA}[4][]{\CMathML@setDA{#2}{#3}{#4}}
+\def\CMathML@listOp{\mbox{list}}
+\newcommand{\ClistOp}{\CMathML@listOp}
+\def\CMathML@list#1{\CMathML@listOp({#1})}
+\newcommand{\Clist}[2][]{\CMathML@list{#2}}
+\def\CMathML@unionOp{\cup}
+\newcommand{\CunionOp}{\CMathML@unionOp}
+\def\CMathML@union#1{\assoc[p=500]{\CMathML@unionOp}{#1}}
+\newcommand{\Cunion}[2][]{\CMathML@union{#2}}
+\def\CMathML@intersectOp{\cap}
+\newcommand{\CintersectOp}{\CMathML@intersectOp}
+\def\CMathML@intersect#1{\assoc[p=400]{\CMathML@intersectOp}{#1}}
+\newcommand{\Cintersect}[2][]{\CMathML@intersect{#2}}
+\def\CMathML@inOp{\in}
+\newcommand{\CinOp}{\CMathML@inOp}
+\def\CMathML@in#1#2{#1\CMathML@inOp{#2}}
+\newcommand{\Cin}[3][]{\CMathML@in{#2}{#3}}
+\def\CMathML@notinOp{\notin}
+\newcommand{\CnotinOp}{\CMathML@notinOp}
+\def\CMathML@notin#1#2{#1\CMathML@notinOp{#2}}
+\newcommand{\Cnotin}[3][]{\CMathML@notin{#2}{#3}}
+\def\CMathML@setdiffOp{\setminus}
+\newcommand{\CsetdiffOp}{\CMathML@setdiffOp}
+\def\CMathML@setdiff#1#2{#1\CMathML@setdiffOp{#2}}
+\newcommand{\Csetdiff}[3][]{\CMathML@setdiff{#2}{#3}}
+\def\CMathML@cardOp{\#}
+\newcommand{\CcardOp}{\CMathML@cardOp}
+\def\CMathML@card#1{\CMathML@cardOp #1}
+\newcommand{\Ccard}[2][]{\CMathML@card{#2}}
+\def\CMathML@cartesianproductOp{\times}
+\newcommand{\CcartesianproductOp}{\CMathML@cartesianproductOp}
+\def\CMathML@cartesianproduct#1{\assoc[p=400]{\CMathML@cartesianproductOp}{#1}}
+\newcommand{\Ccartesianproduct}[2][]{\CMathML@cartesianproduct{#2}}
+\def\CMathML@subsetOp{\subseteq}
+\newcommand{\CsubsetOp}{\CMathML@subsetOp}
+\def\CMathML@subset#1{\assoc[p=700]{\CMathML@subsetOp}{#1}}
+\newcommand{\Csubset}[2][]{\CMathML@subset{#2}}
+\def\CMathML@prsubsetOp{\subset}
+\newcommand{\CprsubsetOp}{\CMathML@prsubsetOp}
+\def\CMathML@prsubset#1{\assoc[p=700]{\CMathML@prsubsetOp}{#1}}
+\newcommand{\Cprsubset}[2][]{\CMathML@prsubset{#2}}
+\def\CMathML@notsubsetOp{\not\subseteq}
+\newcommand{\CnotsubsetOp}{\CMathML@notsubsetOp}
+\def\CMathML@notsubset#1#2{#1\CMathML@notsubsetOp{#2}}
+\newcommand{\Cnotsubset}[3][]{\CMathML@notsubset{#2}{#3}}
+\def\CMathML@notprsubsetOp{\not\subset}
+\newcommand{\CnotprsubsetOp}{\CMathML@notprsubsetOp}
+\def\CMathML@notprsubset#1#2{#1\CMathML@notprsubsetOp{#2}}
+\newcommand{\Cnotprsubset}[3][]{\CMathML@notprsubset{#2}{#3}}
+\def\CMathML@supsetOp{\supseteq}
+\newcommand{\CsupsetOp}{\CMathML@supsetOp}
+\def\CMathML@supset#1{\assoc[p=700]{\CMathML@supsetOp}{#1}}
+\newcommand{\Csupset}[2][]{\CMathML@supset{#2}}
+\def\CMathML@prsupsetOp{\supset}
+\newcommand{\CprsupsetOp}{\CMathML@prsupsetOp}
+\def\CMathML@prsupset#1{\assoc[p=700]{\CMathML@prsupsetOp}{#1}}
+\newcommand{\Cprsupset}[2][]{\CMathML@prsupset{#2}}
+\def\CMathML@notsupsetOp{\not\supseteq}
+\newcommand{\CnotsupsetOp}{\CMathML@notsupsetOp}
+\def\CMathML@notsupset#1#2{#1\CMathML@notsupsetOp{#2}}
+\newcommand{\Cnotsupset}[3][]{\CMathML@notsupset{#2}{#3}}
+\def\CMathML@notprsupsetOp{\not\supset}
+\newcommand{\CnotprsupsetOp}{\CMathML@notprsupsetOp}
+\def\CMathML@notprsupset#1#2{#1\CMathML@notprsupsetOp{#2}}
+\newcommand{\Cnotprsupset}[3][]{\CMathML@notprsupset{#2}{#3}}
+\def\CMathML@UnionDAOp{\bigwedge}
+\newcommand{\CUnionDAOp}{\CMathML@UnionDAOp}
+\def\CMathML@UnionDA#1#2{\CMathML@UnionDAOp_{#1}{#2}} % set, scope
+\newcommand{\CUnionDA}[3][]{\CMathML@UnionDA{#2}{#3}}
+\def\CMathML@UnionCond#1#2#3{\CMathML@UnionDAOp_{#2}{#3}} % bvars,condition, scope
+\newcommand{\CUnionCond}[4][]{\CMathML@UnionCond{#2}{#2}{#3}}
+\def\CMathML@IntersectDAOp{\bigvee}
+\newcommand{\CIntersectDAOp}{\CMathML@IntersectDAOp}
+\def\CMathML@IntersectDA#1#2{\CMathML@IntersectDAOp_{#1}{#2}} % set, scope
+\newcommand{\CIntersectDa}[3][]{\CMathML@IntersectDA{#2}{#3}}
+\def\CMathML@IntersectCond#1#2#3{\CMathML@IntersectDAOp_{#2}{#3}}% bvars,condition, scope
+\newcommand{\CIntersectCond}[4][]{\CMathML@IntersectCond{#2}{#3}{#4}}
+\def\CMathML@CartesianproductDAOp{\bigoplus}
+\newcommand{\CCartesianproductDAOp}{\CMathML@CartesianproductDAOp}
+\def\CMathML@CartesianproductDA#1#2{\CMathML@CartesianproductDAOp_{#1}{#2}} % set, scope
+\newcommand{\CCartesianproductDA}[3][]{\CMathML@CartesianproductDA{#2}{#3}}
+\def\CMathML@CartesianproductCond#1#2#3{\CMathML@CartesianproductDAOp_{#2}{#3}}% bvars,condition, scope
+\newcommand{\CCartesianproductCond}[4][]{\CMathML@CartesianproductCond{#2}{#3}{#4}}
+\def\CMathML@sumOp{\sum}
+\newcommand{\CsumOp}{\CMathML@sumOp}
+\def\CMathML@sumLimits#1#2#3#4{\CMathML@sumOp_{#1=#2}^{#3}#4}% bvar, llimit, ulimit, body
+\newcommand{\CsumLimits}[5][]{\CMathML@sumLimits{#2}{#3}{#4}{#5}}
+\def\CMathML@sumCond#1#2#3{\CMathML@sumOp_{#1\in{#2}}#3} % bvar, condition, body
+\newcommand{\CsumCond}[4][]{\CMathML@sumCond{#2}{#3}{#4}}
+\def\CMathML@sumDA#1#2{\CMathML@sumOp_{#1}#2} % set, body
+\newcommand{\CsumDA}[3][]{\CMathML@sumDA{#2}{#3}}
+\def\CMathML@prodOp{\prod}
+\newcommand{\CprodOp}{\CMathML@prodOp}
+\def\CMathML@prodLimits#1#2#3#4{\CMathML@prodOp_{#1=#32^{#3}#4}}% bvar, llimit, ulimit, body
+\newcommand{\CprodLimits}[5][]{\CMathML@prodLimits{#2}{#3}{#4}{#5}}
+\def\CMathML@prodCond#1#2#3{\CMathML@prodOp_{#1\in{#2}}#3} % bvar, condition, body
+\newcommand{\CprodCond}[4][]{\CMathML@prodCond{#2}{#3}{#4}}
+\def\CMathML@prodDA#1#2{\CMathML@prodOp_{#1}#2} % set, body
+\newcommand{\CprodDA}[3]{\CMathML@prodDA{#2}{#3}}
+\def\CMathML@sin#1{\sin(#1)}
+\newcommand{\Csin}[2][]{\CMathML@sin{#2}}
+\def\CMathML@cos#1{\cos(#1)}
+\newcommand{\Ccos}[2][]{\CMathML@cos{#2}}
+\def\CMathML@tan#1{\tan(#1)}
+\newcommand{\Ctan}[2][]{\CMathML@tan{#2}}
+\def\CMathML@sec#1{\sec(#1)}
+\newcommand{\Csec}[2][]{\CMathML@sec{#2}}
+\def\CMathML@csc#1{\csc(#1)}
+\newcommand{\Ccsc}[2][]{\CMathML@csc{#2}}
+\def\CMathML@cot#1{\cot(#1)}
+\newcommand{\Ccot}[2][]{\CMathML@cot{#2}}
+\def\CMathML@sinh#1{\sinh(#1)}
+\newcommand{\Csinh}[2][]{\CMathML@sinh{#2}}
+\def\CMathML@cosh#1{\cosh(#1)}
+\newcommand{\Ccosh}[2][]{\CMathML@cosh{#2}}
+\def\CMathML@tanh#1{\tanh(#1)}
+\newcommand{\Ctanh}[2][]{\CMathML@tanh{#2}}
+\def\CMathML@sech#1{\mbox{sech}(#1)}
+\newcommand{\Csech}[2][]{\CMathML@sech{#2}}
+\def\CMathML@csch#1{\mbox{csch}(#1)}
+\newcommand{\Ccsch}[2][]{\CMathML@csch{#2}}
+\def\CMathML@coth#1{\mbox{coth}(#1)}
+\newcommand{\Ccoth}[2][]{\CMathML@coth{#2}}
+\def\CMathML@arcsin#1{\arcsin(#1)}
+\newcommand{\Carcsin}[2][]{\CMathML@arcsin{#2}}
+\def\CMathML@arccos#1{\arccos(#1)}
+\newcommand{\Carccos}[2][]{\CMathML@arccos{#2}}
+\def\CMathML@arctan#1{\arctan(#1)}
+\newcommand{\Carctan}[2][]{\CMathML@arctan{#2}}
+\def\CMathML@arccosh#1{\mbox{arccosh}(#1)}
+\newcommand{\Carccosh}[2][]{\CMathML@arccosh{#2}}
+\def\CMathML@arccot#1{\mbox{arccot}(#1)}
+\newcommand{\Carccot}[2][]{\CMathML@arccot{#2}}
+\def\CMathML@arccoth#1{\mbox{arccoth}(#1)}
+\newcommand{\Carccoth}[2][]{\CMathML@arccoth{#2}}
+\def\CMathML@arccsc#1{\mbox{arccsc}(#1)}
+\newcommand{\Carccsc}[2][]{\CMathML@arccsc{#2}}
+\def\CMathML@arcsinh#1{\mbox{arcsinh}(#1)}
+\newcommand{\Carcsinh}[2][]{\CMathML@arcsinh{#2}}
+\def\CMathML@arctanh#1{\mbox{arctanh}(#1)}
+\newcommand{\Carctanh}[2][]{\CMathML@arctanh{#2}}
+
+\def\CMathML@exp#1{\exp(#1)}
+\newcommand{\Cexp}[2][]{\CMathML@exp{#2}}
+\def\CMathML@ln#1{\ln(#1)}
+\newcommand{\Cln}[2][]{\CMathML@ln{#2}}
+\def\CMathML@log#1#2{\log_{#1}(#2)}
+\newcommand{\Clog}[3][]{\CMathML@log{#2}{#3}}
+\def\CMathML@mean#1{\mbox{mean}(#1)}
+\newcommand{\Cmean}[2][]{\CMathML@mean{#2}}
+\def\CMathML@sdev#1{\mbox{std}(#1)}
+\newcommand{\Csdev}[2][]{\CMathML@sdev{#2}}
+\def\CMathML@var#1{\mbox{var}(#1)}
+\newcommand{\Cvar}[2][]{\CMathML@var{#2}}
+\def\CMathML@median#1{\mbox{median}(#1)}
+\newcommand{\Cmedian}[2][]{\CMathML@median{#2}}
+\def\CMathML@mode#1{\mbox{mode}(#1)}
+\newcommand{\Cmode}[2][]{\CMathML@mode{#2}}
+\def\CMathML@moment#1#2{\langle{#2}^{#1}\rangle}% degree, momentabout, scope
+\newcommand{\Cmoment}[3][]{\CMathML@moment{#2}{#3}}
+\def\CMathML@momentA#1#2{\langle{#2}^{#1}\rangle}% degree, momentabout, scope
+\newcommand{\CmomentA}[4][]{\CMathML@momentA{#2}{#3}{#4}}
+\def\CMathML@vector#1{(#1)}
+\newcommand{\Cvector}[2][]{\CMathML@vector{#2}}
+\def\CMathML@matrix#1#2{\left(\begin{array}{#1}#2\end{array}\right)}% row pattern, body
+\newcommand{\Cmatrix}[3][]{\CMathML@matrix{#2}{#3}}
+\def\CMathML@determinant#1{\left|#1\right|}
+\newcommand{\Cdeterminant}[2][]{\CMathML@determinant{#2}}
+\def\CMathML@transpose#1{#1^\top}
+\newcommand{\Ctranspose}[2][]{\CMathML@transpose{#2}}
+\def\CMathML@selector#1#2{#1_{#2}}
+\newcommand{\Cselector}[3][]{\CMathML@selector{#2}{#3}}
+\def\CMathML@vectproductOp{\cdot}
+\newcommand{\CvectproductOp}{\CMathML@vectproductOp}
+\def\CMathML@vectproduct#1#2{#1\CMathML@vectproductOp{#2}}
+\newcommand{\Cvectproduct}[3][]{\CMathML@vectproduct{#2}{#3}}
+\def\CMathML@scalarproduct#1#2{{#1}#2}
+\newcommand{\Cscalarproduct}[3][]{\CMathML@scalarproduct{#2}{#3}}
+\def\CMathML@outerproductOp{\times}
+\newcommand{\CouterproductOp}{\CMathML@outerproductOp}
+\def\CMathML@outerproduct#1#2{#1\CMathML@outerproductOp{#2}}
+\newcommand{\Couterproduct}[3][]{\CMathML@outerproduct{#2}{#3}}
+\def\CMathML@integers{{\mathbb{Z}}}
+\newcommand{\Cintegers}[1][]{\CMathML@integers}
+\def\CMathML@reals{{\mathbb{R}}}
+\newcommand{\Creals}[1][]{\CMathML@reals}
+\def\CMathML@rationals{{\mathbb{Q}}}
+\newcommand{\Crationals}[1][]{\CMathML@rationals}
+\def\CMathML@naturalnumbers{{\mathbb{N}}}
+\newcommand{\Cnaturalnumbers}[1][]{\CMathML@naturalnumbers}
+\def\CMathML@complexes{{\mathbb{C}}}
+\newcommand{\Ccomplexes}[1][]{\CMathML@complexes}
+\def\CMathML@primes{{\mathbb{P}}}
+\newcommand{\Cprimes}[1][]{\CMathML@primes}
+\def\CMathML@exponemtiale{e}
+\newcommand{\Cexponemtiale}[1][]{\CMathML@exponemtiale}
+\def\CMathML@imaginaryi{i}
+\newcommand{\Cimaginaryi}[1][]{\CMathML@imaginaryi}
+\def\CMathML@notanumber{{\mathrm{NaN}}}
+\newcommand{\Cnotanumber}[1][]{\CMathML@notanumber}
+\def\CMathML@true{{\mathrm{true}}}
+\newcommand{\Ctrue}[1][]{\CMathML@true}
+\def\CMathML@false{{\mathrm{false}}}
+\newcommand{\Cfalse}[1][]{\CMathML@false}
+\def\CMathML@emptyset{\emptyset}
+\newcommand{\Cemptyset}[1][]{\CMathML@emptyset}
+\def\CMathML@pi{\pi}
+\newcommand{\Cpi}[1][]{\CMathML@pi}
+\def\CMathML@eulergamma{\gamma}
+\newcommand{\Ceulergamma}[1][]{\CMathML@eulergamma}
+\def\CMathML@infinit{\infty}
+\newcommand{\Cinfinit}[1][]{\CMathML@infinit}
+\endinput
+%%
+%% End of file `cmathml.sty'.
diff --git a/Master/texmf-dist/tex/latex/stex/cmathml.sty.ltxml b/Master/texmf-dist/tex/latex/stex/cmathml.sty.ltxml
new file mode 100644
index 00000000000..a6ce629f220
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/cmathml.sty.ltxml
@@ -0,0 +1,974 @@
+# -*- CPERL -*-
+package LaTeXML::Package::Pool;
+use strict;
+use LaTeXML::Package;
+use LaTeXML::Document;
+RequirePackage('LaTeX');
+sub remove_tokens_from_list {
+ my ($list, $pattern, $math) = @_;
+ if (ref $list) {
+ my @toks = $list->unlist;
+ @toks = grep($_->toString !~ /$pattern/, @toks);
+ ($math ? (LaTeXML::MathList->new(@toks)) : (LaTeXML::List)->new(@toks)); }
+ else { undef; } }
+
+sub remove_math_commas {
+ my ($whatsit, $argno) = @_;
+ my @args = $whatsit ? $whatsit->getArgs() : undef;
+ $argno--;
+ if ($args[$argno]) {
+ $args[$argno] = remove_tokens_from_list($args[$argno], ',', 1);
+ $whatsit->setArgs(@args);
+ }
+ return;
+}
+DefConstructor('\Capply [] {} {}',
+ "<ltx:XMApp ?#1(definitionURL='#1')()>#2 #3</ltx:XMApp>");
+DefConstructor('\Ccn [] {}',"#2");
+DefConstructor('\Cci [] {}',"#2");
+DefConstructor('\Ccsymbol [] {}',
+ "<ltx:XMTok role='CSYMBOL' meaning='#2' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cccinterval [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='CONSTRUCTOR' meaning='ccinterval' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg></ltx:XMApp>");
+DefConstructor('\Ccointerval [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='CONSTRUCTOR' meaning='cointerval' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg></ltx:XMApp>");
+DefConstructor('\Cocinterval [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='CONSTRUCTOR' meaning='ocinterval' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg></ltx:XMApp>");
+DefConstructor('\Coointerval [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='CONSTRUCTOR' meaning='oointerval' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg></ltx:XMApp>");
+DefConstructor('\Cinverse [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='inverse' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Clambda [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BINDER' meaning='lambda' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\ClambdaDA [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BINDER' meaning='lambda' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Crestrict [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='restrict' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CcomposeOp []',
+ "<ltx:XMTok meaning='compose' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Ccompose [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='MULOP' meaning='compose' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\Cident []',
+ "<ltx:XMTok meaning='ident' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cdomain [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='domain' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Ccodomain [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='codomain' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cimage [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='image' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cpiecewise [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='piecewise' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cpiece [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='piece' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cotherwise [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='otherwise' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cquotient [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='quotient' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CfactorialOp []',
+ "<ltx:XMTok meaning='factorial' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cfactorial [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='factorial' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CdivideOp []',
+ "<ltx:XMTok meaning='divide' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cdivide [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='divide' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CmaxOp []',
+ "<ltx:XMTok meaning='max' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cmax [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='max' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CminOp []',
+ "<ltx:XMTok meaning='min' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cmin [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='min' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CminusOp []',
+ "<ltx:XMTok meaning='minus' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cminus [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='ADDOP' meaning='minus' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cuminus [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='uminus' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CplusOp []',
+ "<ltx:XMTok meaning='plus' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cplus [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='ADDOP' meaning='plus' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\Cpower [] {} {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='power' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CremOp []',
+ "<ltx:XMTok meaning='rem' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Crem [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='rem' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CtimesOp []',
+ "<ltx:XMTok meaning='times' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Ctimes [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='MULOP' meaning='times' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CrootOp []',
+ "<ltx:XMTok meaning='root' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Croot [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='root' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cgcd [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='gcd' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CandOp []',
+ "<ltx:XMTok meaning='and' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cand [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='CONNECTIVE' meaning='and' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CorOp []',
+ "<ltx:XMTok meaning='or' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cor [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='CONNECTIVE' meaning='or' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CxorOp []',
+ "<ltx:XMTok meaning='xor' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cxor [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='CONNECTIVE' meaning='xor' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CnotOp []',
+ "<ltx:XMTok meaning='not' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cnot [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='CONNECTIVE' meaning='not' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CimpliesOp []',
+ "<ltx:XMTok meaning='implies' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cimplies [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='CONNECTIVE' meaning='implies' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CAndDa [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='and' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CAndCond [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='and' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\COrDa [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='or' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\COrCond [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='or' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CXorDa [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='xor' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CXorCond [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='xor' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cforall [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BINDER' meaning='forall' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CforallCond [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BINDER' meaning='forall' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cexists [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BINDER' meaning='exists' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CexistsCond [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BINDER' meaning='exists' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cabs [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='abs' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cconjugate [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='conjugate' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carg [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='arg' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Creal [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='real' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cimaginary [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='imaginary' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Clcm [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='lcm' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cfloor [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='floor' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cceiling [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='ceiling' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CeqOp []',
+ "<ltx:XMTok meaning='eq' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Ceq [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='eq' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CneqOp []',
+ "<ltx:XMTok meaning='neq' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cneq [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='neq' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CgtOp []',
+ "<ltx:XMTok meaning='gt' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cgt [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='gt' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CltOp []',
+ "<ltx:XMTok meaning='lt' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Clt [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='lt' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CgeqOp []',
+ "<ltx:XMTok meaning='geq' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cgeq [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='geq' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CleqOp []',
+ "<ltx:XMTok meaning='leq' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cleq [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='leq' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CequivalentOp []',
+ "<ltx:XMTok meaning='equivalent' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cequivalent [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='equivalent' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>");
+DefConstructor('\CapproxOp []',
+ "<ltx:XMTok meaning='approx' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Capprox [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='approx' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CfactorofOp []',
+ "<ltx:XMTok meaning='factorof' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cfactorof [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='factorof' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CintOp []',
+ "<ltx:XMTok meaning='int' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cint [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='int' role='INTOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CintLimits [] {}{}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='int' role='INTOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "<ltx:XMArg>#5</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CintDA [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='int' role='INTOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CintCond [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='int' role='INTOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cdiff [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='diff' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cddiff [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='diff' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cpartialdiff [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='diff' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "?#2(<ltx:XMArg>#2</ltx:XMArg>)()"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cdegree {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='degree'/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#1</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Climit [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='limit' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\ClimitCond [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='limit' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CtendstoOp []',
+ "<ltx:XMTok meaning='tendsto' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Ctendsto [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='RELOP' meaning='tendsto' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CtendstoAboveOp []',
+ "<ltx:XMTok meaning='tendsto' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\CtendstoAbove [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='RELOP'meaning='tendsto' type='above' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CtendstoBelowOp []',
+ "<ltx:XMTok meaning='tendsto' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\CtendstoBelow [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='RELOP' meaning='tendsto' type='below' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cdivergence [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='divergence' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cgrad [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='grad' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Curl [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='url' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Claplacian [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='OPFUNCTION' meaning='laplacian' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cset [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='set' role='CONSTRUCTOR' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CsetRes [] {}{}',
+ "<ltx:XMApp role='BIGOP'>"
+ . "<ltx:XMTok role='BIGOP' meaning='set' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg role='BVAR'>#2</ltx:XMArg>"
+ . "<ltx:XMArg role='CONDITION'>#3</ltx:XMArg>"
+ . "<ltx:XMArg role='SCOPE'>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CsetCond [] {}{}{}',
+ "<ltx:XMApp role='BIGOP'>"
+ . "<ltx:XMTok role='BIGOP' meaning='set' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg role='BVAR'>#2</ltx:XMArg>"
+ . "<ltx:XMArg role='CONDITION'>#3</ltx:XMArg>"
+ . "<ltx:XMArg role='SCOPE'>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CsetDA [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='set' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg role='BVAR'>#2</ltx:XMArg>"
+ . "<ltx:XMArg role='DOMAINOFAPPLICATION'>#3</ltx:XMArg>"
+ . "<ltx:XMArg role='SCOPE'>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\ClistOp []',
+ "<ltx:XMTok meaning='list' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Clist [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='list' role='CONSTRUCTOR' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CunionOp []',
+ "<ltx:XMTok meaning='union' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cunion [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='union' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CintersectOp []',
+ "<ltx:XMTok meaning='intersect' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cintersect [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='intersect' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CinOp []',
+ "<ltx:XMTok meaning='in' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cin [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='in' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CnotinOp []',
+ "<ltx:XMTok meaning='notin' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cnotin [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='notin' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CsubsetOp []',
+ "<ltx:XMTok meaning='subset' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Csubset [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='subset' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CprsubsetOp []',
+ "<ltx:XMTok meaning='prsubset' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cprsubset [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='prsubset' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CnotsubsetOp []',
+ "<ltx:XMTok meaning='notsubset' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cnotsubset [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='notsubset' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CnotprsubsetOp []',
+ "<ltx:XMTok meaning='notprsubset' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cnotprsubset [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='notprsubset' role='RELOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CsetdiffOp []',
+ "<ltx:XMTok meaning='setdiff' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Csetdiff [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='setdiff' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CcardOp []',
+ "<ltx:XMTok meaning='card' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Ccard [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='card' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CcartesianproductOp []',
+ "<ltx:XMTok meaning='cartesianproduct' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Ccartesianproduct [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='cartesianproduct' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\CsupsetOp []',
+ "<ltx:XMTok meaning='supset' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\CprsupsetOp []',
+ "<ltx:XMTok meaning='prsupset' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\CnotsupsetOp []',
+ "<ltx:XMTok meaning='notsupset' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\CnotprsupsetOp []',
+ "<ltx:XMTok meaning='notprsupset' role='ID' ?#1(definitionURL='#1')()/>");
+DefMacro('\Csupset[]{}','\Csubset[#1]{#2}');
+DefMacro('\Cprsupset[]{}','\Cprsubset[#1]{#2}');
+DefMacro('\Cnotsupset[]{}{}','\Cnotsubset[#1]{#3}{#2}');
+DefMacro('\Cnotprsupset[]{}{}','\Cnotprsubset[#1]{#3}{#2}');
+DefConstructor('\CUnionDAOp []',
+ "<ltx:XMTok meaning='union' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\CUnionDA [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='union' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CUnionCond [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='union' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CIntersectDaOp []',
+ "<ltx:XMTok meaning='intersect' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\CIntersectDa [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='intersect' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CIntersectCond [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='intersect' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CCartesianproductDaOp []',
+ "<ltx:XMTok meaning='cartesianproduct' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\CCartesianproductDa [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='cartesianproduct' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CCartesianproductCond [] {}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='BIGOP' meaning='cartesianproduct' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CsumOp []',
+ "<ltx:XMTok meaning='sum' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\CsumLimits [] {}{}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='sum' role='SUMOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "#5</ltx:XMApp>");
+DefConstructor('\CprodOp []',
+ "<ltx:XMTok meaning='prod' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\CprodLimits [] {}{}{}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='prod' role='SUMOP' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg><ci>#2</ci></ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "<ltx:XMArg>#4</ltx:XMArg>"
+ . "#5</ltx:XMApp>");
+DefConstructor('\Csin [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='sin' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Ccos [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='cos' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Ctan [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='tan' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Csec [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='sec' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Ccsc [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='csc' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Ccot [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='cot' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Csinh [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='sinh' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Ccosh [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='cosh' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Ctanh [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='tanh' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Csech [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='sech' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Ccsch [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='csch' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Ccoth [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='coth' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carcsin [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arcsin' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carccos [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arccos' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carctan [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arctan' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carcsec [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arcsec' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carccsc [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arccsc' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carccot [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arccot' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carcsinh [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arcsinh' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carccosh [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arccosh' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carctanh [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arctanh' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carcsech [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arcsech' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carccsch [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arccsch' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Carccoth [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='arccoth' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cexp [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='exp' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cln [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='ln' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Clog [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='log' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cmean [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='mean' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Csdev [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='sdev' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cvar [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='var' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cmedian [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='median' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cmode [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='mode' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cmoment [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='moment' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cvector [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='CONSTRUCTOR' meaning='vector' ?#1(definitionURL='#1')()/>"
+ . "#2"
+ . "</ltx:XMApp>",
+ afterDigest=>sub { remove_math_commas($_[1], 2); });
+DefConstructor('\Cmatrix [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok role='CONSTRUCTOR' meaning='matrix' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cdeterminant [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='determinant' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Ctranspose [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='transpose' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cselector [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='selector' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CvectorproductOp []',
+ "<ltx:XMTok meaning='vectorproduct' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cvectorproduct [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='vectorproduct' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cscalarproduct [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='scalarproduct' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\CouterproductOp []',
+ "<ltx:XMTok meaning='outerproduct' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Couterproduct [] {}{}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='outerproduct' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "<ltx:XMArg>#3</ltx:XMArg>"
+ . "</ltx:XMApp>");
+DefConstructor('\Cintegers []',
+ "<ltx:XMTok meaning='integers' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Creals []',
+ "<ltx:XMTok meaning='reals' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Crationals []',
+ "<ltx:XMTok meaning='rationals' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cnaturalnumbers []',
+ "<ltx:XMTok meaning='naturalnumbers' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Ccomplexes []',
+ "<ltx:XMTok meaning='complexes' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cprimes []',
+ "<ltx:XMTok meaning='primes' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cexponentiale []',
+ "<ltx:XMTok meaning='exponentiale' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cimaginaryi []',
+ "<ltx:XMTok meaning='imaginaryi' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cnotanumber []',
+ "<ltx:XMTok meaning='notanumber' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Ctrue []',
+ "<ltx:XMTok meaning='true' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cfalse []',
+ "<ltx:XMTok meaning='false' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cemptyset []',
+ "<ltx:XMTok meaning='emptyset' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cpi []',
+ "<ltx:XMTok meaning='pi' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Ceulergamma []',
+ "<ltx:XMTok meaning='eulergamma' role='ID' ?#1(definitionURL='#1')()/>");
+DefConstructor('\Cinfinit []',
+ "<ltx:XMTok meaning='infinit' role='ID' ?#1(definitionURL='#1')()/>");
+1;
diff --git a/Master/texmf-dist/tex/latex/stex/cmathmlx.sty b/Master/texmf-dist/tex/latex/stex/cmathmlx.sty
new file mode 100644
index 00000000000..dd9f04945f4
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/cmathmlx.sty
@@ -0,0 +1,14 @@
+%%
+%% This is file `cmathmlx.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% cmathml.dtx (with options: `styx')
+%%
+\RequirePackage{presentation}
+\def\CMathML@complement#1{#1^c}
+\newcommand{\Ccomplement}[2][]{\CMathML@complement{#2}}
+\endinput
+%%
+%% End of file `cmathmlx.sty'.
diff --git a/Master/texmf-dist/tex/latex/stex/cmathmlx.sty.ltxml b/Master/texmf-dist/tex/latex/stex/cmathmlx.sty.ltxml
new file mode 100644
index 00000000000..93025278369
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/cmathmlx.sty.ltxml
@@ -0,0 +1,22 @@
+%%
+%% This is file `cmathmlx.sty.ltxml',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% cmathml.dtx (with options: `ltxmlx')
+%%
+# -*- CPERL -*-
+package LaTeXML::Package::Pool;
+use strict;
+use LaTeXML::Package;
+use LaTeXML::Document;
+RequirePackage('LaTeX');
+DefConstructor('\Ccomplement [] {}',
+ "<ltx:XMApp>"
+ . "<ltx:XMTok meaning='complement' role='CSYMBOL'/>"
+ . "<ltx:XMArg>#2</ltx:XMArg>"
+ . "</ltx:XMApp>");
+\endinput
+%%
+%% End of file `cmathmlx.sty.ltxml'.
diff --git a/Master/texmf-dist/tex/latex/stex/cnx.cls b/Master/texmf-dist/tex/latex/stex/cnx.cls
new file mode 100644
index 00000000000..ca898bce841
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/cnx.cls
@@ -0,0 +1,141 @@
+%%
+%% This is file `cnx.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% cnx.dtx (with options: `cls')
+%%
+\RequirePackage{keyval}
+\RequirePackage{graphicx}
+\DeclareOption{letterpaper}
+ {\setlength\paperheight {11in}%
+ \setlength\paperwidth {8.5in}}
+\DeclareOption{a4paper}
+ {\setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}}
+\ExecuteOptions{letterpaper}
+\ProcessOptions
+\input{size10.clo}
+\pagenumbering{roman}
+\define@key{cnxmodule}{name}{\def\cnx@title{#1}}
+\define@key{cnxmodule}{id}{}
+\newenvironment{cnxmodule}[1][]{\setkeys{cnxmodule}{#1}}{}
+\newenvironment{ccontent}{}{}
+\newcounter{section}
+\define@key{sectioning}{id}{}
+\newenvironment{csection}[2][]%
+{\stepcounter{section}\strut\\[1.5ex]\noindent%
+{\Large\bfseries\arabic{section}.~{#2}}\\[1.5ex]
+\setkeys{sectioning}{#1}}
+{}
+\newcounter{subsection}[section]
+\newenvironment{csubsection}[2][]
+{\refstepcounter{subsection}\strut\\[1ex]\noindent%
+{\large\bfseries{\arabic{section}.\arabic{subsection}.~#2\\[1ex]}}%
+\setkeys{sectioning}{#1}}%
+{}
+\newcounter{subsubsection}[subsection]
+\newenvironment{csubsubsection}[2][]
+{\refstepcounter{subsubsection}\strut\\[.5ex]\noindent
+{\bfseries\arabic{section}.\arabic{subsection}.\arabic{subsubsecction}~#2\\[.5ex]}%
+\setkeys{sectioning}{#1}}{}
+\define@key{para}{id}{}
+\newenvironment{cpara}[1][]{\setkeys{para}{#1}}{\par}
+\define@key{note}{id}{}
+\define@key{note}{type}{\def\note@type{#1}}
+\newenvironment{cnote}[1][]%
+{\setkeys{note}{#1}\par\noindent\strut\hfill\begin{minipage}{10cm}{\bfseries\note@type}:~}%
+{\end{minipage}\hfill\strut\par}
+\define@key{equation}{id}{}
+\newenvironment{cequation}[1][]%
+{\setkeys{equation}{#1}\begin{displaymath}}
+{\end{displaymath}}
+\define@key{cquote}{id}{}
+\define@key{cquote}{type}{}
+\define@key{cquote}{src}{}
+\newenvironment{cquote}[1][]{%
+\setkeys{cquote}{#1}\begin{center}\begin{minipage}{.8\textwidth}}{\end{minipage}\end{center}}
+\newcommand{\litem}[2][]{\item[#1]\label{#2}}
+\define@key{example}{id}{}
+\define@key{example}{name}{\def\example@name{#1}}
+\newenvironment{cexample}[1][]{\setkeys{example}{#1}
+{\@ifundefined{example@name}{}{\noindent\bfseries{\example@name}}}}
+{}
+\newcounter{cexercise}
+\define@key{cexercise}{id}{}
+\define@key{cexercise}{name}{\def\cexercise@name{#1}}
+\newenvironment{cexercise}[1][]{\setkeys{cexercise}{#1}
+{\@ifundefined{cexercise@name}{}{\stepcounter{cexercise}\noindent\bfseries{\cexercise@name~\arabic{cexercise}}}}}
+{}
+\define@key{cproblem}{id}{}
+\newenvironment{cproblem}[1][]{\setkeys{cproblem}{#1}}{}{}
+\define@key{csolution}{id}{}
+\newenvironment{csolution}[1][]{\setkeys{csolution}{#1}}{\par\noindent\bfseries{Solution}}{}
+\define@key{rule}{id}{}
+\define@key{rule}{name}{\def\rule@name{#1}}
+\define@key{rule}{type}{\def\rule@type{#1}}
+\newenvironment{crule}[1][]{\setkeys{rule}{#1}%
+{\noindent\bfseries{\rule@type:}\@ifundefined{rule@name}{}{~(\rule@name)}}}%
+{}
+\define@key{statement}{id}{}
+\newenvironment{statement}[1][]{\setkeys{statement}{#1}}{}
+\define@key{proof}{id}{}
+\newenvironment{proof}[1][]{\setkeys{proof}{#1}}{}
+\define@key{definition}{term}{}
+\define@key{definition}{id}{}
+\define@key{definition}{seealso}{}
+\newenvironment{definition}[1][]{\setkeys{definition}{#1}{\noindent\bfseries{Definition:}}}{}
+\define@key{meaning}{id}{}
+\newenvironment{cmeaning}[1][]{\setkeys{meaning}{#1}}{}
+\define@key{cnxn}{document}{\def\cnxn@doc{#1}}
+\define@key{cnxn}{target}{\def\cnxn@target{#1}}
+\define@key{cnxn}{strength}{}
+\newcommand{\cnxn}[2][]% keys, link text
+{\setkeys{cnxn}{#1}{\underline{#2}}\footnote{{\ttfamily\@ifundefined{cnxn@doc}{\cnxn@doc}{}\#\cnxn@target}}}
+\newcommand\@makefntext[1]{\parindent 1em\noindent\hb@xt@1.8em{\hss\@makefnmark}#1}
+\define@key{link}{src}{}
+\newcommand{\link}[2][]{\setkeys{link}{#1}\underline{#2}}
+\define@key{cfigure}{id}{\def\cf@id{#1}}
+\define@key{cfigure}{type}{}
+\define@key{cfigure}{caption}{\def\cf@caption{#1}}
+\newcounter{figure}
+\newcommand{\cfigure}[3][]{% cnx_keys, graphicx_keys, path
+\begin{center}%
+\includegraphics[#2]{#3}%
+\setkeys{cfigure}{#1}%
+\@ifundefined{cfigure@caption}{}{{\par\noindent Figure\refstepcounter{figure}} {\arabic{figure}}: \cf@caption%
+\protected@edef\@currentlabel{\arabic{figure}}%
+\@ifundefined{cf@id}{}{\label{\cf@id}}}%
+\end{center}}
+\define@key{ccite}{src}{}
+\newcommand{\ccite}[2][]{\setkeys{ccite}{#1}\emph{#2}}
+\newcommand{\term}[1]{{\bfseries\underline{#1}}}
+\define@key{metadata}{version}{}
+\define@key{metadata}{created}{}
+\define@key{metadata}{revised}{}
+\newsavebox{\metadatabox}
+\newenvironment{metadata}[1][]%
+{\noindent\hfill\begin{lrbox}{\metadatabox}
+\begin{minipage}{.8\textwidth}%
+{\Large\bfseries CNX Module: \cnx@title\hfill\strut}\\[2ex]}%
+{\end{minipage}\end{lrbox}\fbox{\usebox\metadatabox}\hfill}
+\newenvironment{authorlist}{{\bfseries{Authors}:~}}{\\[1ex]}
+\newenvironment{maintainerlist}{{\bfseries{Maintainers}:~}}{\\[1ex]}
+\define@key{auth}{id}{}
+\define@key{auth}{honorific}{\def\auth@honorific{#1}}
+\define@key{auth}{firstname}{\def\auth@first{#1}}
+\define@key{auth}{other}{\def\auth@other{#1}}
+\define@key{auth}{surname}{\def\auth@sur{#1}}
+\define@key{auth}{lineage}{\def\auth@line{#1}}
+\define@key{auth}{email}{}
+\newcommand{\cnxauthor}[1][]{\setkeys{auth}{#1}\auth@first~\auth@sur,}
+\newcommand{\maintainer}[1][]{\setkeys{auth}{#1}\auth@first~\auth@sur,}
+\newenvironment{keywordlist}{\bfseries{Keywords}:~}{\\[1ex]}
+\newcommand{\keyword}[1]{#1,}
+\newenvironment{cnxabstract}%
+{\par\noindent\strut\hfill\begin{minipage}{10cm}{\bfseries{Abstract}:~}}%
+{\end{minipage}\hfill}
+\endinput
+%%
+%% End of file `cnx.cls'.
diff --git a/Master/texmf-dist/tex/latex/stex/cnx.cls.ltxml b/Master/texmf-dist/tex/latex/stex/cnx.cls.ltxml
new file mode 100644
index 00000000000..d29f6776607
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/cnx.cls.ltxml
@@ -0,0 +1,281 @@
+# -*- CPERL -*-
+package LaTeXML::Package::Pool;
+use strict;
+use LaTeXML::Package;
+RequirePackage('keyval');
+RegisterNamespace('cnx'=>"http://cnx.rice.edu/cnxml");
+RegisterNamespace('md'=>"http://cnx.rice.edu/mdml/0.4");
+RegisterNamespace('bib'=>"http://bibtexml.sf.net/");
+RegisterNamespace('m'=>"http://www.w3.org/1998/Math/MathML");
+DocType("cnx:document",
+"-//CNX//DTD CNXML 0.5 plus LaTeXML//EN",
+"../dtd/cnxml+ltxml.dtd",
+'#default'=>"http://cnx.rice.edu/cnxml",
+ 'md'=>"http://cnx.rice.edu/mdml/0.4",
+ 'bib'=>"http://bibtexml.sf.net/",
+ 'm'=>"http://www.w3.org/1998/Math/MathML",
+ 'ltx'=>"http://dlmf.nist.gov/LaTeXML");
+NewCounter('@itemizei', 'document', idprefix=>'I');
+NewCounter('@itemizeii', '@itemizei', idprefix=>'I');
+NewCounter('@itemizeiii', '@itemizeii', idprefix=>'I');
+NewCounter('@itemizeiv', '@itemizeiii',idprefix=>'I');
+NewCounter('@itemizev', '@itemizeiv', idprefix=>'I');
+NewCounter('@itemizevi', '@itemizev', idprefix=>'I');
+
+NewCounter('enumi', '@itemizei', idprefix=>'i');
+NewCounter('enumii', '@itemizeii', idprefix=>'i');
+NewCounter('enumiii','@itemizeiii', idprefix=>'i');
+NewCounter('enumiv', '@itemizeiv', idprefix=>'i');
+# A couple of more levels, since we use these for ID's!
+NewCounter('enumv', '@itemizev', idprefix=>'i');
+NewCounter('enumvi', '@itemizevi', idprefix=>'i');
+
+DefMacro('\theenumi', '\arabic{enumi}');
+DefMacro('\theenumii', '\alph{enumii}');
+DefMacro('\theenumiii', '\roman{enumiii}');
+DefMacro('\theenumiv', '\Alph{enumiv}');
+
+NewCounter('equation', 'document', idprefix=>'E');
+DefMacro('\theequation', '\arabic{equation}');
+DefMacro('\textwidth','16cm');
+Let('\thedocument@ID','\@empty');
+DefKeyVal('cnxmodule','name','Semiverbatim');
+DefKeyVal('cnxmodule','id','Semiverbatim');
+
+DefEnvironment('{document}','<cnx:document>#body</cnx:document>',
+ beforeDigest=> sub { AssignValue(inPreamble=>0); },
+ afterDigest=> sub { $_[0]->getGullet->flush; return; });
+DefEnvironment('{cnxmodule} OptionalKeyVals:cnxmodule',
+ "<cnx:name>&KeyVal('#1','name')</cnx:name>\n#body\n",
+ afterDigestBegin => sub {
+ AssignValue('cnxmodule_id',
+ KeyVal($_[1]->getArg(1), 'id')->toString,
+ 'global');
+ });
+Tag('cnx:document', afterClose => sub {
+ $_[1]->setAttribute('id', LookupValue('cnxmodule_id'));
+ });
+DefEnvironment('{ccontent}',"<cnx:content>#body</cnx:content>");
+DefKeyVal('sectioning','id','Semiverbatim');
+DefEnvironment('{csection}OptionalKeyVals:sectioning{}',
+ "<cnx:section %&KeyVals(#1)>\n"
+ . "?#2(<cnx:name>#2</cnx:name>\n)()"
+ . "#body\n</cnx:section>\n");
+DefEnvironment('{csubsection}OptionalKeyVals:sectioning{}',
+ "<cnx:section %&KeyVals(#1)>\n"
+ . "?#2(<cnx:name>#2</cnx:name>\n)()"
+ . "#body\n</cnx:section>\n");
+DefEnvironment('{csubsubsection}OptionalKeyVals:sectioning{}',
+ "<cnx:section %&KeyVals(#1)>\n"
+ . "?#2(<cnx:name>#2</cnx:name>\n)()"
+ . "#body\n</cnx:section>\n");
+DefKeyVal('para','id','Semiverbatim');
+DefEnvironment('{cpara} OptionalKeyVals:para','<cnx:para %&KeyVals(#1)>#body</cnx:para>');
+sub number_para {
+ my($document,$node,$whatsit)=@_;
+ # Get prefix from first parent with an id.
+ my(@parents)=$document->findnodes('ancestor::*[@id]',$node); # find 1st id'd parent.
+ my $prefix= (@parents ? $parents[$#parents]->getAttribute('id')."." : '');
+ # Get the previous number within parent; Worried about intervening elements around para's, but...
+ my(@siblings)=$document->findnodes("preceding-sibling::cnx:para",$node);
+ my $n=1;
+ $n = $1+1 if(@siblings && $siblings[$#siblings]->getAttribute('id')=~/(\d+)$/);
+ $node->setAttribute(id=>$prefix."p$n"); }
+Tag('cnx:para',afterOpen=>\&number_para);
+DefConstructor('\par',sub { $_[0]->maybeCloseElement('cnx:para'); },alias=>"\\par\n");
+Tag('cnx:para', autoClose=>1, autoOpen=>1);
+DefKeyVal('note','id','Semiverbatim');
+DefKeyVal('note','type','Semiverbatim');
+DefEnvironment('{cnote}OptionalKeyVals:note','<cnx:note %&KeyVals(#1)>#body</cnx:note>');
+DefKeyVal('equation','id','Semiverbatim');
+DefEnvironment('{cequation} OptionalKeyVals:equation',
+ "<cnx:equation %&KeyVals(#1)>"
+ . "<ltx:Math mode='display'>"
+ . "<ltx:XMath>#body</ltx:XMath>"
+ . "</ltx:Math></cnx:equation>",
+ mode=>'display_math');
+DefKeyVal('cquote','id','Semiverbatim');
+DefKeyVal('cquote','type','Semiverbatim');
+DefKeyVal('cquote','src','Semiverbatim');
+DefEnvironment('{cquote} OptionalKeyVals:cquote',
+ "<cnx:quote %&KeyVals(#1)>#body</cnx:quote>");
+DefConstructor('\footnote[]{}',"<cnx:note type='foot'>#2</cnx:note>");
+DefConstructor('\emph{}',"<cnx:emphasis>#1</cnx:emphasis>");
+DefConstructor('\[',
+ "<cnx:equation id='#id'>"
+ . "<ltx:Math mode='display'>"
+ . "<ltx:XMath>"
+ . "#body"
+ . "</ltx:XMath>"
+ . "</ltx:Math>"
+ ."</cnx:equation>",
+ beforeDigest=> sub{ $_[0]->beginMode('display_math'); },
+ captureBody=>1,
+ properties=> sub { RefStepID('equation') });
+DefConstructor('\]' ,"",beforeDigest=> sub{ $_[0]->endMode('display_math'); });
+DefConstructor('\[',
+ "<cnx:equation id='#id'>"
+ . "<ltx:Math mode='display'>"
+ . "<ltx:XMath>"
+ . "#body"
+ . "</ltx:XMath>"
+ . "</ltx:Math>"
+ ."</cnx:equation>",
+ beforeDigest=> sub{ $_[0]->beginMode('display_math'); },
+ captureBody=>1,
+ properties=> sub { RefStepID('equation') });
+DefConstructor('\]' ,"",beforeDigest=> sub{ $_[0]->endMode('display_math'); });
+
+DefMacro('\eqnarray', '\@@eqnarray\@start@alignment');
+DefMacro('\endeqnarray', '\@finish@alignment\end@eqnarray');
+DefMacro('\csname eqnarray*\endcsname', '\@@eqnarray*\@start@alignment');
+DefMacro('\csname endeqnarray*\endcsname', '\@finish@alignment\end@eqnarray');
+DefConstructor('\@@eqnarray OptionalMatch:* AlignmentBody:\end@eqnarray',
+ sub {
+ my($document,$star,$body,%props)=@_;
+ $document->openElement('cnx:equation',refnum=>$props{refnum},id=>$props{id});
+ $document->openElement('ltx:Math',mode=>'display');
+ $document->openElement('ltx:XMath');
+ constructAlignment($document,$body,attributes=>{name=>'eqnarray'});
+ $document->closeElement('ltx:XMath');
+ $document->closeElement('ltx:Math');
+ $document->closeElement('cnx:equation'); },
+ mode=>'display_math',
+ beforeDigest=>sub { alignmentBindings('rcl'); },
+ properties=> sub { ($_[1] ? RefStepID('equation') : RefStepCounter('equation')); },
+ afterDigest=>sub {
+ $_[1]->setProperty(body=>$_[1]->getArg(2));}, # So we get TeX
+ reversion=>'\begin{eqnarray#1}#2\end{eqnarray#1}');
+Tag('cnx:item', autoClose=>1);
+DefConstructor('\item[]',"<cnx:item>?#1(<cnx:name>#1</cnx:name>)");
+DefConstructor('\litem[]{}',"<cnx:item id='#2'>?#1(<cnx:name>#1</cnx:name>)");
+DefConstructor('\itemize@item[]',
+ "<cnx:item id='#id'>?#1(<cnx:name>#1</cnx:name>)",
+ properties=>sub{ RefStepItemCounter(); });
+DefConstructor('\enumerate@item[]',
+ "<cnx:item id='#id'>?#1(<cnx:name>#1</cnx:name>)",
+ properties=>sub{ RefStepItemCounter(); });
+DefConstructor('\description@item[]',
+ "<cnx::item id='#id'>?#1(<cnx:name>#1</cnx:name>)",
+ properties=>sub{ RefStepItemCounter(); });
+AssignValue(itemlevel=>0);
+DefEnvironment('{itemize}',
+ "<cnx:list id='#id' type='itemize'>#body</cnx:list>",
+ properties=>sub { beginItemize('itemize'); });
+DefEnvironment('{enumerate}',
+ "<cnx:list type='enumerate' id='#id'>#body</cnx:list>",
+ properties=>sub { beginItemize('enumerate'); });
+DefEnvironment('{description}',
+ "<cnx:list type='description' id='#id'>#body</cnx:list>",
+ properties=>sub { beginItemize('description'); });
+DefEnvironment('{center}','#body');
+DefEnvironment('{minipage}{}','#body');
+DefEnvironment('{small}','#body');
+DefEnvironment('{footnotesize}','#body');
+DefEnvironment('{tiny}','#body');
+DefEnvironment('{scriptsize}','#body');
+DefConstructor('\ref Semiverbatim', "<cnx:cnxn target='#1'>&LookupValue('LABEL@#1')</cnx:cnxn>");
+DefKeyVal('example','id','Semiverbatim');
+DefEnvironment('{cexample}OptionalKeyVals:example',
+ "<cnx:example %&KeyVals(#1)>#body</cnx:example>");
+DefKeyVal('cexercise','id','Semiverbatim');
+DefKeyVal('cexercise','name','Semiverbatim');
+DefEnvironment('{cexercise}OptionalKeyVals:exercise',
+ "<cnx:exercise ?&KeyVal(#1,'id')(id='&KeyVal(#1,'id')')()>"
+ . "#body"
+ . "</cnx:exercise>");
+DefKeyVal('cproblem','id','Semiverbatim');
+DefKeyVal('cproblem','name','Semiverbatim');
+DefEnvironment('{cproblem}OptionalKeyVals:cproblem',
+ "<cnx:problem ?&KeyVal(#1,'id')(id='&KeyVal(#1,'id')')()>"
+ . "?&KeyVal(#1,'name')(<cnx:name>&KeyVal(#1,'name')</cnx:name>\n)()"
+ . "#body"
+ . "</cnx:problem>");
+DefKeyVal('csolution','id','Semiverbatim');
+DefKeyVal('csolution','name','Semiverbatim');
+DefEnvironment('{csolution}OptionalKeyVals:cproblem',
+ "<cnx:solution ?&KeyVal(#1,'id')(id='&KeyVal(#1,'id')')()>"
+ . "?&KeyVal(#1,'name')(<cnx:name>&KeyVal(#1,'name')</cnx:name>\n)()"
+ . "#body"
+ . "</cnx:solution>");
+DefKeyVal('rule','id','Semiverbatim');
+DefKeyVal('rule','name','Semiverbatim');
+DefKeyVal('rule','type','Semiverbatim');
+DefEnvironment('{crule}OptionalKeyVals:rule',
+ "<cnx:rule ?&KeyVal(#1,'id')(id='&KeyVal(#1,'id')')() type='&KeyVal(#1,'type')'>\n"
+ . "?&KeyVal(#1,'name')(<cnx:name>&KeyVal(#1,'name')</cnx:name>\n)()"
+ . "\n#body\n"
+ . "</cnx:rule>\n");
+DefKeyVal('statement','id','Semiverbatim');
+DefEnvironment('{statement}OptionalKeyVals:statement','<cnx:statement %&KeyVals(#1)>#body</cnx:statement>');
+DefKeyVal('proof','id','Semiverbatim');
+DefEnvironment('{proof}OptionalKeyVals:proof','<cnx:proof %&KeyVals(#1)>#body</cnx:proof>');
+DefKeyVal('definition','id','Semiverbatim');
+DefKeyVal('definition','term','Semiverbatim');
+DefKeyVal('definition','seealso','Semiverbatim');
+DefEnvironment('{definition}OptionalKeyVals:definition',
+ "<cnx:definition ?&KeyVal(#1,'id')(id='&KeyVal(#1,'id')')()>\n"
+ . "?&KeyVal(#1,'term')(<cnx:term>&KeyVal(#1,'term')</cnx:term>\n)()"
+ . "\n#body\n"
+ . "?&KeyVal(#1,'seealso')(<cnx:seealso><cnx:term>&KeyVal(#1,'term')</cnx:term></cnx:seealso>\n)()"
+ . "</cnx:definition>\n");
+DefKeyVal('meaning','id','Semiverbatim');
+DefEnvironment('{cmeaning}OptionalKeyVals:meaning','<cnx:meaning %&KeyVals(#1)>#body</cnx:meaning>');
+DefKeyVal('cnxn','document','Semiverbatim');
+DefKeyVal('cnxn','target','Semiverbatim');
+DefKeyVal('cnxn','strength','Semiverbatim');
+DefConstructor('\cnxn OptionalKeyVals:cnxn {}','<cnx:cnxn %&KeyVals(#1)>#1</cnx:cnxn>');
+DefKeyVal('link','src','Semiverbatim');
+DefConstructor('\link OptionalKeyVals:link {}','<cnx:link %&KeyVals(#1)>#2</cnx:link>');
+DefKeyVal('cfigure','id','Semiverbatim');
+DefKeyVal('cfigure','name','Semiverbatim');
+DefKeyVal('cfigure','type','Semiverbatim');
+DefKeyVal('cfigure','caption','Semiverbatim');
+DefConstructor('\cfigure OptionalKeyVals:cfigure Semiverbatim Semiverbatim',
+ "<cnx:figure ?&KeyVal(#1,'id')(id='&KeyVal(#1,'id')')()>"
+ . "?&KeyVal(#1,'name')(<cnx:name>&KeyVal(#1,'name')</cnx:name>\n)()"
+ . "<cnx:media type='&KeyVal(#1,'type')' src='#3'/>"
+ . "?&KeyVal(#1,'caption')(<cnx:caption>&KeyVal(#1,'caption')</cnx:caption>\n)()"
+ . "</cnx:figure>");
+DefKeyVal('ccite','src','Semiverbatim');
+DefConstructor('\ccite OptionalKeyVals:ccite {}','<cnx:cite %&KeyVals(#1)>#2</cnx:cite>');
+DefConstructor('\term[]{}',"<cnx:term>#2</cnx:term>");
+DefKeyVal('metadata','version','Semiverbatim');
+DefKeyVal('metadata','created','Semiverbatim');
+DefKeyVal('metadata','revised','Semiverbatim');
+DefEnvironment('{metadata}OptionalKeyVals:metadata',
+ "<cnx:metadata>\n"
+ . "<md:version>&KeyVal('#1','version')</md:version>\n"
+ . "<md:created>&KeyVal('#1','created')</md:created>\n"
+ . "<md:revised>&KeyVal('#1','revised')</md:revised>\n"
+ . "#body\n"
+ . "</cnx:metadata>");
+DefEnvironment('{authorlist}',"<md:authorlist>#body</md:authorlist>");
+DefEnvironment('{maintainerlist}',"<md:maintainerlist>#body</md:maintainerlist>");
+DefKeyVal('auth','id','Semiverbatim');
+DefKeyVal('auth','firstname','Semiverbatim');
+DefKeyVal('auth','surname','Semiverbatim');
+DefKeyVal('auth','email','Semiverbatim');
+DefConstructor('\cnxauthor OptionalKeyVals:auth',
+ "<md:author id='&KeyVal('#1','id')'>\n"
+ . "?&KeyVal(#1,'honorific')(<md:honorific>&KeyVal('#1','honorific')</md:honorific>\n)()"
+ . "?&KeyVal(#1,'firstname')(<md:firstname>&KeyVal('#1','firstname')</md:firstname>\n)()"
+ . "?&KeyVal(#1,'other')(<md:other>&KeyVal('#1','other')</md:other>\n)()"
+ . "?&KeyVal(#1,'surname')(<md:surname>&KeyVal('#1','surname')</md:surname>\n)()"
+ . "?&KeyVal(#1,'lineage')(<md:lineage>&KeyVal('#1','lineage')</md:lineage>\n)()"
+ . "?&KeyVal(#1,'email')(<md:email>&KeyVal('#1','email')</md:email>\n)()"
+ . "</md:author>\n");
+DefConstructor('\maintainer OptionalKeyVals:auth',
+ "<md:maintainer id='&KeyVal('#1','id')'>\n"
+ . "?&KeyVal(#1,'honorific')(<md:honorific>&KeyVal('#1','honorific')</md:honorific>\n)()"
+ . "?&KeyVal(#1,'firstname')(<md:firstname>&KeyVal('#1','firstname')</md:firstname>\n)()"
+ . "?&KeyVal(#1,'other')(<md:other>&KeyVal('#1','other')</md:other>\n)()"
+ . "?&KeyVal(#1,'surname')(<md:surname>&KeyVal('#1','surname')</md:surname>\n)()"
+ . "?&KeyVal(#1,'lineage')(<md:lineage>&KeyVal('#1','lineage')</md:lineage>\n)()"
+ . "?&KeyVal(#1,'email')(<md:email>&KeyVal('#1','email')</md:email>\n)()"
+ . "</md:maintainer>\n");
+DefEnvironment('{keywordlist}',"<md:keywordlist>\n#body\n</md:keywordlist>");
+DefConstructor('\keyword {}',"<md:keyword>#1</md:keyword>");
+DefEnvironment('{cnxabstract} OptionalKeyVals:cnxabstract',
+ "<md:abstract>\n#body\n</md:abstract>\n");
+1;
diff --git a/Master/texmf-dist/tex/latex/stex/modules.sty b/Master/texmf-dist/tex/latex/stex/modules.sty
new file mode 100644
index 00000000000..49ce55bc45c
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/modules.sty
@@ -0,0 +1,145 @@
+%%
+%% This is file `modules.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% modules.dtx (with options: `package')
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{modules}[2006/01/13 v0.9a Semantic Markup]
+
+\newif\ifmod@env\mod@envfalse
+\newif\ifmod@id\mod@idfalse
+\newif\ifmod@display\mod@displayfalse
+\newif\ifmod@uses\mod@usesfalse
+\newif\ifmod@usesqualified\mod@usesqualifiedfalse
+\DeclareOption{env}{\mod@envtrue}
+\DeclareOption{id}{\mod@idtrue}
+\DeclareOption{uses}{\mod@usestrue}
+\DeclareOption{display}{\mod@displaytrue}
+\DeclareOption{usesqualified}{\mod@usesqualifiedtrue}
+\def\modtrue{\mod@idtrue\mod@usestrue\mod@displaytrue\mod@usesqualifiedtrue}
+\DeclareOption{draft}{\modtrue}
+\DeclareOption{all}{\modtrue}
+\ProcessOptions
+\RequirePackage{keyval}[1997/11/10]
+\define@key{module}{cd}{}
+\define@key{module}{id}{%
+ \edef\this@module{\expandafter\noexpand\csname module@defs@#1\endcsname}%
+ \edef\this@qualified@module{\expandafter\noexpand\csname module@defs@qualified@#1\endcsname}%
+ \global\@namedef{module@defs@#1}{}
+ \global\@namedef{module@defs@qualified@#1}{}
+ \def\mod@id{#1}}
+\newenvironment{module}[1][]{\setkeys{module}{#1}\ifmod@env\show@mod@keys{module}\fi}{}
+\def\show@mod@keys@aux{%
+\@ifundefined{mod@id}{}{\ifmod@id{id=\mod@id},\fi}%
+\@ifundefined{mod@display}{}{\ifmod@display{display=\mod@display}\fi}
+\@ifundefined{mod@uses}{\relax}{\ifmod@uses{uses=\mod@uses},\fi}
+\@ifundefined{mod@usesqualified}\relax\else
+ \ifmod@usesqualified{usesqualified=\mod@usesqualified},\fi\fi}
+\def\clear@mod@keys{\let\mod@usesqualified=\relax\mod@uses=\relax
+ \let\st@id=\relax\let\st@display=\relax}
+\def\show@mod@keys#1{\footnote{#1[\show@mod@keys@aux]}\clear@mod@keys}
+\def\activate@defs#1{\csname module@defs@#1\endcsname}
+\def\export@defs#1{\@ifundefined{mod@id}{}{
+ \expandafter\expandafter\expandafter
+ \g@addto@macro\expandafter
+ \this@module\expandafter{\csname module@defs@#1\endcsname}}}
+\newcommand{\importmodule}[2][]{\def\@test{#1}%
+\ifx\@test\@empty\else\requiremodules{#1}\fi
+\activate@defs{#2}\export@defs{#2}}
+\define@key{symdef}{aliases}{}
+\define@key{symdef}{local}[true]{\@symdeflocaltrue}
+\define@key{symdef}{cmml}{}
+\define@key{symdef}{cattrs}{}
+\define@key{symdef}{definitionURL}{}
+\newif\if@symdeflocal
+\def\symdef{\@ifnextchar[{\@symdef}{\@symdef[]}}
+\def\@symdef[#1]#2{\@ifnextchar[{\@@symdef[#1]{#2}}{\@@symdef[#1]{#2}[0]}}
+\def\@@symdef[#1]#2[#3]#4{%
+\@symdeflocalfalse\setkeys{symdef}{#1}
+ \expandafter\providecommand\csname modules@#2@pres\endcsname[#3]{#4}
+ \expandafter\def\csname#2\endcsname{\csname modules@#2@pres\endcsname}
+ \if@symdeflocal\else
+ \@ifundefined{mod@id}{}{
+ \expandafter\g@addto@macro\this@module{\expandafter\providecommand\csname modules@#2@pres\endcsname[#3]{#4}}%
+ \expandafter\g@addto@macro\this@module{\expandafter\def\csname#2\endcsname{\csname modules@#2@pres\endcsname}}
+ \expandafter\g@addto@macro\this@qualified@module{\expandafter\providecommand\csname modules@#2@pres@qualified\endcsname[#3]{#4}}%
+ \expandafter\g@addto@macro\this@qualified@module{\expandafter\def\csname#2atqualified\endcsname{\csname modules@#2@pres@qualified\endcsname}}
+ }\fi}
+\def\redefine#1[#2]#3{\expandafter\renewcommand\csname modules@#1@pres\endcsname[#2]{#3}}
+\let\abbrdef\symdef
+\def\mod@simplify#1{\expandafter\mod@simpl#1/\relax}
+\def\mod@simpl#1/#2\relax{%\message{ 1 = #1, 2 = #2 }%
+\def\mod@test{}\ifx\mod@blaaaa\mod@test\edef\mod@savedprefix{}\def\mod@blaaaa{aaa}\else\fi
+\def\mod@comp{#2}\ifx\mod@test\mod@comp\edef\mod@savedprefix{\mod@savedprefix#1}%
+\else\mod@simplhelp#1/#2\relax\fi}
+\def\mod@simplhelp#1/#2/#3\relax{%
+\def\mod@test{}\def\mod@tust{#2}\def\mod@tist{#3}\def\mod@tost{..}\ifx\mod@test\mod@tist%
+\ifx\mod@tost\mod@tust\edef\mod@savedprefix{}\else\edef\mod@savedprefix
+{\mod@savedprefix#1/#2}\fi \else\ifx\mod@tost\mod@tust\mod@simpl#3\relax%
+\else\edef\mod@savedprefix{\mod@savedprefix#1/}\mod@simplhelp#2/#3\relax\fi\fi}%
+\newif\ifmodules
+\gdef\reg{}
+\def\mod@update#1{\def\mod@empty{}
+\ifx\reg\mod@empty\xdef\reg{#1}\else\xdef\reg{#1@\reg}\fi}
+\def\mod@check#1@#2///#3\relax{%
+\def\mod@empty{}\def\mod@one{#1}\def\mod@two{#2}\def\mod@three{#3}%
+\expandafter\ifx\mod@three\mod@one\modulestrue\else\ifx\mod@two\mod@empty\modulesfalse%
+\else\mod@check#2///#3\relax\fi\fi}
+\def\mod@search#1{%
+\modulesfalse\expandafter\mod@check\reg @///#1\relax%
+\ifmodules\else\mod@update{#1}\fi}
+\def\mod@reguse#1{\modulesfalse\expandafter\mod@check\reg @///#1\relax}
+\def\mod@prefix{}
+\def\mod@updatedpre#1{
+ \edef\mod@prefix{\mod@prefix\mod@pathprefix@check#1/\relax}}
+\def\mod@pathprefix@check#1/#2\relax{%
+\ifx\\#2\\% no slash in string
+\else\mod@ReturnAfterFi{#1/\mod@pathprefix@help#2\relax}%
+\fi}
+\def\mod@pathprefix@help#1/#2\relax{%
+\ifx\\#2\\% end of recursion
+\else\mod@ReturnAfterFi{#1/\mod@pathprefix@help#2\relax}%
+\fi}
+\long\def\mod@ReturnAfterFi#1\fi{\fi#1}
+\def\mod@pathpostfix@check#1/#2\relax{% slash
+\ifx\\#2\\%no slash in string
+#1\else\mod@ReturnAfterFi{\mod@pathpostfix@help#2\relax}%
+\fi}
+\def\mod@pathpostfix@help#1/#2\relax{%
+\ifx\\#2\\%
+#1\else\mod@ReturnAfterFi{\mod@pathpostfix@help#2\relax}%
+\fi}
+\def\mod@updatedpost#1{%
+\edef\mod@savedprefix{\mod@savedprefix\mod@pathpostfix@check#1/\relax} }
+\def\mod@updatesms{\edef\mod@savedprefix{\mod@savedprefix.sms}}
+\newcommand{\requiremodules}[1]{%
+{\mod@updatedpre{#1} % add the new file to the already existing path
+\let\mod@savedprefix\mod@prefix % add the path to the new file to the prefix
+\mod@updatedpost{#1}
+\def\mod@blaaaa{} % macro used in the simplify function (remove .. from the prefix)
+\mod@simplify{\mod@savedprefix} % remove |xxx/..| from the path (in case it exists)
+\mod@reguse{\mod@savedprefix}
+\ifmodules\else
+\mod@updatesms % update the file to contain the .sms extension
+\let\newreg\reg % use to compare, in case the .sms file was loaded before
+\mod@search{\mod@savedprefix} % update registry
+\ifx\newreg\reg\else\input{\mod@savedprefix}\fi % check if the registry was updated and load if necessary
+\fi}}
+\def\sinput#1{
+{\mod@updatedpre{#1} % add the new file to the already existing path
+\let\mod@savedprefix\mod@prefix % add the path to the new file to the prefix
+\mod@updatedpost{#1}
+\def\mod@blaaaa{} % macro used in the simplify function (remove .. from the prefix)
+\mod@simplify{\mod@savedprefix} % remove |xxx/..| from the path (in case it exists)
+\mod@reguse{\mod@savedprefix}
+\let\newreg\reg % use to compare, in case the .sms file was loaded before
+\mod@search{\mod@savedprefix} % update registry
+\ifx\newreg\reg%\message{This file has been previously introduced}
+\else\input{\mod@savedprefix}\fi}}
+\def\requirepackage#1#2{\makeatletter\input{#1.sty}\makeatother}
+\endinput
+%%
+%% End of file `modules.sty'.
diff --git a/Master/texmf-dist/tex/latex/stex/modules.sty.ltxml b/Master/texmf-dist/tex/latex/stex/modules.sty.ltxml
new file mode 100644
index 00000000000..4d1313374a4
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/modules.sty.ltxml
@@ -0,0 +1,246 @@
+
+# -*- CPERL -*-
+package LaTeXML::Package::Pool;
+use strict;
+use LaTeXML::Global;
+use LaTeXML::Package;
+RequirePackage('keyval');
+DefKeyVal('Module','cd','Semiverbatim');
+DefKeyVal('Module','id','Semiverbatim');
+DefEnvironment('{module} OptionalKeyVals:Module',
+ "?#excluded()(<omdoc:theory ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')> #body</omdoc:theory>)",
+#closed bracket ) seems to work fine now
+
+#commented this out - do we need current_theory?
+#plus: keyvals->getValue seems to be undefined?!
+
+ #beforeConstruct=> sub {
+ #my ($doc, $keyvals, %props) = @_;
+ #my $theory = $keyvals->getValue('id') if $keyvals;
+ #$theory = ref $theory ? $theory->toString : 'UNDEFINED';
+ #AssignValue(current_theory => $theory);
+ #return;},
+# $Doc->openElement('omdoc:theory', 'xml:id' => $theory);
+# my $uses = $keyvals->getValue('usses');
+# $uses = ref $uses ? $uses->toString || '' : '';
+# $uses =~ s/\s+//g; $uses=~ s/^\{//; $uses=~ s/\}$//;
+# my $module_paths = LookupValue('module_paths') || {};
+# foreach my $used(split(',',$uses)) {
+# my $file = $module_paths->{$used}; $file .= '.omdoc#' if $file;
+# $doc->openElement('omdoc:imports', 'from' => $file.$used);
+# $doc->closeElement('omdoc:imports'); }
+# $doc->absorb($props{body}) if $props{body};
+# $doc->closeElement('omdoc:theory'); }
+# return; },
+ beforeDigest=>\&useTheoryItemizations,
+ afterDigestBegin=>sub {
+ my($stomach, $whatsit)=@_;
+ $whatsit->setProperty(excluded=>LookupValue('excluding_modules'));
+
+ my $keys = $whatsit->getArg(1);
+ my($id, $cd)=$keys
+ && map(ToString($keys->getValue($_)),qw(id cd));
+ $cd = $id unless $cd;
+ # update the catalog with paths for modules
+ my $module_paths = LookupValue('module_paths') || {};
+ $module_paths->{$id} = LookupValue('last_module_path');
+ AssignValue('module_paths', $module_paths, 'global');
+
+ #Update the current module position
+ AssignValue(current_module => $id);
+ AssignValue(module_cd => $cd) if $cd;
+# my @uses = ();
+# if($uses){
+# $uses =~ s/\s//g; $uses=~ s/^\{//; $uses=~ s/\}$//;
+# @uses = split(',',$uses); }
+############### AssignValue("module_${id}_uses" => [@uses], 'global');
+#Idea: introdcue global list of used modules and activateScope on it once at the
+# main block.
+ #use_module($id); #22.02.08 need to ALWAYS invoke this to make things global
+
+ #activate the module in our current scope
+ $STATE->activateScope("module:".$id); #changed from use_module as only needs to take care of current module
+ return; });
+sub use_module {
+ my($module)=@_;
+ $module = ToString($module);
+ # Depth-first load definitions from used modules
+ foreach my $used_module (@{ LookupValue("module_${module}_uses") || []}){
+ use_module($used_module); }
+ # then load definitions for this module
+ $STATE->activateScope("module:$module"); }
+DefConstructor('\importmodule[]{}',"<omdoc:imports from='?#1(#1)\# #2'/>",
+ afterDigest=>sub {
+ my($stomach,$whatsit)=@_;
+ my $file = $whatsit->getArg(1);
+ my $module = $whatsit->getArg(2);
+ $module = ToString($module);
+ #if filepath is not supply simply look for the $module.sms file
+ if (!$file) {$file=ToString($module)};
+ my $containing_module = LookupValue('current_module');
+ #set the relation between the current module and the one to be imported
+ PushValue("module_".$containing_module."_uses"=>$module);
+ #check if we've already loaded this module
+ if(LookupValue('module_'.$module.'_loaded')) {use_module($module);} #if so activate it!
+ else {
+ #if not:
+ my $gullet = $stomach->getGullet;
+ #1) mark as loaded
+ AssignValue('module_'.$module.'_loaded' => 1, 'global');
+ #open a group for its definitions so that they are localized
+ $stomach->bgroup;
+ #update the last module path
+ AssignValue('last_module_path', $file);
+ #queue the closing tag for this module in the gullet where it will be executed
+ #after all other definitions of the imported module have been taken care of
+ $gullet->unread(Invocation(T_CS('\end@requiredmodule'), T_OTHER($module))->unlist);
+ #we only need to load the sms definitions without generating any xml output, so we set the flag to 1
+ AssignValue('excluding_modules' => 1);
+ #queue this module's sms file in the gullet so that its definitions are imported
+ $gullet->input($file,['sms']);
+ }
+ return;});
+DefKeyVal('symdef','aliases','Semiverbatim');
+DefKeyVal('symdef','local','Semiverbatim','true');
+DefKeyVal('symdef','cmml','Semiverbatim','true');
+DefKeyVal('symdef','cattrs','Semiverbatim','true');
+DefKeyVal('symdef','definitionURL','Semiverbatim','true');
+DefMacro('\symdef OptionalKeyVals:symdef {}[][]{}',
+ sub {
+my($self,@args)=@_;
+# print STDERR "excluding" if LookupValue('excluding_modules');
+((Invocation(T_CS('\@symdef'),@args)->unlist),
+ (LookupValue('excluding_modules') ? ()
+ : (Invocation(T_CS('\@symdef@pres'), @args)->unlist)));
+});
+
+DefPrimitive('\@symdef OptionalKeyVals:symdef {}[][]{}', sub {
+ my($stomach,$keys,$cs,$nargs,$opt,$presentation)=@_;
+ my($name,$cd,$role,$cmml,$cattrs,$definitionURL)=$keys
+ && map($_ && $_->toString,map($keys->getValue($_), qw(name cd role cmml cattrs definitionURL)));
+ $cd = LookupValue('module_cd') unless $cd;
+ $nargs = (ref $nargs ? $nargs->toString : $nargs || 0);
+ my $module = LookupValue('current_module');
+# print STDERR "Define ".Stringify($cs)." in $module\n";
+ my $scope = (($keys && ($keys->getValue('local') || '' eq 'true')) ? 'module_local' : 'module').":".$module;
+ my $attr="name='#name' meaning='#meaning' omcd='#omcd'";
+ DefConstructorI("\\".$cs->toString,convertLaTeXArgs($nargs,$opt),
+ ($nargs == 0
+ ? "<ltx:XMTok $attr scriptpos='#scriptpos'/>"
+ : "<ltx:XMApp scriptpos='#scriptpos'>"
+ . "<ltx:XMTok $attr scriptpos='#operator_scriptpos'/>"
+ . join('',map("<ltx:XMArg>#$_</ltx:XMArg>", (1..$nargs)))
+ ."</ltx:XMApp>"),
+ properties => {name=>$name, meaning=>$cs->toString,omcd=>$cd,role => $role},
+ scope=>$scope);
+ return; });
+DefPrimitive('\abbrdef OptionalKeyVals:symdef {}[][]{}', sub {
+ my($stomach,$keys,$cs,$nargs,$opt,$presentation)=@_;
+ my $module = LookupValue('current_module');
+ my $scope = (($keys && ($keys->getValue('local') || '' eq 'true')) ? 'module_local' : 'module').":$module";
+ DefMacroI("\\".$cs->toString,convertLaTeXArgs($nargs,$opt),$presentation,
+ scope=>$scope);
+ return; });
+DefPrimitive('\requiremodules{}', sub {
+ my($stomach,$module)=@_;
+ my $GULLET = $stomach->getGullet;
+ $module = Digest($module)->toString;
+ if(LookupValue('module_'.$module.'_loaded')) {}
+ else {
+ AssignValue('module_'.$module.'_loaded' => 1, 'global');
+ $stomach->bgroup;
+ AssignValue('last_module_path', $module);
+ $GULLET->unread(T_CS('\end@requiredmodule'));
+ AssignValue('excluding_modules' => 1);
+ $GULLET->input($module,['sms']);
+ }
+ return;});
+
+DefPrimitive('\end@requiredmodule{}',sub {
+ #close the group
+ $_[0]->egroup;
+ #print STDERR "END: ".ToString(Digest($_[1])->toString);
+ #Take care of any imported elements in this current module by activating it and all its dependencies
+ #print STDERR "Important: ".ToString(Digest($_[1])->toString)."\n";
+ use_module(ToString(Digest($_[1])->toString));
+ return; });
+DefPrimitive('\sinput{}', sub {
+ my($stomach,$module)=@_;
+ my $GULLET = $stomach->getGullet;
+ $module = Digest($module)->toString;
+ AssignValue('module_'.$module.'_loaded' => 1, 'global');
+ $stomach->bgroup;
+ AssignValue('last_module_path', $module);
+ $GULLET->unread(Invocation(T_CS('\end@requiredmodule'),T_OTHER($module))->unlist);
+ $GULLET->input($module,['tex']);
+ return;});
+DefMacro('\@symdef@pres OptionalKeyVals:symdef {}[][]{}', sub {
+ my($self,$keys, $cs,$nargs,$opt,$presentation)=@_;
+ Invocation(T_CS('\@symdef@pres@aux'),
+ $cs,
+ ($nargs || Tokens(T_OTHER(0))),
+ symdef_presentation_pmml($cs,ToString($nargs)||0,$presentation),
+ symdef_presentation_TeX($presentation),
+ $keys)->unlist; });
+sub symdef_presentation_pmml {
+ my($cs,$nargs,$presentation)=@_;
+ my @toks = $presentation->unlist;
+ while(@toks && $toks[0]->equals(T_SPACE)){ pop(@toks); } # Remove leading space
+ $presentation = Tokens(@toks);
+ # Wrap with \@use, unless already has a recognized formatter.
+ $presentation = Invocation(T_CS('\@use'),$presentation) # Using simple text for now, until getting a proper \@use
+ unless @toks && ($toks[0]->toString =~ /^\\(infix|prefix|postfix|assoc|use|mixfixi|mixfixa|mixfixii|mixfixia|mixfixai|mixfixiii)$/);
+ # Low level substitution.
+ my @args = map(Invocation(T_CS('\@SYMBOL'),T_OTHER("pres_arg:".($_+1))),1..$nargs);
+ $presentation = Tokens(LaTeXML::Expandable::substituteTokens($presentation,@args));
+ $presentation; }
+DefConstructor('\@use {}',
+ "<omdoc:prototype>"
+ . "<om:OMS cd='' name=''/>"
+ ."</omdoc:prototype>"
+ ."<omdoc:rendering>"
+ . "<ltx:Math><ltx:XMath>#1</ltx:XMath></ltx:Math>"
+ ."</omdoc:rendering>",
+ mode=>'inline_math');
+sub get_cd {
+ my($name,$cd,$role,$cmml,$cattrs,$definitionURL)=@_;
+ return $cd;}
+DefConstructor('\@symdef@pres@aux{}{}{}{} OptionalKeyVals:symdef',
+ "<omdoc:symbol name='#1'/>"
+ ."<omdoc:notation name='#name' cd='&get_cd(#5)'>"
+ ."#3"
+ ."</omdoc:notation>",
+ afterDigest=>sub { my ($stomach, $whatsit) = @_;
+ my $keys = $whatsit->getArg(5);
+ my $module = LookupValue('current_module');
+ $whatsit->setProperties(for=>ToString($whatsit->getArg(1)));
+ $whatsit->setProperty(role=>($keys ? $keys->getValue('role')
+ : (ToString($whatsit->getArg(2)) ? 'applied'
+ : undef))); });
+sub symdef_presentation_TeX {
+ my($presentation)=@_;
+ my @tokens = $presentation->unlist;
+ my(@frag,@frags) = ();
+ while(my $tok = shift(@tokens)){
+ if($tok->equals(T_PARAM)){
+ push(@frags,Invocation(T_CS('\@symdef@pres@text'),Tokens(@frag))) if @frag;
+ @frag=();
+ my $n = shift(@tokens)->getString;
+ push(@frags,Invocation(T_CS('\@symdef@pres@arg'),T_OTHER($n+1))); }
+ else {
+ push(@frag,T_OTHER($tok->getString)); }} # IMPORTANT! Neutralize the tokens!
+ push(@frags,Invocation(T_CS('\@symdef@pres@text'),Tokens(@frag))) if @frag;
+ Tokens(map($_->unlist,@frags)); }
+
+DefConstructor('\@symdef@pres@arg{}', "<omdoc:recurse select='#select'/>",
+ afterDigest=>sub { my ($stomach, $whatsit) = @_;
+ my $select = $whatsit->getArg(1);
+ $select = ref $select ? $select->toString : '';
+ $whatsit->setProperty(select=>"*[".$select."]"); });
+
+DefConstructor('\@symdef@pres@text{}', "<omdoc:text>#1</omdoc:text>");
+DefConstructor('\requirepackage{} Semiverbatim',"<omdoc:imports from='#2'/>",
+ afterDigest=>sub { my ($stomach, $whatsit) = @_;
+ my $select = $whatsit->getArg(1);
+ RequirePackage($select->toString); });
+1;
diff --git a/Master/texmf-dist/tex/latex/stex/omdoc.cls b/Master/texmf-dist/tex/latex/stex/omdoc.cls
new file mode 100644
index 00000000000..0e19acb0bd3
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/omdoc.cls
@@ -0,0 +1,15 @@
+%%
+%% This is file `omdoc.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% omdoc.dtx (with options: `cls')
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesClass{omdoc}[2007/09/09 v0.3 OMDoc Documents]
+\LoadClass{article}
+\RequirePackage{omdoc}
+\endinput
+%%
+%% End of file `omdoc.cls'.
diff --git a/Master/texmf-dist/tex/latex/stex/omdoc.cls.ltxml b/Master/texmf-dist/tex/latex/stex/omdoc.cls.ltxml
new file mode 100644
index 00000000000..e197af2a37d
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/omdoc.cls.ltxml
@@ -0,0 +1,22 @@
+# -*- CPERL -*-
+package LaTeXML::Package::Pool;
+use strict;
+use LaTeXML::Package;
+LoadClass('article');
+RegisterNamespace('omdoc'=>"http://www.mathweb.org/omdoc"); # OMDoc namespace
+RegisterNamespace(om=>"http://www.openmath.org/OpenMath");
+RegisterNamespace('m'=>"http://www.w3.org/1998/Math/MathML");
+RegisterNamespace('dc'=>"http://purl.org/dc/elements/1.1/");
+RegisterNamespace('cc'=>"http://creativecommons.org/ns");
+RelaxNGSchema('/Users/kohlhase/stex/rnc/omdoc+ltxml',
+ '#default'=>"http://www.mathweb.org/omdoc",
+ 'om'=>"http://www.openmath.org/OpenMath",
+ 'm'=>"http://www.w3.org/1998/Math/MathML",
+ 'dc'=>"http://purl.org/dc/elements/1.1/",
+ 'cc'=>"http://creativecommons.org/ns",
+ 'ltx'=>"http://dlmf.nist.gov/LaTeXML");
+RequirePackage('omdoc');
+DefEnvironment('{document}','<omdoc:omdoc>#body</omdoc:omdoc>',
+ beforeDigest=> sub { AssignValue(inPreamble=>0); },
+ afterDigest=> sub { $_[0]->getGullet->flush; return; });
+1;
diff --git a/Master/texmf-dist/tex/latex/stex/omdoc.sty b/Master/texmf-dist/tex/latex/stex/omdoc.sty
new file mode 100644
index 00000000000..38d365517dc
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/omdoc.sty
@@ -0,0 +1,83 @@
+%%
+%% This is file `omdoc.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% omdoc.dtx (with options: `package')
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{omdoc}[2007/09/09 v0.3 OMDoc document Structure]
+\RequirePackage{keyval}[1997/11/10]
+\define@key{omgroup}{id}{\label{#1}}
+\define@key{omgroup}{type}{\def\omgroup@type{#1}}
+\define@key{omgroup}{display}{\def\omgroup@display{#1}}
+\def\omgroup@flow{flow}
+\newcount\section@level\section@level=1
+\newenvironment{omgroup}[2][]% title
+{\setkeys{omgroup}{#1}
+\ifx\omgroup@display\omgroup@flow{#2}\else
+\ifnum\section@level=1\section{#2}\fi
+\ifnum\section@level=2\subsection{#2}\fi
+\ifnum\section@level=3\subsubsection{#2}\fi
+\ifnum\section@level=4\paragraph{#2}\fi
+\advance\section@level by 1\fi}{}
+\def\tgroup{\omgroup}\def\endtgroup{\endomgroup}
+\define@key{stat}{id}{\def\st@id{#1}}
+\define@key{stat}{display}{\def\st@display{#1}}
+\define@key{stat}{for}{\def\stat@for{#1}}
+\define@key{stat}{from}{\def\stat@from{#1}}
+\define@key{stat}{type}{\def\stat@type{#1}}
+\define@key{stat}{title}{\def\stat@title{#1}}
+\define@key{stat}{continues}{\def\stat@continues{#1}}
+\def\show@st@keys@aux{%
+\@ifundefined{st@id}{}{\ifst@id{id=\st@id},\fi}%
+\@ifundefined{st@display}{}{\ifst@display{display=\st@display}\fi}}
+\def\clear@st@keys{\let\st@id=\relax\let\st@display=\relax}
+\def\show@stat@keys@aux{%
+\@ifundefined{st@for}{}{\ifstat@for{for=\stat@for},\fi}%
+\@ifundefined{st@from}{}{\ifstat@from{from=\stat@from},\fi}%
+\@ifundefined{st@type}{}{\ifstat@type{type=\stat@type},\fi}%
+\@ifundefined{st@title}{}{\ifstat@title{title=\stat@title},\fi}%
+\@ifundefined{st@continues}{}{\ifstat@continues{continues=\stat@continues}\fi}}
+\def\show@stat@keys#1{\footnote{#1[\show@st@keys@aux\show@stat@keys@aux]}%
+\clear@st@keys\clear@stat@keys}
+\def\clear@stat@keys{\let\stat@for=\relax\let\stat@from=\relax%
+\let\stat@type=\relax\let\stat@title=\relax\let\stat@continues=\relax}
+\def\st@flow{flow}
+\def\omtext@pre@skip{\smallskip}
+\def\omtext@post@skip{}
+\newenvironment{omtext}[1][]{\setkeys{stat}{#1}{% keyval args
+\def\lec#1{\@lec{#1}}% so the trailing \par does not get into the way
+\omtext@pre@skip\par\noindent
+\@ifundefined{stat@title}{}{\ifx\st@display\st@flow\else\stDMemph{\stat@title}:\fi}}
+\ifst@env\show@stat@keys{omtext:\stat@title}\fi
+\omtext@post@skip}{}
+\long\def\STRlabel#1#2{\STRlabeldef{#1}{#2}{#2}}
+\def\STRcopy#1{\expandafter\ifx\csname STR@#1\endcsname\relax
+\message{STR warning: reference #1 undefined!}
+\else\csname STR@#1\endcsname\fi}
+\long\def\@semantics[#1]#2#3{#2\STRlabeldef{#1}{#2}}
+\def\STRlabeldef#1{\expandafter\gdef\csname STR@#1\endcsname}
+\def\STRsemantics{\@ifnextchar[\@semantics{\@semantics[]}}
+\define@key{phrase}{id}{}
+\define@key{phrase}{style}{}
+\define@key{phrase}{class}{}
+\define@key{phrase}{index}{}
+\define@key{phrase}{verbalizes}{}
+\define@key{phrase}{type}{}
+\newenvironment{phrase}[1][]{\setkeys{phrase}{#1}}{}
+\def\nlex#1{\green{\sl{#1}}}
+\def\nlcex#1{*\green{\sl{#1}}}
+\def\inlinequote#1{``{\sl{#1}}''}
+\def\blue#1{\textcolor{blue}{#1}}
+\def\red#1{\textcolor{red}{#1}}
+\def\green#1{\textcolor{green}{#1}}
+\def\cyan#1{\textcolor{cyan}{#1}}
+\def\magenta#1{\textcolor{magenta}{#1}}
+\def\brown#1{\textcolor{brown}{#1}}
+\def\yellow#1{\textcolor{yellow}{#1}}
+\def\omspace#1{\hspace*{#1}}
+\endinput
+%%
+%% End of file `omdoc.sty'.
diff --git a/Master/texmf-dist/tex/latex/stex/omdoc.sty.ltxml b/Master/texmf-dist/tex/latex/stex/omdoc.sty.ltxml
new file mode 100644
index 00000000000..24c3ca3b119
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/omdoc.sty.ltxml
@@ -0,0 +1,230 @@
+package LaTeXML::Package::Pool;
+use strict;
+use LaTeXML::Package;
+RequirePackage('keyval');
+DefKeyVal('omgroup','id','Semiverbatim');
+DefKeyVal('omgroup','type','Semiverbatim');
+DefKeyVal('omgroup','display','Semiverbatim');
+DefEnvironment('{omgroup} OptionalKeyVals:omgroup {}',
+ "<omdoc:omgroup ?&KeyVal(#1,'id')(xml:id='#1')() ?&KeyVal(#1,'type')(type='#1')()>\n"
+ . "?#1(<omdoc:metadata><dc:title>#1</dc:title></omdoc:metadata>\n)()"
+ . "#body\n"
+ . "</omdoc:omgroup>");
+
+DefEnvironment('{tgroup} OptionalKeyVals:omgroup {}',
+ "<omdoc:tgroup ?&KeyVal(#1,'id')(xml:id='#1')() ?&KeyVal(#1,'type')(type='#1')()>\n"
+ . "?#1(<omdoc:metadata><dc:title>#1</dc:title></omdoc:metadata>\n)()"
+ . "#body\n"
+ . "</omdoc:tgroup>");
+DefParameterType('IfBeginFollows', sub {
+ my ($gullet) = @_;
+ $gullet->skipSpaces;
+ return 1 unless $gullet->ifNext(T_CS('\begin'));
+ return; },
+ reversion=>'', optional=>1);
+
+Let('\group@item@maybe@unwrap','\relax');
+
+DefMacro('\group@item[] IfBeginFollows', sub {
+ my($gullet,$tag,$needwrapper)=@_;
+ ( T_CS('\group@item@maybe@unwrap'),
+ ($needwrapper ? (Invocation(T_CS('\group@item@wrap'),$tag)->unlist) : ()) ); });
+
+DefConstructor('\group@item@wrap {}',
+ "<omdoc:omtext>"
+ . "?#1(<omdoc:metadata><dc:title>#1</dc:title></omdoc:metadata>)()"
+ . "<omdoc:CMP><omdoc:p>",
+ beforeDigest=>sub {
+ Let('\group@item@maybe@unwrap','\group@item@unwrap');
+ $_[0]->bgroup;
+ useCMPItemizations();
+ return; },
+ properties=>sub{ RefStepItemCounter(); });
+DefConstructor('\group@item@unwrap',
+ "</omdoc:p></omdoc:CMP></omdoc:omtext>",
+ beforeDigest=>sub {
+ $_[0]->egroup;
+ Let('\group@item@maybe@unwrap','\relax'); });
+
+Let('group@item@maybe@unwrap','\relax');
+
+Let('\itemize@item'=>'\group@item');
+Let('\enumerate@item'=>'\group@item');
+Let('\description@item'=>'\group@item');
+
+DefEnvironment('{itemize}',
+ "<omdoc:omgroup xml:id='#id' type='itemize'>#body</omdoc:omgroup>",
+ properties=>sub { beginItemize('itemize'); },
+ beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); });
+DefEnvironment('{enumerate}',
+ "<omdoc:omgroup xml:id='#id' type='enumerate'>#body</omdoc:omgroup>",
+ properties=>sub { beginItemize('enumerate'); },
+ beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); });
+DefEnvironment('{description}',
+ "<omdoc:omgroup xml:id='#id' type='description'>#body</omdoc:omgroup>",
+ properties=>sub { beginItemize('description'); },
+ beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); });
+Let('\tgroup@itemize@item'=>'\group@item');
+Let('\tgroup@enumerate@item'=>'\group@item');
+Let('\tgroup@description@item'=>'\group@item');
+
+DefEnvironment('{tgroup@itemize}',
+ "<omdoc:tgroup xml:id='#id' type='itemize'>#body</omdoc:tgroup>",
+ properties=>sub { beginItemize('tgroup@itemize'); },
+ beforeDigest=>sub { Let(T_CS('\end{itemize}') =>T_CS('\end{tgroup@itemize}')); },
+ beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); });
+DefEnvironment('{tgroup@enumerate}',
+ "<omdoc:tgroup xml:id='#id' type='enumerate'>#body</omdoc:tgroup>",
+ properties=>sub { beginItemize('tgroup@enumerate'); },
+ beforeDigest=>sub{ Let(T_CS('\end{enumerate}') =>T_CS('\end{tgroup@enumerate}'));},
+ beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); });
+DefEnvironment('{tgroup@description}',
+ "<omdoc:tgroup xml:id='#id' type='description'>#body</omdoc:tgroup>",
+ properties=>sub { beginItemize('tgroup@description'); },
+ beforeDigest=>sub{ Let(T_CS('\end{description}') =>T_CS('\end{tgroup@description}'));},
+ beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); });
+
+sub useTheoryItemizations {
+ Let(T_CS('\begin{itemize}') =>T_CS('\begin{tgroup@itemize}'));
+ Let(T_CS('\begin{enumerate}') =>T_CS('\begin{tgroup@enumerate}'));
+ Let(T_CS('\begin{description}')=>T_CS('\begin{tgroup@description}'));
+ return; }
+DefConstructor('\CMP@itemize@item[]',
+ '<omdoc:li>'
+ . '?#1(<omdoc:metadata><dc:title>#1</dc:title></omdoc:metadata>)()',
+ properties=>sub{ RefStepItemCounter(); });
+
+DefConstructor('\CMP@enumerate@item[]',
+ '<omdoc:li>'
+ . '?#1(<omdoc:metadata><dc:title>#1</dc:title></omdoc:metadata>)()',
+ properties=>sub{ RefStepItemCounter(); });
+
+DefConstructor('\CMP@description@item[]',
+ '<omdoc:di>'
+ . '?#1(<omdoc:dt>#1</omdoc:dt>)()<omdoc:dd>', # trust di and dt to autoclose
+ properties=>sub{ RefStepItemCounter(); });
+
+DefEnvironment('{CMP@itemize}',
+ "<omdoc:ul xml:id='#id'>#body</omdoc:ul>",
+ properties=>sub { beginItemize('CMP@itemize'); },
+ beforeDigest=>sub { Let(T_CS('\end{itemize}') =>T_CS('\end{CMP@itemize}')); });
+DefEnvironment('{CMP@enumerate}',
+ "<omdoc:ol xml:id='#id'>#body</omdoc:ol>",
+ properties=>sub { beginItemize('CMP@enumerate'); },
+ beforeDigest=>sub { Let(T_CS('\end{enumerate}') =>T_CS('\end{CMP@enumerate}')); });
+DefEnvironment('{CMP@description}',
+ "<omdoc:dl xml:id='#id'>#body</omdoc:dl>",
+ properties=>sub { beginItemize('CMP@description'); },
+ beforeDigest=>sub { Let(T_CS('\end{description}') =>T_CS('\end{CMP@description}'));});
+
+sub useCMPItemizations {
+ Let(T_CS('\begin{itemize}') =>T_CS('\begin{CMP@itemize}'));
+ Let(T_CS('\begin{enumerate}') =>T_CS('\begin{CMP@enumerate}'));
+ Let(T_CS('\begin{description}')=>T_CS('\begin{CMP@description}'));
+ return; }
+
+Tag('omdoc:CMP', afterOpen => sub {
+ AssignValue('_LastSeenCMP', $_[1], 'global');
+ return; });
+
+Tag('omdoc:li', autoClose=>1);
+Tag('omdoc:dd', autoClose=>1);
+Tag('omdoc:di', autoClose=>1);
+DefKeyVal('stat','id','Semiverbatim');
+DefKeyVal('stat','for','Semiverbatim');
+DefKeyVal('stat','title','Semiverbatim');
+DefKeyVal('stat','from','Semiverbatim');
+DefKeyVal('stat','type','Semiverbatim');
+DefKeyVal('stat','display','Semiverbatim'); # not used at the moment
+DefCMPEnvironment('{omtext} OptionalKeyVals:stat',
+ "<omdoc:omtext "
+ . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')() "
+ . "?&KeyVal(#1,'type')(type='&KeyVal(#1,'type')')() "
+ . "?&KeyVal(#1,'for')(for='&KeyVal(#1,'for')')() "
+ . "?&KeyVal(#1,'from')(from='&KeyVal(#1,'from')')()>"
+ . "?&KeyVal(#1,'title')(<omdoc:metadata><dc:title>&KeyVal(#1,'title')</dc:title></omdoc:metadata>)()"
+ . "<omdoc:CMP><omdoc:p>#body</omdoc:p></omdoc:CMP>"
+ . "</omdoc:omtext>\n");
+sub DefCMPEnvironment {
+ my ($proto, $replacement, %options) = @_;
+ my @before = $options{beforeDigest} ? ($options{beforeDigest}) : ();
+ push(@before, \&useCMPItemizations);
+ $options{beforeDigest} = \@before;
+ DefEnvironment($proto, $replacement, %options);
+}
+DefConstructor('\STRlabel{}{}', sub {
+ my($document,$label,$object)=@_;
+ $document->absorb($object);
+ $document->addAttribute('xml:id'=>ToString($label)) if $label; });
+DefConstructor('\STRcopy{}',"<omdoc:ref xref='#1'/>");
+DefMacro('\STRlabeldef{}{}', "");
+DefConstructor('\STRsemantics[]{}{}', sub {
+ my($document,$label,$ignore,$object)=@_;
+ $document->absorb($object);
+ $document->addAttribute('xml:id'=>ToString($label)) if $label; });
+DefKeyVal('phrase','id','Semiverbatim');
+DefKeyVal('phrase','style','Semiverbatim');
+DefKeyVal('phrase','class','Semiverbatim');
+DefKeyVal('phrase','index','Semiverbatim');
+DefKeyVal('phrase','verbalizes','Semiverbatim');
+DefKeyVal('phrase','type','Semiverbatim');
+DefConstructor('\phrase OptionalKeyVals:phrase {}',
+ "<omdoc:phrase %&KeyVals(#1)>#body</omdoc:phrase>");
+DefConstructor('\nlex{}',"<omdoc:phrase type='nlex'>#1</omdoc:phrase>");
+DefConstructor('\nlcex{}',"<omdoc:phrase type='nlcex'>#1</omdoc:phrase>");
+DefConstructor('\inlinequote{}',"<omdoc:phrase type='inlinequote'>#1</omdoc:phrase>");
+sub omdocColorMacro {
+ my ($color, @args) = @_;
+ my $tok_color = TokenizeInternal($color);
+ (T_BEGIN, T_CS('\@omdoc@color'), T_BEGIN, $tok_color->unlist,
+ T_END, T_CS('\@omdoc@color@content'), T_OTHER('['), $tok_color->unlist, T_OTHER(']'),
+ T_BEGIN, $args[1]->unlist, T_END, T_END); }
+DefMacro('\@omdoc@color{}', sub { MergeFont(color=>$_[1]->toString); return; });
+DefConstructor('\@omdoc@color@content[]{}',
+ "?#isMath(#2)(<omdoc:phrase ?#1(style='color:#1')()>#2</omdoc:phrase>)");
+foreach my $color(qw(blue red green magenta cyan brown yellow)) {
+ DefMacro("\\".$color.'{}', sub { omdocColorMacro($color, @_); }); }
+DefConstructor('\par',sub { $_[0]->maybeCloseElement('omdoc:p'); },alias=>"\\par\n");
+Tag('omdoc:p', autoClose=>1, autoOpen=>1);
+DefConstructor('\omspace{}','');
+DefConstructor('\emph{}',"<omdoc:phrase class='emphasis'>#1</omdoc:phrase>");
+DefConstructor('\em',"<omdoc:phrase class='emphasis'>");
+Tag('omdoc:phrase', autoClose=>1);
+DefEnvironment('{center}','#body');
+DefEnvironment('{minipage}{}','#body');
+DefEnvironment('{quote}',"<omdoc:phrase type='quote' style='display:block'>#body</omdoc:phrase>");
+DefEnvironment('{quotation}',"<omdoc:phrase type='quote' style='display:block'>#body</omdoc:phrase>");
+DefEnvironment('{small}','#body');
+DefEnvironment('{footnotesize}','#body');
+DefEnvironment('{tiny}','#body');
+DefEnvironment('{scriptsize}','#body');
+DefConstructor('\LARGE','');
+DefConstructor('\Large','');
+DefConstructor('\large','');
+DefConstructor('\small','');
+
+DefConstructor('\fbox{}','#1');
+
+DefConstructor('\footnote[]{}',
+ "<omdoc:note class='foot' ?#1(mark='#1')>#2</omdoc:note>");
+DefConstructor('\footnotemark[]',"");
+DefConstructor('\footnotetext[]{}',
+ "<omdoc:note class='foot' ?#1(mark='#1')>#2</omdoc:note>");
+
+DefConstructor('\sf', '');
+DefConstructor('\sc', '');
+Tag('omdoc:p',afterOpen=>\&numberIt);
+Tag('omdoc:omtext',afterOpen=>\&numberIt);
+Tag('omdoc:omgroup',afterOpen=>\&numberIt);
+Tag('omdoc:tgroup',afterOpen=>\&numberIt);
+Tag('omdoc:CMP',afterOpen=>\&numberIt);
+sub numberIt {
+ my($document,$node,$whatsit)=@_;
+ my(@parents)=$document->findnodes('ancestor::*[@xml:id]',$node); # find 1st id'd parent.
+ my $prefix= (@parents ? $parents[$#parents]->getAttribute('xml:id')."." : '');
+ my(@siblings)=$document->findnodes('preceding-sibling::*[@xml:id]',$node);
+ my $n = scalar(@siblings)+1;
+ my $id = ($node -> getAttribute('xml:id'));
+ $node->setAttribute('xml:id'=>$prefix."p$n") unless $id; }
+DefConstructor('\url Semiverbatim',"<omdoc:link href='#1'>#1</omdoc:link>");
+1;
diff --git a/Master/texmf-dist/tex/latex/stex/presentation.sty b/Master/texmf-dist/tex/latex/stex/presentation.sty
new file mode 100644
index 00000000000..53eb139fe7a
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/presentation.sty
@@ -0,0 +1,125 @@
+%%
+%% This is file `presentation.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% presentation.dtx (with options: `package')
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{presentation}[2007/09/03 v0.9e presentation for semantic macros]
+
+\RequirePackage{keyval}[1997/11/10]
+\def\pres@default@precedence{1000}
+\def\setDefaultPrecedence#1{\def\pres@default@precedence{#1}}
+\def\pres@initial@precedence{1000}
+\def\setInitialPrecedence#1{\def\pres@initial@precedence{#1}}
+\def\pres@current@precedence{\pres@initial@precedence}
+\def\pres@default@lbrack{(}\def\pres@lbrack{\pres@default@lbrack}
+\def\pres@default@rbrack{)}\def\pres@rbrack{\pres@default@rbrack}
+\def\setDefaultLeftBracket#1{\def\pres@default@lbrack{#1}}
+\def\setDefaultRightBracket#1{\def\pres@default@rbrack{#1}}
+\def\PrecSet#1{\def\pres@default@precedence{#1}}
+\def\PrecWrite#1{\ifnum\pres@current@precedence>\pres@p\else{#1}\fi}
+\def\clearkeys{\let\pres@p@key=\relax
+\let\pres@pi@key=\relax%
+\let\pres@pi@key=\relax%
+\let\pres@pii@key=\relax%
+\let\pres@piii@key=\relax}
+\define@key{mi}{lbrack}{\def\pres@lbrack@key{#1}}
+\define@key{mi}{rbrack}{\def\pres@lbrack@key{#1}}
+\define@key{mi}{p}{\def\pres@p@key{#1}}
+\define@key{mi}{pi}{\def\pres@pi@key{#1}}
+\def\prep@keys@mi%
+{\edef\pres@lbrack{\@ifundefined{pres@lbrack@key}{\pres@default@lbrack}{\pres@lbrack@key}}
+\edef\pres@rbrack{\@ifundefined{pres@rbrack@key}{\pres@default@rbrack}{\pres@rbrack@key}}
+\edef\pres@p{\@ifundefined{pres@p@key}{\pres@default@precedence}{\pres@p@key}}
+\edef\pres@pi{\@ifundefined{pres@pi@key}{\pres@p}{\pres@pi@key}}}
+\newcommand{\mixfixi}[4][]%key, pre, arg, post
+{\setkeys{mi}{#1}\prep@keys@mi\clearkeys
+\PrecWrite\pres@lbrack% write bracket if necessary
+#2{\edef\pres@current@precedence{\pres@pi}#3}#4%
+\PrecWrite\pres@rbrack}
+\newcommand{\mixfixa}[5][]%key, pre, arg, post, assocop
+{\setkeys{mi}{#1}\prep@keys@mi\clearkeys%
+\PrecWrite\pres@lbrack{#2}{\@assoc\pres@pi{#5}{#3}}{#4}\PrecWrite\pres@rbrack}
+\define@key{mii}{lbrack}{\def\pres@lbrack@key{#1}}
+\define@key{mii}{rbrack}{\def\pres@lbrack@key{#1}}
+\define@key{mii}{p}{\def\pres@p@key{#1}}
+\define@key{mii}{pi}{\def\pres@pi@key{#1}}
+\define@key{mii}{pii}{\def\pres@pii@key{#1}}
+\def\prep@keys@mii{\prep@keys@mi%
+\edef\pres@pii{\@ifundefined{pres@pii@key}{\pres@p}{\pres@pii@key}}%
+\let\pres@pii@key=\relax}
+\newcommand{\mixfixii}[6][]%key, pre, arg1, mid, arg2, post
+{\setkeys{mii}{#1}\prep@keys@mii\clearkeys%
+\PrecWrite\pres@lbrack% write bracket if necessary
+#2{\edef\pres@current@precedence{\pres@pi}#3}%
+#4{\edef\pres@current@precedence{\pres@pii}#5}#6%
+\PrecWrite\pres@rbrack}
+\newcommand{\mixfixia}[7][]%key, pre, arg1, mid, arg2, post, assocop
+{\setkeys{mii}{#1}\prep@keys@mii\clearkeys%
+\PrecWrite\pres@lbrack% write bracket if necessary
+#2{\edef\pres@current@precedence{\pres@pi}#3}%
+#4{\@assoc\pres@pii{#7}{#5}}#6%
+\PrecWrite\pres@rbrack}
+\newcommand{\mixfixai}[7][]%key, pre, arg1, mid, arg2, post, assocop
+{\setkeys{mii}{#1}\prep@keys@mii\clearkeys%
+\PrecWrite\pres@lbrack% write bracket if necessary
+#2{\@assoc\pres@pi{#7}{#3}}%
+#4{\edef\pres@current@precedence{\pres@pii}#5}#6%
+\PrecWrite\pres@rbrack}
+\define@key{miii}{lbrack}{\def\pres@lbrack@key{#1}}
+\define@key{miii}{rbrack}{\def\pres@lbrack@key{#1}}
+\define@key{miii}{p}{\def\pres@p@key{#1}}
+\define@key{miii}{pi}{\def\pres@pi@key{#1}}
+\define@key{miii}{pii}{\def\pres@pii@key{#1}}
+\define@key{miii}{piii}{\def\pres@piii@key{#1}}
+\def\prep@keys@miii{\prep@keys@mii\edef\pres@piii{\@ifundefined{pres@piii@key}{\pres@p}{\pres@piii@key}}}
+\newcommand{\mixfixiii}[8][]%key, pre, arg1, mid1, arg2, mid2, arg3, post
+{\setkeys{miii}{#1}\prep@keys@miii\clearkeys%
+\PrecWrite\pres@lbrack% write bracket if necessary
+#2{\edef\pres@current@precedence{\pres@pi}#3}%
+#4{\edef\pres@current@precedence{\pres@pii}#5}%
+#6{\edef\pres@current@precedence{\pres@pii}#7}#8%
+\PrecWrite\pres@rbrack}
+\newcommand{\prefix}[3][]%key, fn, arg
+{\setkeys{mi}{#1}\prep@keys@mi\clearkeys
+#2\PrecWrite\pres@lbrack% write bracket if necessary
+{\edef\pres@current@precedence{\pres@pi}#3}%
+\PrecWrite\pres@rbrack}
+\newcommand{\postfix}[3][]%key, fn, arg
+{\setkeys{mi}{#1}\prep@keys@mi\clearkeys
+\PrecWrite\pres@lbrack% write bracket if necessary
+{\edef\pres@current@precedence{\pres@pi}#3}%
+\PrecWrite\pres@rbrack{#2}}
+\newcommand{\prefixa}[4][]{\mixfixa[#1]{#2}{#3}{}{#4}}
+\newcommand{\postfixa}[4][]{{#1}\mixfixa[#1]{}{#3}{#2}{#4}}
+\newcommand{\infix}[4][]{\mixfixii[#1]{}{#3}{#2}{#4}{}}
+\def\@assoc#1#2#3{% precedence, function, argv
+\let\@tmpop=\relax% do not print the function the first time round
+\@for\@I:=#3\do{\@tmpop% print the function
+{\edef\pres@current@precedence{#1}\@I}%
+\let\@tmpop=#2}}%update the function
+\newcommand{\assoc}[3][]{\mixfixa[#1]{}{#3}{}{#2}}
+\def\setegroup#1#2{\expandafter\def\csname #1@egroup\endcsname{#2}}
+\def\elide#1#2#3{\@ifundefined{#1@egroup}%
+{\def\@elevel{1000}
+\PackageError{presentation}{undefined egroup #1, assuming value 1000}%
+{When calling \protect\elide{#1}... the elision group #1 has be have\MessageBreak
+been set by \protect\setegroup before, e.g. by \protect\setegroup{an}{1000}.}}%
+{\edef\@elevel{\csname #1@egroup\endcsname}}%
+\ifnum\@elevel>#2\else{#3}\fi}
+\def\provideEdefault#1#2{\expandafter\def\csname#1@edefault\endcsname{#2}
+\@ifundefined{this@module}{}%
+{\expandafter\g@addto@macro\this@module{\expandafter\def\csname#1@edefault\endcsname{#2}}}}
+\def\setEdefault#1#2{\expandafter\def\csname #1@edfault\endcsname{#2}}
+\def\fromEcontext#1{\csname #1@edefault\endcsname}
+\def\MOD@namedef#1{\expandafter\def\csname MOD@name@#1\endcsname}
+\def\MOD@name[#1]#2{#2\def\@test{#2}\ifx\@test\empty\else\MOD@namedef{#1}{#2}\fi}
+\def\vname{\@ifnextchar[\MOD@name{\MOD@name[]}}
+\def\vnref#1{\csname MOD@name@#1\endcsname}
+\def\hrcr#1#2{\hyperlink{#1@\mod@id}{#2}}
+\endinput
+%%
+%% End of file `presentation.sty'.
diff --git a/Master/texmf-dist/tex/latex/stex/presentation.sty.ltxml b/Master/texmf-dist/tex/latex/stex/presentation.sty.ltxml
new file mode 100644
index 00000000000..cd153933e57
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/presentation.sty.ltxml
@@ -0,0 +1,197 @@
+
+# -*- CPERL -*-
+package LaTeXML::Package::Pool;
+use strict;
+use LaTeXML::Package;
+RequirePackage('keyval');
+DefKeyVal('mi','lbrack','Semiverbatim');
+DefKeyVal('mi','rbrack','Semiverbatim');
+DefKeyVal('mi','p','Semiverbatim');
+DefKeyVal('mi','pi','Semiverbatim');
+DefConstructor('\mixfixi OptionalKeyVals:mi {}{}{}',
+ "<omdoc:prototype>"
+ . "<om:OMA>"
+ . "<om:OMS cd='' name=''/>"##### need to get $cd and $name here.
+ . "<omdoc:expr name='arg'/>"
+ . "</om:OMA>"
+ ."</omdoc:prototype>"
+ ."<omdoc:rendering ?&KeyVal(#1,'p')(precedence='&KeyVal(#1,'p')')>"
+ . "<m:mrow>"
+ . "<ltx:Math><ltx:XMath>#2</ltx:XMath></ltx:Math>"
+ . "<omdoc:render name='arg' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "<ltx:Math><ltx:XMath>#4</ltx:XMath></ltx:Math>"
+ . "</m:mrow>"
+ ."</omdoc:rendering>",
+ mode=>'inline_math');
+DefConstructor('\mixfixa OptionalKeyVals:mi {}{}{}{}',
+ "<omdoc:prototype>"
+ . "<om:OMA>"
+ . "<om:OMS cd='' name=''/>"##### need to get $cd and $name here.
+ . "<omdoc:exprlist name='args'>"
+ . "<omdoc:expr name='arg'/>"
+ . "</omdoc:exprlist>"
+ . "</om:OMA>"
+ ."</omdoc:prototype>"
+ ."<omdoc:rendering ?&KeyVal(#1,'p')(precedence='&KeyVal(#1,'p')')>"
+ . "<m:mrow>"
+ . "<ltx:Math><ltx:XMath>#2</ltx:XMath></ltx:Math>"
+ . "<omdoc:iterate name='args' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "<omdoc:separator>"
+ . "<ltx:Math><ltx:XMath>#5</ltx:XMath></ltx:Math>"
+ . "</omdoc:separator>"
+ . "<omdoc:render name='arg' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "</omdoc:iterate>"
+ . "<ltx:Math><ltx:XMath>#4</ltx:XMath></ltx:Math>"
+ . "</m:mrow>"
+ ."</omdoc:rendering>",
+ mode=>'inline_math');
+DefKeyVal('mii','lbrack','Semiverbatim');
+DefKeyVal('mii','rbrack','Semiverbatim');
+DefKeyVal('mii','p','Semiverbatim');
+DefKeyVal('mii','pi','Semiverbatim');
+DefKeyVal('mii','pii','Semiverbatim');
+DefConstructor('\mixfixii OptionalKeyVals:mi {}{}{}{}{}',
+ "<omdoc:prototype>"
+ . "<om:OMA>"
+ . "<om:OMS cd='' name=''/>"##### need to get $cd and $name here.
+ . "<omdoc:expr name='arg1'/>"
+ . "<omdoc:expr name='arg2'/>"
+ . "</om:OMA>"
+ ."</omdoc:prototype>"
+ ."<omdoc:rendering ?&KeyVal(#1,'p')(precedence='&KeyVal(#1,'p')')>"
+ . "<m:mrow>"
+ . "<ltx:Math><ltx:XMath>#2</ltx:XMath></ltx:Math>"
+ . "<omdoc:render name='arg1' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "<ltx:Math><ltx:XMath>#4</ltx:XMath></ltx:Math>"
+ . "<omdoc:render name='arg2' ?&KeyVal(#1,'pii')(precedence='&KeyVal(#1,'pii')')/>"
+ . "<ltx:Math><ltx:XMath>#6</ltx:XMath></ltx:Math>"
+ . "</m:mrow>"
+ ."</omdoc:rendering>",
+ mode=>'inline_math');
+DefConstructor('\mixfixia OptionalKeyVals:mi {}{}{}{}{}{}',
+ "<omdoc:prototype>"
+ . "<om:OMA>"
+ . "<om:OMS cd='' name=''/>"##### need to get $cd and $name here.
+ . "<omdoc:expr name='arg1'/>"
+ . "<omdoc:exprlist name='args'>"
+ . "<omdoc:expr name='arg'/>"
+ . "</omdoc:exprlist>"
+ . "</om:OMA>"
+ ."</omdoc:prototype>"
+ ."<omdoc:rendering ?&KeyVal(#1,'p')(precedence='&KeyVal(#1,'p')')>"
+ . "<m:mrow>"
+ . "<ltx:Math><ltx:XMath>#2</ltx:XMath></ltx:Math>"
+ . "<omdoc:render name='arg1' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "<ltx:Math><ltx:XMath>#4</ltx:XMath></ltx:Math>"
+ . "<omdoc:iterate name='args' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "<omdoc:separator>"
+ . "<ltx:Math><ltx:XMath>#7</ltx:XMath></ltx:Math>"
+ . "</omdoc:separator>"
+ . "<omdoc:render name='arg' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "</omdoc:iterate>"
+ . "<ltx:Math><ltx:XMath>#6</ltx:XMath></ltx:Math>"
+ . "</m:mrow>"
+ ."</omdoc:rendering>",
+ mode=>'inline_math');
+DefConstructor('\mixfixai OptionalKeyVals:mi {}{}{}{}{}{}',
+ "<omdoc:prototype>"
+ . "<om:OMA>"
+ . "<om:OMS cd='' name=''/>"##### need to get $cd and $name here.
+ . "<omdoc:exprlist name='args'>"
+ . "<omdoc:expr name='arg'/>"
+ . "</omdoc:exprlist>"
+ . "<omdoc:expr name='arg2'/>"
+ . "</om:OMA>"
+ ."</omdoc:prototype>"
+ ."<omdoc:rendering ?&KeyVal(#1,'p')(precedence='&KeyVal(#1,'p')')>"
+ . "<m:mrow>"
+ . "<ltx:Math><ltx:XMath>#2</ltx:XMath></ltx:Math>"
+ . "<omdoc:iterate name='args' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "<omdoc:separator>"
+ . "<ltx:Math><ltx:XMath>#7</ltx:XMath></ltx:Math>"
+ . "</omdoc:separator>"
+ . "<omdoc:render name='arg' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "</omdoc:iterate>"
+ . "<ltx:Math><ltx:XMath>#4</ltx:XMath></ltx:Math>"
+ . "<omdoc:render name='arg2' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "<ltx:Math><ltx:XMath>#6</ltx:XMath></ltx:Math>"
+ . "</m:mrow>"
+ ."</omdoc:rendering>",
+ mode=>'inline_math');
+DefKeyVal('miii','lbrack','Semiverbatim');
+DefKeyVal('miii','rbrack','Semiverbatim');
+DefKeyVal('miii','p','Semiverbatim');
+DefKeyVal('miii','pi','Semiverbatim');
+DefKeyVal('miii','pii','Semiverbatim');
+DefKeyVal('miii','piii','Semiverbatim');
+DefConstructor('\mixfixiii OptionalKeyVals:mi {}{}{}{}{}{}{}',
+ "<omdoc:prototype>"
+ . "<om:OMA>"
+ . "<om:OMS cd='' name=''/>"##### need to get $cd and $name here.
+ . "<omdoc:expr name='arg1'/>"
+ . "<omdoc:expr name='arg2'/>"
+ . "<omdoc:expr name='arg3'/>"
+ . "</om:OMA>"
+ ."</omdoc:prototype>"
+ ."<omdoc:rendering ?&KeyVal(#1,'p')(precedence='&KeyVal(#1,'p')')>"
+ . "<m:mrow>"
+ . "<ltx:Math><ltx:XMath>#2</ltx:XMath></ltx:Math>"
+ . "<omdoc:render name='arg1' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "<ltx:Math><ltx:XMath>#4</ltx:XMath></ltx:Math>"
+ . "<omdoc:render name='arg2' ?&KeyVal(#1,'pii')(precedence='&KeyVal(#1,'pii')')/>"
+ . "<ltx:Math><ltx:XMath>#6</ltx:XMath></ltx:Math>"
+ . "<omdoc:render name='arg3' ?&KeyVal(#1,'piii')(precedence='&KeyVal(#1,'piii')')/>"
+ . "<ltx:Math><ltx:XMath>#8</ltx:XMath></ltx:Math>"
+ . "</m:mrow>"
+ ."</omdoc:rendering>",
+ mode=>'inline_math');
+DefConstructor('\prefix OptionalKeyVals:mi {}{}',
+ "<omdoc:prototype>"
+ . "<om:OMA>"
+ . "<om:OMS cd='' name=''/>"##### need to get $cd and $name here.
+ . "<omdoc:expr name='arg1'/>"
+ . "</om:OMA>"
+ ."</omdoc:prototype>"
+ ."<omdoc:rendering ?&KeyVal(#1,'p')(precedence='&KeyVal(#1,'p')')>"
+ . "<m:mrow>"
+ . "<ltx:Math><ltx:XMath>#2</ltx:XMath></ltx:Math>"
+ . "<omdoc:render name='arg' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "</m:mrow>"
+ ."</omdoc:rendering>",
+ mode=>'inline_math');
+DefConstructor('\postfix OptionalKeyVals:mi {}{}',
+ "<omdoc:prototype>"
+ . "<om:OMA>"
+ . "<om:OMS cd='' name=''/>"##### need to get $cd and $name here.
+ . "<omdoc:expr name='arg1'/>"
+ . "</om:OMA>"
+ ."</omdoc:prototype>"
+ ."<omdoc:rendering ?&KeyVal(#1,'p')(precedence='&KeyVal(#1,'p')')>"
+ . "<m:mrow>"
+ . "<omdoc:render name='arg' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "<ltx:Math><ltx:XMath>#2</ltx:XMath></ltx:Math>"
+ . "</m:mrow>"
+ ."</omdoc:rendering>",
+ mode=>'inline_math');
+DefMacro('\infix []{}{}{}','\mixfixii[#1]{}{#3}{#2}{#4}{}');
+DefConstructor('\assoc OptionalKeyVals:mi {}{}',
+ "<omdoc:prototype>"
+ . "<om:OMA>"
+ . "<om:OMS cd='' name=''/>"##### need to get $cd and $name here.
+ . "<omdoc:exprlist name='args'>"
+ . "<omdoc:expr name='arg'/>"
+ . "</omdoc:exprlist>"
+ . "</om:OMA>"
+ ."</omdoc:prototype>"
+ ."<omdoc:rendering ?&KeyVal(#1,'p')(precedence='&KeyVal(#1,'p')')>"
+ . "<m:mrow>"
+ . "<omdoc:iterate name='args' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "<omdoc:separator>"
+ . "<ltx:Math><ltx:XMath>#3</ltx:XMath></ltx:Math>"
+ . "</omdoc:separator>"
+ . "<omdoc:render name='arg' ?&KeyVal(#1,'pi')(precedence='&KeyVal(#1,'pi')')/>"
+ . "</omdoc:iterate>"
+ . "</m:mrow>"
+ ."</omdoc:rendering>",
+ mode=>'inline_math');
+1;
diff --git a/Master/texmf-dist/tex/latex/stex/sproof.sty b/Master/texmf-dist/tex/latex/stex/sproof.sty
new file mode 100644
index 00000000000..b2501b45948
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/sproof.sty
@@ -0,0 +1,112 @@
+%%
+%% This is file `sproof.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% sproof.dtx (with options: `package')
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{sproof}[2006/01/13 v0.9a Semantic Markup for Proofs]
+\RequirePackage{omdoc}[2007/09/09]
+\newif\ifjust@method\just@methodfalse
+\DeclareOption{method}{\just@methodtrue}
+\newif\ifspf@env\spf@envfalse
+\newif\ifspf@id\spf@idfalse
+\newif\ifspf@display\spf@displayfalse
+\DeclareOption{id}{\spf@idtrue\spf@envtrue}
+\DeclareOption{env}{\spf@envtrue}
+\DeclareOption{display}{\spf@displaytrue\spf@envtrue}
+\newif\ifspf@for\spf@forfalse
+\newif\ifspf@from\spf@forfalse
+\newif\ifspf@type\spf@typefalse
+\newif\ifspf@title\spf@titlefalse
+\newif\ifspf@proofend\spf@proofendtrue
+\newif\ifspf@continues\spf@continuesfalse
+\DeclareOption{for}{\spf@fortrue\spf@envtrue}
+\DeclareOption{from}{\spf@fromtrue\spf@envtrue}
+\DeclareOption{type}{\spf@typetrue\spf@envtrue}
+\DeclareOption{title}{\spf@titletrue\spf@envtrue}
+\DeclareOption{continues}{\spf@continuepfrue\spf@envtrue}
+\DeclareOption{noproofend}{\spf@proofendfalse\spf@envtrue}
+\def\spftrue{\spf@fortrue\spf@fromtrue\spf@typetrue\spf@continuepfrue}
+\DeclareOption{draft}{\spf@envtrue\just@methodtrue}
+\DeclareOption{all}{\spf@envtrue\just@medhodtrue}
+\ProcessOptions
+\define@key{spf}{id}{\def\spf@id{#1}}
+\define@key{spf}{display}{\def\spf@display{#1}}
+\define@key{spf}{for}{\def\spf@for{#1}}
+\define@key{spf}{from}{\def\spf@from{#1}}
+\define@key{spf}{sproofend}{\spf@proofendtrue\def\sproof@box{#1}}
+\define@key{spf}{noproofend}[imeanit]{\spf@proofendfalse}
+\define@key{spf}{type}{\def\spf@type{#1}}
+\define@key{spf}{title}{\def\spf@title{#1}}
+\define@key{spf}{continues}{\def\spf@continues{#1}}
+\def\show@st@keys@aux{%
+\@ifundefined{spf@id}{}{\ifspf@id{id=\spf@id},\fi}%
+\@ifundefined{spf@display}{}{\ifspf@display{display=\spf@display}\fi}}
+\def\clear@pf@keys{\let\spf@id=\relax\let\spf@display=\relax}
+\def\show@pf@keys@aux{%
+\@ifundefined{spf@for}{}{\ifspf@for{for=\spf@for},\fi}%
+\@ifundefined{spf@from}{}{\ifspf@from{from=\spf@from},\fi}%
+\@ifundefined{spf@prefix}{}{\ifspf@prefix{prefix=\spf@prefix},\fi}%
+\@ifundefined{spf@type}{}{\ifspf@type{type=\spf@type},\fi}%
+\@ifundefined{spf@title}{}{\ifspf@title{title=\spf@title},\fi}%
+\@ifundefined{spf@continues}{}{\ifspf@continues{continues=\spf@continues}\fi}}
+\def\show@pf@keys#1{\footnote{#1[\show@pf@keys@aux\show@pf@keys@aux]}%
+\clear@pf@keys\clear@pf@keys}
+\def\clear@pf@keys{\let\spf@for=\relax\let\spf@from=\relax\let\spf@prefix=\relax%
+\let\spf@type=\relax\let\spf@title=\relax\let\spf@continues=\relax}
+\def\spf@flow{flow}
+\newenvironment{pst@with@label}[1]{\edef\pst@label{#1}\advance\count10 by 1\count\count10=1}
+{\advance\count10 by -1}
+\def\the@pst@label{\pst@label.\number\count\count10}
+\def\next@pst@label{\global\advance\count\count10 by 1}
+\def\sproof@box{\hbox{\vrule\vbox{\hrule width 6 pt\vskip 6pt\hrule}\vrule}}
+\def\sproofend{\ifspf@proofend\hfil\null\nobreak\hfill\sproof@box\par\smallskip\fi}
+\def\sProofEndSymbol#1{\def\sproof@box{#1}}
+\newenvironment{@proof}[2][]{\setkeys{spf}{#1}
+\count10=10\ifx\spf@display\spf@flow\else{\stDMemph{Proof}:}\fi%
+\ifspf@env\show@pf@keys{sproof}\fi{ #2}%
+\def\pst@label{}\newcount\pst@count% initialize the labeling mechanism
+\begin{description}\begin{pst@with@label}{P}}
+{\end{pst@with@label}\end{description}}
+\newenvironment{sproof}[2][]{\begin{@proof}[#1]{#2}}{\sproofend\end{@proof}}
+\newcommand{\sproofidea}[2][]{{\stDMemph{Proof Idea}:} #2\sproofend}
+\newenvironment{spfstep}[1][]{\setkeys{spf}{#1}
+\ifx\spf@display\spf@flow\else\item[\the@pst@label]\fi
+\@ifundefined{spf@title}{}{(\stDMemph{\spf@title})}%
+\ifspf@env\show@pf@keys{spfstep}\fi}
+{\next@pst@label}
+\newenvironment{sproofcomment}[1][]{\setkeys{spf}{#1}
+\ifx\spf@display\spf@flow\else\item[\the@pst@label]\fi
+\ifspf@env\show@pf@keys{sproofcomment}\fi}
+{\next@pst@label}
+\newenvironment{spfcases}[2][]{\setkeys{spf}{#1}
+\def\@test{#2}\ifx\@test\empty\else
+\ifx\spf@display\spf@flow {#2}\else\item[\the@pst@label]{#2} \fi\fi
+\ifspf@env\show@pf@keys{spfcases}\fi
+\begin{pst@with@label}{\pst@label.\number\count\count10}}
+{\end{pst@with@label}\next@pst@label}
+\newenvironment{spfcase}[2][]{\setkeys{spf}{#1}
+\ifx\spf@display\spf@flow\else\item[\the@pst@label]\fi
+\def\@test{#2}\ifx\@test\empty\else{\stDMemph{#2}:}\fi
+\ifspf@env\show@pf@keys{spfcase}\fi
+\begin{pst@with@label}{\pst@label.\number\count\count10}}
+{\ifx\spf@display\spf@flow\else\sproofend\fi\end{pst@with@label}\next@pst@label}
+\newenvironment{subproof}{\begin{pst@with@label}{\pst@label.\number\count\count10}}
+{\ifx\spf@display\spf@flow\else\sproofend\fi\end{pst@with@label}}
+\define@key{just}{id}{\def\just@id{#1}}
+\define@key{just}{method}{\def\just@method{#1}}
+\def\show@just@keys#1{\footnote{#1[\show@pf@keys@aux\show@just@keys@aux]}}%
+\def\show@just@keys@aux{%
+\@ifundefined{just@method}{\relax}{\ifjust@method{method=\just@method},\fi}%
+\clear@pf@keys\clear@just@keys}
+\def\clear@just@keys{\let\just@method=\relax}
+\newenvironment{justification}[1][]{\ifspf@env\setkeys{just}{#1}
+ \show@just@keys{justification}\fi}{}
+\newcommand{\premise}[2][]{#2}
+\newcommand{\justarg}[2][]{#2}
+\endinput
+%%
+%% End of file `sproof.sty'.
diff --git a/Master/texmf-dist/tex/latex/stex/sproof.sty.ltxml b/Master/texmf-dist/tex/latex/stex/sproof.sty.ltxml
new file mode 100644
index 00000000000..afd3433e9b8
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/sproof.sty.ltxml
@@ -0,0 +1,107 @@
+# -*- CPERL -*-
+package LaTeXML::Package::Pool;
+use strict;
+use LaTeXML::Package;
+RequirePackage('omdoc');
+DefKeyVal('pf','id','Semiverbatim');
+DefKeyVal('pf','display','Semiverbatim'); # not used at the moment
+DefKeyVal('pf','for','Semiverbatim');
+DefKeyVal('pf','from','Semiverbatim');
+DefKeyVal('pf','proofend','Semiverbatim');
+DefKeyVal('pf','noproofend','Semiverbatim');
+DefKeyVal('pf','type','Semiverbatim');
+DefKeyVal('pf','title','Semiverbatim');
+DefKeyVal('pf','continues','Semiverbatim');
+DefConstructor('\sproofend',"");
+DefEnvironment('{sproof} OptionalKeyVals:pf{}',
+ "<omdoc:proof ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()>\n"
+ . "?#2(<omdoc:omtext><omdoc:CMP><omdoc:p>#2</omdoc:p></omdoc:CMP></omdoc:omtext>\n)()"
+ . "#body"
+ . "</omdoc:proof>\n");
+DefEnvironment('{sproofidea} OptionalKeyVals:pf {}',
+ "<omdoc:proof ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()>\n"
+ . "<omdoc:omtext><omdoc:CMP><omdoc:p>#2</omdoc:p></omdoc:CMP></omdoc:omtext>\n"
+ . "</omdoc:proof>\n");
+DefCMPEnvironment('{spfstep} OptionalKeyVals:pf',
+ "<omdoc:derive ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()>"
+ . "<omdoc:CMP><omdoc:p>#body</omdoc:p></omdoc:CMP>"
+ . "</omdoc:derive>\n");
+DefCMPEnvironment('{sproofcomment} OptionalKeyVals:pf',
+ "<omdoc:omtext ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()>"
+ . "<omdoc:CMP><omdoc:p>#body</omdoc:p></omdoc:CMP>"
+ . "</omdoc:omtext>");
+DefEnvironment('{spfcases} OptionalKeyVals:pf {}',
+ "<omdoc:derive ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()>\n"
+ . "<omdoc:CMP><omdoc:p>#2</omdoc:p></omdoc:CMP>\n"
+ . "<omdoc:method xref='#proof-by-cases'>"
+ . "#body"
+ . "</omdoc:method>"
+ . "</omdoc:derive>\n");
+DefEnvironment('{spfcase} OptionalKeyVals:pf{}',
+ "<omdoc:proof ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()>\n"
+ . "?#2(<omdoc:omtext><omdoc:CMP><omdoc:p>#2</omdoc:p></omdoc:CMP></omdoc:omtext>\n)()"
+ . "#body"
+ . "</omdoc:proof>\n");
+DefEnvironment('{subproof}',
+ "<omdoc:proof>\n #body\n</omdoc:proof>\n");
+DefKeyVal('just','id','Semiverbatim');
+DefKeyVal('just','method','Semiverbatim');
+DefKeyVal('just','premises','Semiverbatim');
+DefKeyVal('just','args','Semiverbatim');
+sub extractBodyText {
+ my ($box, $remove) = @_;
+ my $str = '';
+ my @boxes = $box->unlist;
+ foreach my $b(@boxes) {
+ my $s = '';
+ if ($b =~ /LaTeXML::Whatsit/) {
+ my $body = $b->getBody;
+ $s = $body ? extractBodyText($body, $remove) : '';
+ } elsif ($b =~ /LaTeXML::Box/) {
+ $s = $b->toString || '';
+ @{$b}[0] = '' if $remove; }
+ $str .= $s; }
+ $str =~ s/\s+/ /g;
+ $str; }
+
+DefEnvironment('{justification} OptionalKeyVals:just', sub {
+ my ($doc, $keys, %props) = @_;
+ my $text = extractBodyText($props{body}, 1);
+ my $node = LookupValue('_LastSeenCMP');
+ $node->appendText($text) if $node;
+ my $method = $keys ? $keys->getValue('method') : undef;
+ $doc->openElement("omdoc:method", $method ? (xref => $method) : ());
+ $doc->absorb($props{body}) if $props{body};
+ $doc->closeElement("omdoc:method");
+ return; });
+DefMacro('\premise[]{}', sub {
+ my ($xref, $text) = ($_[1], $_[2]);
+ my @res = (T_CS('\premise@content'));
+ push(@res, T_OTHER('['), $xref->unlist, T_OTHER(']')) if $xref;
+ push(@res, T_SPACE, $text->unlist) if $text;
+ @res; });
+DefConstructor('\premise@content[]', "<omdoc:premise xref='#1'/>");
+DefMacro('\justarg[]{}', sub { (($_[1] ? $_[1]->unlist : ()),
+T_SPACE, $_[2]->unlist, T_SPACE); });
+
+Tag('omdoc:derive', afterClose=>sub {
+ my ($doc, $node) = @_;
+ my @children = grep($_->nodeType == XML_ELEMENT_NODE, $node->childNodes);
+ my $firstCMP = undef;
+ foreach my $child(@children) {
+ next unless ($child->localname || '') eq 'CMP';
+ if ($child->hasChildNodes()) {
+ next unless $#{$child->childNodes} == 0;
+ next unless $child->firstChild->nodeType == XML_TEXT_NODE; }
+
+ if ($firstCMP) {
+ $firstCMP->appendText($child->textContent);
+ $node->removeChild($child);
+ } else { $firstCMP = $child; }
+ }
+ });
+
+Tag('omdoc:proof',afterOpen=>\&numberIt);
+Tag('omdoc:derive',afterOpen=>\&numberIt);
+Tag('omdoc:method',afterOpen=>\&numberIt);
+1;
diff --git a/Master/texmf-dist/tex/latex/stex/statements.sty b/Master/texmf-dist/tex/latex/stex/statements.sty
new file mode 100644
index 00000000000..0ae7cda7c74
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/statements.sty
@@ -0,0 +1,85 @@
+%%
+%% This is file `statements.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% statements.dtx (with options: `package')
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{statements}[2007/09/09 v0.9d Semantic Markup for Statements]
+\newif\ifst@env\st@envfalse
+\newif\ifst@id\st@idfalse
+\newif\ifst@display\st@displayfalse
+\DeclareOption{id}{\st@idtrue\st@envtrue}
+\DeclareOption{env}{\st@envtrue}
+\DeclareOption{display}{\st@displaytrue\st@envtrue}
+\newif\ifstat@for\stat@forfalse
+\newif\ifstat@from\stat@forfalse
+\newif\ifstat@type\stat@typefalse
+\newif\ifstat@title\stat@titlefalse
+\newif\ifstat@continues\stat@continuesfalse
+\DeclareOption{for}{\stat@fortrue\st@envtrue}
+\DeclareOption{from}{\stat@fromtrue\st@envtrue}
+\DeclareOption{type}{\stat@typetrue\st@envtrue}
+\DeclareOption{title}{\stat@titletrue\st@envtrue}
+\DeclareOption{continues}{\stat@continuestrue\st@envtrue}
+\def\stattrue{\stat@fortrue\stat@fromtrue\stat@typetrue\stat@continuestrue}
+\DeclareOption{draft}{\st@envtrue\st@idtrue\stat@fortrue\stat@fromtrue\typetrue\justtrue}
+\DeclareOption{all}{\st@envtrue\stattrue\justtrue}
+\ProcessOptions
+\RequirePackage{omdoc}[2007/09/09]
+\def\define@statement@env#1#2{
+\newenvironment{#1}[1][]{\setkeys{stat}{##1}
+\ifx\st@display\st@flow\else\stDMemph{#2}:\fi%
+\@ifundefined{stat@title}{}%
+{\space\ifx\st@display\st@flow\else(\fi\stDMemph{\stat@title}\ifx\st@display\st@flow:\else)\par\fi}\space%
+\ifst@env\show@stat@keys{#1}\fi\csname st@#1@initialize\endcsname}
+{\csname st@#1@terminate\endcsname}}
+\newenvironment{assertion}[1][]{\setkeys{stat}{#1}
+\ifx\st@display\st@flow\else{\stDMemph{\stat@type}:}\fi%
+\@ifundefined{stat@title}{~}{~(\stDMemph{\stat@title})\par}%
+\ifst@env\show@stat@keys{#1}\fi\em}{}
+\newenvironment{simpleDef}[1][]{\setkeys{stat}{#1}
+\ifx\st@display\st@flow\else{\stDMemph{Definition}:}\fi%
+\@ifundefined{stat@title}{~}{~(\stDMemph{\stat@title})\par}%
+\ifst@env\show@stat@keys{#1}\fi}{}
+\newenvironment{PatternDef}[1][]{\setkeys{stat}{#1}
+\ifx\st@display\st@flow\else{\stDMemph{Definition}:}\fi%
+\@ifundefined{stat@title}{~}{~(\stDMemph{\stat@title})\par}%
+\ifst@env\show@stat@keys{#1}\fi}{}
+\newenvironment{PatternRule}[1]{#1$\colon=$}{}
+\newenvironment{PatternCMP}{}{}
+\newenvironment{RecDef}[1][]{\setkeys{stat}{#1}
+\ifx\st@display\st@flow\else{\stDMemph{Definition}:}\fi%
+\@ifundefined{stat@title}{~}{~(\stDMemph{\stat@title})\par}%
+\ifst@env\show@stat@keys{#1}\fi}{}
+\def\st@example@initialize{}\def\st@example@terminate{}
+\define@statement@env{example}{Example}
+\def\st@axiom@initialize{}\def\st@axiom@terminate{}
+\define@statement@env{axiom}{Axiom}
+\define@key{consymb}{type}{\def\consymb@type{#1}}
+\define@key{consymb}{title}{\def\consymb@title{#1}}
+\define@key{consymb}{name}{\def\consymb@name{#1}}
+\def\consymb@type{Symbol}
+\newenvironment{consymb}[1][]{\setkeys{consymb}{#1}
+\ifx\st@display\st@flow\else{\stDMemph{\consymb@type} \consymb@name:}\fi%
+\@ifundefined{consymb@title}{~}{~(\stDMemph{\consymb@title})\par}}{}
+\newcommand{\symtype}[2]{Type (#1): #2}
+\def\st@definition@initialize{%
+\newcommand{\notatiendum}[2][]{\notemph{##2}}
+\newcommand{\definiendum}[2][]{\defemph{##2}}}
+\def\st@definition@terminate{}
+\define@statement@env{definition}{Definition}
+\def\notemph#1{{\bf{#1}}}
+\def\st@notation@initialize{\newcommand{\notatiendum}[2][]{\notemph{##2}}}
+\def\st@notation@terminate{}
+\define@statement@env{notation}{Notation}
+\def\termin{\@ifnextchar[{\@termin}{\@termin[]}}
+\def\@termin[#1]#2{{\termemph{\index*{#2}}}}
+\providecommand{\termemph}[1]{#1}
+\providecommand{\defemph}[1]{{\bf{#1}}}
+\providecommand{\stDMemph}[1]{{\bf{#1}}}
+\endinput
+%%
+%% End of file `statements.sty'.
diff --git a/Master/texmf-dist/tex/latex/stex/statements.sty.ltxml b/Master/texmf-dist/tex/latex/stex/statements.sty.ltxml
new file mode 100644
index 00000000000..d938af97167
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/statements.sty.ltxml
@@ -0,0 +1,142 @@
+# -*- CPERL -*-
+package LaTeXML::Package::Pool;
+use strict;
+use LaTeXML::Package;
+RequirePackage('omdoc');
+RequirePackage('myindex');
+DefCMPEnvironment('{assertion} OptionalKeyVals:stat',
+ "<omdoc:assertion ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')() type='&KeyVal(#1,'type')'>"
+ . "?&KeyVal(#1,'title')(<omdoc:metadata><dc:title>&KeyVal(#1,'title')</dc:title></omdoc:metadata>)()"
+ . "<omdoc:CMP><omdoc:p>#body</omdoc:p></omdoc:CMP>"
+ ."</omdoc:assertion>\n");
+DefCMPEnvironment('{simpleDef} OptionalKeyVals:stat',
+ "?&KeyVal(#1,'for')(<omdoc:symbol name='&KeyVal(#1,'for')'/>)()"
+ . "<omdoc:definition type='simple' "
+ . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id').def')()"
+ . "?&KeyVal(#1,'for')(for='&KeyVal(#1,'for')')()>"
+ . "?&KeyVal(#1,'title')(<omdoc:metadata><dc:title>&KeyVal(#1,'title')</dc:title></omdoc:metadata>)()"
+ . "<omdoc:CMP><omdoc:p>#body</omdoc:p></omdoc:CMP>"
+ . "</omdoc:definition>\n");
+DefCMPEnvironment('{PatternDef} OptionalKeyVals:stat',
+ "?&KeyVal(#1,'for')(<omdoc:symbol name='&KeyVal(#1,'for')'/>)()"
+ . "<omdoc:definition type='pattern' "
+ . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id').def')()"
+ . "?&KeyVal(#1,'for')(for='&KeyVal(#1,'for')')()>"
+ . "?&KeyVal(#1,'title')(<omdoc:metadata><dc:title>&KeyVal(#1,'title')</dc:title></omdoc:metadata>)()"
+ . "#body"
+ . "</omdoc:definition>\n");
+DefEnvironment('{PatternRule}{}',
+ "<omdoc:requation>#1 #body</omdoc:requation>");
+DefEnvironment('{PatternCMP}{}',
+ "<omdoc:CMP>#body</omdoc:CMP>");
+DefEnvironment('{RecDef} OptionalKeyVals:stat',
+ "?&KeyVal(#1,'for')(<omdoc:symbol name='&KeyVal(#1,'for')'/>)()"
+ . "<omdoc:definition type='inductive' "
+ . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id').def')()"
+ . "?&KeyVal(#1,'for')(for='&KeyVal(#1,'for')')()>"
+ . "?&KeyVal(#1,'title')(<omdoc:metadata><dc:title>&KeyVal(#1,'title')</dc:title></omdoc:metadata>)()"
+ . "<omdoc:CMP><omdoc:p>#body</omdoc:p></omdoc:CMP>"
+ . "</omdoc:definition>\n");
+DefCMPEnvironment('{example} OptionalKeyVals:stat',
+ "<omdoc:example "
+ . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')() "
+ . "for='&KeyVal(#1,'for')'>"
+ . "<omdoc:CMP><omdoc:p>#body</omdoc:p></omdoc:CMP>"
+ . "</omdoc:example>\n");
+DefCMPEnvironment('{axiom} OptionalKeyVals:stat',
+ "<omdoc:axiom ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()>"
+ . "?&KeyVal(#1,'title')(<omdoc:metadata><dc:title>&KeyVal(#1,'title')</dc:title></omdoc:metadata>)()"
+ . "<omdoc:CMP><omdoc:p>#body</omdoc:p></omdoc:CMP>"
+ . "</omdoc:axiom>\n");
+DefEnvironment('{consymb} OptionalKeyVals:stat',
+ "<omdoc:symbol ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()"
+ . "name='&KeyVal(#1,'name')'>"
+ . "<omdoc:metadata>"
+ . "<dc:description>"
+ . "#body"
+ . "</dc:description>"
+ . "</omdoc:metadata>"
+ . "</omdoc:symbol>\n");
+DefConstructor('\symtype{}{}',"<omdoc:type system='#1'>#2</omdoc:type>");
+DefCMPEnvironment('{definition} OptionalKeyVals:stat', sub {
+ my ($doc, $keyvals, %props) = @_;
+ my @symbols = @{$props{defs} || []};
+ foreach my $symb(@symbols) {
+ $doc->openElement('omdoc:symbol', name=>$symb);
+ $doc->closeElement('omdoc:symbol'); }
+ my %attrs = ();
+ my $id = $keyvals->getValue('id') if $keyvals;
+ $attrs{'xml:id'} = $id if $id;
+ my $ffor = $keyvals->getValue('for') if $keyvals;
+ my $for = $ffor . join(' ',@symbols) if $ffor;
+ $attrs{for} = $for if $for;
+ $doc->openElement('omdoc:definition', %attrs);
+ my $title = $keyvals->getValue('title') if $keyvals;
+ if ($title) {
+ $doc->openElement('omdoc:metadata');
+ $doc->openElement('dc:title');
+ $doc->absorb($title);
+ $doc->closeElement('dc:title');
+ $doc->closeElement('omdoc:metadata'); }
+ $doc->openElement('omdoc:CMP');
+ $doc->openElement('omdoc:p');
+ $doc->absorb($props{body}) if $props{body};
+ $doc->closeElement('omdoc:p');
+ $doc->closeElement('omdoc:CMP');
+ $doc->closeElement('omdoc:definition');
+ return; },
+ afterDigestBegin=>sub {
+ my ($stomach, $whatsit) = @_;
+ my @symbols = ();
+ $whatsit->setProperty(defs=>\@symbols);
+ AssignValue('defs', \@symbols, 'global');
+ return; },
+ afterDigest => sub {
+ AssignValue('defs', undef, 'global');
+ return; });
+
+DefConstructor('\definiendum[]{}',
+ "<omdoc:term role='definiendum' name='#1' cd='#theory'>#2</omdoc:term>",
+ afterDigest => sub {
+ my ($stomach, $whatsit) = @_;
+ my $addr = LookupValue('defs');
+ push(@$addr, $whatsit->getArg(1)->toString) if $addr;
+ $whatsit->setProperty(theory=>LookupValue('current_module'));
+ return; });
+DefMacro('\defin{}', sub {
+ my @args = (T_BEGIN, $_[1]->unlist, T_END);
+ (T_CS('\definiendum'), T_OTHER('['), $_[1]->unlist, T_OTHER(']'), @args, T_CS('\defin@index'), @args); });
+DefMacro('\twindef{}{}', sub {
+ my @args = (T_BEGIN, $_[1]->unlist, T_END, T_BEGIN, $_[2]->unlist, T_END);
+ (T_CS('\twindef@def'), @args, T_CS('\twindef@index'), @args); });
+DefMacro('\atwindef{}{}{}', sub {
+ my @args = (T_BEGIN, $_[1]->unlist, T_END, T_BEGIN, $_[2]->unlist, T_END,
+ T_BEGIN, $_[3]->unlist, T_END);
+ (T_CS('\atwindef@def'), @args, T_CS('\atwindef@index'), @args); });
+DefConstructor('\twindef@def{}{}',
+ "<omdoc:term role='definiendum' name='#1-#2' cd='#theory'>#1 #2</omdoc:term>",
+ afterDigest => sub {
+ my ($stomach, $whatsit) = @_;
+ my $addr = LookupValue('defs');
+ push(@$addr, $whatsit->getArg(1)->toString.'-'.$whatsit->getArg(2)->toString) if $addr;
+ $whatsit->setProperty(theory=>LookupValue('current_module'));
+ return; },
+ alias => '');
+DefConstructor('\atwindef@def{}{}{}',
+ "<omdoc:term role='definiendum' name='#1-#2-#3' cd='#theory'>#1 #2 #3</omdoc:term>",
+ afterDigest => sub {
+ my ($stomach, $whatsit) = @_;
+ my $addr = LookupValue('defs');
+ push(@$addr, $whatsit->getArg(1)->toString.'-'.$whatsit->getArg(2)->toString
+ .'-'.$whatsit->getArg(3)->toString) if $addr;
+ $whatsit->setProperty(theory=>LookupValue('current_module'));
+ return; },
+ alias => '');
+DefCMPEnvironment('{notation} OptionalKeyVals:stat',
+ "<omdoc:omtext type='notation' ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id').not')()>"
+ . "?&KeyVal(#1,'title')(<omdoc:metadata><dc:title>&KeyVal(#1,'title')</dc:title></omdoc:metadata>)()"
+ . "<omdoc:CMP><omdoc:p>#body</omdoc:p></omdoc:CMP>"
+ . "</omdoc:omtext>\n");
+DefConstructor('\notatiendum OptionalKeyVals:notation {}',
+ "<omdoc:phrase type='notation'>#1</omdoc:phrase>");
+1;
diff --git a/Master/texmf-dist/tex/latex/stex/stex.sty b/Master/texmf-dist/tex/latex/stex/stex.sty
new file mode 100644
index 00000000000..518540f8bca
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/stex.sty
@@ -0,0 +1,20 @@
+%%
+%% This is file `stex.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% stex.dtx (with options: `package')
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{stex}[2006/01/13 v0.9a Semantic Markup]
+\def\stex{{\raisebox{-.5ex}S\kern-.5ex\TeX}}
+\def\sTeX{\stex}
+\usepackage{modules}
+\usepackage{statements}
+\usepackage{sproof}
+\usepackage{omdoc}
+\usepackage{presentation}
+\endinput
+%%
+%% End of file `stex.sty'.