@totemorg/mathjx
v3.13.0
Published
Extended mathjs
Downloads
13
Readme
MATHJX
Extends MathJS with the following scripting language:
if TEST
DO
elseif TEST
DO
:
else
DO
end
switch TEST
case TEST
DO
:
default
DO
end
try
DO
catch
DO
end
for INDEX
DO
end
while TEST
DO
end
until TEST
DO
end
when EVENT
DO
end
def f=(x,y, [a,b, ...], {u,v, ...}, ...)
DO
end
Inline functions are supported using fat-arrows:
(x,y, [a,b, ...], {u,v, ...}, ...) => {
DO
}
Because MathJS intrinsically protects against lax Matlab expressions, term-wise
evaluation of intrinsically singular functions like cos
must use Cos([x,y,z...])
or map([x,y,z,...], cos)
.
Transposes are likewise strict, so [x,y,z,...]'
, [[x,y,z,...]]'
, and [x;y;z;...]'
produce [x,y,z,...]
, [x;y;z,...]
, and
[x,y,z,...]
, respectively.
Multiple MathJX lines be coded using DO \ DO \ ...
.
Evaluate MathJX scripts using:
$( "script", ctx => { /* optional callback */
});
MathJX supports both MathJS tensors and native JS-style tensors:
var
A = $( [N1], function $ ( i, A ) { /*...*/ } ), // rank 1
B = $( [N1,N2], function $$ (i,j, B ) { /*...*/ } ), // rank 2
C = $( [N1,N2,...NK], ( [i,j,...], C ) => { /*...*/ } ) // rank K
where initialization callbacks are optional. Tensors are similarly indexed using:
A.$( (i, A) => { /*...*/ } ); // rank 1
B.$$( (i,j, B) => { /*...*/ } ); // rank 2
C.for( [i,j,...], C ) { /*...*/ } ); // rank K
Install
npm install @totemorg/mathjx # Install
npm update
Start
npm run start # Start/Unit test
Manage
npm run verminor # Roll minor version
npm run vermajor # Roll major version
npm run redoc # Regen documentation
npm run pubminor # republish as minor version
npm run pubmajor # republish as major version
Usage
Acquire and optionally configure MATHJX as follows:
import { JX } from "@totemorg/mathjx";
JX.config({
key: value, // set key
"key.key": value, // indexed set
"key.key.": value // indexed append
});
where configuration keys follow ENUMS deep copy conventions. See the Program Reference for usage examples.
Program Reference
switch TEST case TEST BLOCK : default TEST BLOCK end
try BLOCK catch BLOCK end
for INDEX BLOCK end
while TEST BLOCK end
until TEST BLOCK end
when EVENT BLOCK end
def f=(x,y,...) BLOCK end
MATHJX
Process supplied mathjx-script by reducing the script to a mathjs script using the following language model:
if TEST
BLOCK
elseif TEST
BLOCK
:
else
BLOCK
end
switch TEST
case TEST
BLOCK
:
default TEST
BLOCK
end
try
BLOCK
catch
BLOCK
end
for INDEX
BLOCK
end
while TEST
BLOCK
end
until TEST
BLOCK
end
when EVENT
BLOCK
end
def f=(x,y,...)
BLOCK
end
Inline functions are also supported using fat-arrows:
(x,y,...) => {
BLOCK
}
Requires: module:mathjs, module:enums, module:cp
Author: ACMESDS
| Param | Type | Description | | --- | --- | --- | | pgm | String | Array | Script to reduce and execute. Use an Array to bypass default eol-tokenization. | | blks | Array | Stash fo code blocks; initially []. | | idx | Number | Current line index to start parsing; initially 0. | | lang | Object | Language model; see code herein. |
Example (js-reduction)
\\ program
def f=(x,y)
f=x+y;
end
\\ reduces to
def($ctx[1])
\\ with resulting context
[ { test: 'f=(x,y)', code: 'f=x+y\n' } ]
Example (js-reduction)
\\ program
for i
i1
i2
for j
j1; j2;
while u\u1\end
end
end
\\ reduces to
for($ctx[3])
\\ with resulting context
[
{ test: 'u', code: 'u1\n' },
{ test: 'j', code: 'j1; j2;\nwhile($ctx[1])' },
{ test: 'i', code: 'i1\ni2\nfor($ctx[2])' }
]
Example (js-reduction)
\\ program
a1="this;is;a;test";
\\ reduces to
a1=$ctx[1];
\\ with resulting context
[ 'this;is;a;test' ]
Example (js-reduction)
\\ program
somefn(1,2, \def f=(x,y)
print("x=%f and y=%f",x,y);
end
)
\\ and program
somefn(1,2, \(x,y) => {
print("x=%f and y=%f",x,y);
})
\\ reduces to
def($ctx[2]))
\\ with resulting context
[ 'x=%f and y=%f', { test: 'f=(x,y)', code: 'print($ctx[1],x,y);\n' } ]
Example (js-reduction)
\\ program
def f=(x,y)
f=x+y;
end
disp(f(1,2));
\\ reduces to
def($ctx[1]);disp(f(1,2));
\\ with resulting context
[ { test: 'f=(x,y)', code: 'f=x+y;\n' } ]
Example (js-reduction)
\\ program
def f=([a,b],{x,y})
f=x+y+a+b;
end
disp(f([4,5],{x:10,y:20}));
\\ reduces to
def($ctx[1]);disp(f([4,5],{x:10,y:20}));
\\ with resulting context
[ { test: 'f=([a,b],{x,y})', code: 'f=x+y+a+b;\n' } ]
MATHJX~_Errors
Client error messages
Kind: inner constant of MATHJX
_Errors.badBlock
Kind: static property of _Errors
_Errors.noTerm
Kind: static property of _Errors
array
JX
JX~config(opts)
Configure MathJX with supplied options hash.
Kind: inner method of JX
| Param | Type | Description | | --- | --- | --- | | opts | Object | Options hash with keys following the deep-copy conventions |
JX~get()
Kind: inner method of JX
JX~toMathJS()
Return MathJS tensor handle.
Kind: inner method of JX
JX~toJS()
Return JS tensor handle.
Kind: inner method of JX
JX~isDefined()
Kind: inner method of JX
JX~rank()
Return rank of x.
Kind: inner method of JX
JX~size()
Return size of x.
Kind: inner method of JX
JX~len()
Return length of x.
Kind: inner method of JX
JX~disp()
Kind: inner method of JX
JX~print()
Kind: inner method of JX
JX~def()
Kind: inner method of JX
JX~for()
Kind: inner method of JX
JX~while()
Kind: inner method of JX
JX~if()
Kind: inner method of JX
JX~try()
Kind: inner method of JX
JX~switch()
Kind: inner method of JX
JX~when()
Kind: inner method of JX
JX~until()
Kind: inner method of JX
Contacting, Contributing, Following
Feel free to
- submit and status TOTEM issues
- contribute to TOTEM notebooks
- revise TOTEM requirements
- browse TOTEM holdings
- or follow TOTEM milestones
License
© 2012 ACMESDS