lib/gollum/frontend/public/javascript/MathJax/jax/input/TeX/jax.js in gollum-1.1.1 vs lib/gollum/frontend/public/javascript/MathJax/jax/input/TeX/jax.js in gollum-1.2.0

- old
+ new

@@ -1,1652 +1,19 @@ -/************************************************************* - * - * MathJax/jax/input/TeX/jax.js +/* + * ../SourceForge/trunk/mathjax/jax/input/TeX/jax.js * - * Implements the TeX InputJax that reads mathematics in - * TeX and LaTeX format and converts it to the MML ElementJax - * internal format. + * Copyright (c) 2010 Design Science, Inc. * - * --------------------------------------------------------------------- - * - * Copyright (c) 2009-2010 Design Science, Inc. + * Part of the MathJax library. + * See http://www.mathjax.org for details. * - * Licensed under the Apache License, Version 2.0 (the "License"); + * Licensed under the Apache License, Version 2.0; * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. */ -(function (TEX) { - var TRUE = true, FALSE = false, MML; - - TEX.Stack = MathJax.Object.Subclass({ - Init: function (env) { - this.global = {}; - this.data = [STACKITEM.start().With({global: this.global})]; - if (env) {this.data[0].env = env} - this.env = this.data[0].env; - }, - Push: function () { - var i, m, item, top; - for (i = 0, m = arguments.length; i < m; i++) { - item = arguments[i]; - if (item instanceof MML.mbase) {item = STACKITEM.mml(item)} - item.global = this.global; - top = (this.data.length ? this.Top().checkItem(item) : TRUE); - if (top instanceof Array) {this.Pop(); this.Push.apply(this,top)} - else if (top instanceof STACKITEM) {this.Pop(); this.Push(top)} - else if (top) { - this.data.push(item); - if (item.env) { - for (var id in this.env) - {if (this.env.hasOwnProperty(id)) {item.env[id] = this.env[id]}} - this.env = item.env; - } else {item.env = this.env} - } - } - }, - Pop: function () { - var item = this.data.pop(); if (!item.isOpen) {delete item.env} - this.env = (this.data.length ? this.Top().env : {}); - return item; - }, - Top: function (n) { - if (n == null) {n = 1} - if (this.data.length < n) {return null} - return this.data[this.data.length-n]; - }, - Prev: function (noPop) { - var top = this.Top(); - if (noPop) {return top.data[top.data.length-1]} - else {return top.Pop()} - }, - toString: function () {return "stack[\n "+this.data.join("\n ")+"\n]"} - }); - - var STACKITEM = TEX.Stack.Item = MathJax.Object.Subclass({ - type: "base", - closeError: "Extra close brace or missing open brace", - rightError: "Missing \\left or extra \\right", - Init: function () { - if (this.isOpen) {this.env = {}} - this.data = []; - this.Push.apply(this,arguments); - }, - Push: function () {this.data.push.apply(this.data,arguments)}, - Pop: function () {return this.data.pop()}, - mmlData: function (inferred,forceRow) { - if (inferred == null) {inferred = TRUE} - if (this.data.length === 1 && !forceRow) {return this.data[0]} - return MML.mrow.apply(MML,this.data).With((inferred ? {inferred: TRUE}: {})); - }, - checkItem: function (item) { - if (item.type === "over" && this.isOpen) {item.num = this.mmlData(FALSE); this.data = []} - if (item.type === "cell" && this.isOpen) {TEX.Error("Misplaced "+item.name)} - if (item.isClose && this[item.type+"Error"]) {TEX.Error(this[item.type+"Error"])} - if (!item.isNotStack) {return TRUE} - this.Push(item.data[0]); return FALSE; - }, - With: function (def) { - for (var id in def) {if (def.hasOwnProperty(id)) {this[id] = def[id]}} - return this; - }, - toString: function () {return this.type+"["+this.data.join("; ")+"]"} - }); +MathJax.Unpack([ + ['(','function','(d){var c=true,f=false,i,h=String.fromCharCode(160);var e','=MathJax.Object.Subclass({','Init',':function(k){','this.global','={};','this.data','=[b.','start','().With({global:',6,'})];if(k){',8,'[0].env','=k}','this.env','=',8,15,'},','Push',':function(){','var l,k,n,o;for(','l=0,k=arguments.length;l<k;l++){','n=','arguments[l','];if(n',' instanceof ','i.mbase){n=b.mml(n)}n.global=',6,';o=(',8,'.length','?this.Top().','checkItem','(n):c);if(o',29,'Array','){this.Pop();this.Push','.apply(this',',','o)}else{if(o',29,'b',40,'(',43,'){',8,'.push','(n);if(n.env){','for(var ','p',' in this.env){if(this.env.hasOwnProperty(','p)){n.env[p]=',17,'[p]}}',17,'=n.env}else{n.env=',17,'}}}}}},Pop',23,'var k=',8,'.pop();if(!k.isOpen){delete k.env}',17,'=(',8,34,35,'env:{});','return ','k},Top',5,'if(k==null){k=','1}if(',8,34,'<k){',73,'null}',73,8,'[',8,34,'-k]},Prev',5,'var l=this.Top();if(k){',73,'l.data[l.data',34,'-1]}else{',73,'l.Pop()}},toString',23,'return"stack[\\n "+',8,'.join("\\n ")+"\\n]"}});var b=e.Item',3,'type:"base",closeError:"Extra',' close brace',' or missing',' open brace','",rightError:"Missing \\\\left or extra',' \\\\right",',4,23,'if(','this.isOpen){',17,'={}}',8,'=[];this.',22,41,',arguments)},',22,23,8,51,'.apply(',8,118,'Pop',23,73,8,'.pop()},mmlData:',1,'(k,l){',76,'c}if(',8,34,'===1&&!l){',73,8,'[0]}',73,'i.mrow',123,'i,',8,').With((k?{inferred:c}:{}))},','checkItem:function(','k){if(k.type==="','over"&&',111,'k.num=','this.mmlData','(f);',8,'=[]}if(k','.type==="','cell"&&',111,'d.Error("Misplaced "+k.name)}if(k.isClose&&','this[k.type+"Error','"]){d.Error(',160,'"])}if(!k','.isNotStack){',73,'c}this.',22,'(k.data[0]);',73,'f},With',5,53,'l in k){if(k.hasOwnProperty(l)){this[l]=k[l]}}',73,'this},toString',23,73,'this.type+"["+',8,'.join("; ")+"]"}});b.',10,'=b.Subclass({type:"',10,'",isOpen:c,',147,148,'stop"){','return b.mml(',152,'())}','return this.SUPER(arguments).checkItem.call(this,','k)}});b.','stop',182,193,'",isClose:c});b.','open',182,'open',184,'stopError:"Extra',105,104,103,'",',147,'l){','if(l.type==="','close"){',64,152,'();',188,'i.TeXAtom(','k))}',191,'l)}});b.','close',182,218,196,'subsup',182,222,'",stopError:"Missing superscript or subscript argument",',147,'l){var k=["","subscript","superscript"][this.','position','];',208,'open"||l',156,'left"){',73,'c}',208,'mml"){',8,'[0].SetData(this.',228,',l.data[0]);',188,8,'[0])}if(','this.SUPER(arguments).',36,'.call(this,l)){','d.Error("Missing',105,' for "+k)}},Pop:',1,'(){}});b.over',182,'over",isClose:c,name:"\\\\over",',147,'m,k){if(m',156,'over"){d.Error("Ambiguous use of "+m.name)}if(m.isClose){var l=i.mfrac(this.num,',152,'(f));if(this.thickness!=null){l.linethickness=this.thickness}','if(this.open||this.close){','l.texClass=i.TEXCLASS.INNER;l.texWithDelims=c;l=i.mfenced(l',').With({open:this.open,close:this.close})}','return[b.mml(','l),m]}',191,'m)},toString',23,'return"over["+this.num+" / "+',8,180,'left',182,'left',184,'delim:"(",',201,' \\\\left',104,107,147,'l){',208,'right"){var ','k=i.mfenced(',8,34,'===1?',8,'[0]:i.mrow',123,'i,',8,'));',188,'k.With({open:this.delim,',218,':l.delim}))}',191,217,'right',182,'right",isClose:c,delim:")"});b.begin',182,'begin',184,147,148,'end"){if(k.name!==this.name){d.Error("\\\\begin{"+this.name+"} ended with \\\\end{"+k.name+"}")}if(!this.end){',188,152,'())}',73,'this.parse[this.end].call(this.parse,this,',8,')}if(k',156,187,248,' \\\\end{"+this.name+"}")}',191,192,'end',182,'end',196,'style',182,'style",',147,'l){if(!l.isClose){',191,'l)}',64,'i.mstyle',123,'i,',8,').With(this.','styles);',264,'k),l]}});b.',228,182,228,'",',147,'l){if(l.isClose){',248,' box for "+this.name)}if(l',164,64,'l.mmlData();switch(this.move){case"vertical":k=i.mpadded(k).With({height:this.dh,depth:this.dd,voffset:this.dh});',264,'k)];case"horizontal":',264,'this.left),l,b.mml(this.right)]}}',191,217,'array',182,'array',184,'arraydef:{},',4,23,'this.table','=[];','this.row','=[];',17,7,245,4,41,118,147,348,'if(l.isEntry','){this.EndEntry();this.','clearEnv();return f}','if(l.isCR',380,'EndRow();this.',381,'this.EndTable();this.clearEnv();',64,'i.mtable',123,'i,',367,339,'arraydef);',261,285,'k',263,'k=b.mml(k);if(this.requireClose){',208,209,73,'k}',248,103,'")}return[k,l]}',191,'l)},EndEntry',23,369,51,'(i.mtd',123,'i,',8,'));',8,'=[]},EndRow',23,367,51,'(i.mtr',123,'i,',369,'));',369,'=[]},EndTable',23,'if(',8,34,'||',369,34,380,'EndRow()}this.checkLines()},checkLines',23,'if(','this.arraydef.rowlines','){',64,439,'.split(/ /);if(k',34,'===',367,34,'){this.arraydef.frame=k.pop();',439,'=k.join(" ")}else{if(k',34,'<',367,34,'-1){',439,'+=" none"}}}},clearEnv',23,53,'k',55,'k)){delete ',17,'[k]}}}});b.cell',182,'cell',196,'mml',182,'mml",isNotStack:c,',22,23,53,25,'if(',27,'].type!=="mo"&&',27,'].isEmbellished()){',27,']=',214,27,']).With({isEmbellishedWrapper:c})}}',8,51,123,8,118,'Add',23,8,51,123,8,',arguments);',73,'this}});var g',7,'var j=',1,'(){i=MathJax.ElementJax.mml;MathJax.Hub.Insert(g,{letter:/[a-z]/i,digit:/[0-9.]/,number:/^(?:[0-9]+(?:\\{,\\}[0-9]{3})*(?:\\.[0-9]*)*|\\.[0-9]+)/,special:{"\\\\":"ControlSequence","{":"Open","}":"Close","~":"Tilde","^":"Superscript",_:"Subscript"," ":"Space","\\t":"Space","\\r":"Space","\\n":"Space","\'":"Prime","%":"Comment","&":"Entry","#":"Hash","\\u2019":"Prime"},remap:{"-":"2212","*":"2217"},mathchar0mi:{alpha:"03B1",beta:"03B2",gamma:"03B3",delta:"03B4",epsilon:"03F5",zeta:"03B6",eta:"03B7",theta:"03B8",iota:"03B9",kappa:"03BA",lambda:"03BB",mu:"03BC",nu:"03BD",xi:"03BE",omicron:"03BF",pi:"03C0",rho:"03C1",sigma:"03C3",tau:"03C4",upsilon:"03C5",phi:"03D5",chi:"03C7",psi:"03C8",omega:"03C9",varepsilon:"03B5",vartheta:"03D1",varpi:"03D6",varrho:"03F1",varsigma:"03C2",varphi:"03C6",S:"00A7",aleph:["2135','",{mathvariant:i.VARIANT.NORMAL}],','hbar:"210F",imath:"0131",jmath:"0237",ell:"2113",wp:["2118',503,'Re:["211C',503,'Im:["2111',503,'partial:["2202',503,'infty:["221E',503,'prime:["2032',503,'emptyset:["2205',503,'nabla:["2207',503,'top:["22A4',503,'bot:["22A5',503,'angle:["2220',503,'triangle:["25B3',503,'backslash:["2216',503,'forall:["2200',503,'exists:["2203',503,'neg:["00AC',503,'lnot:["00AC',503,'flat:["266D',503,'natural:["266E',503,'sharp:["266F',503,'clubsuit:["2663',503,'diamondsuit:["2662',503,'heartsuit:["2661',503,'spadesuit:["2660",{mathvariant:i.VARIANT.NORMAL}]},mathchar0mo:{surd:"221A",coprod:["2210','",{texClass:i.TEXCLASS.OP,movesupsub:c','}],bigvee:["22C1',551,'}],bigwedge:["22C0',551,'}],biguplus:["2A04',551,'}],bigcap:["22C2',551,'}],bigcup:["22C3',551,'}],"int":["222B",{','texClass:i.TEXCLASS.','OP}],intop:["222B',551,',movablelimits:c}],iint:["222C",{',563,'OP}],iiint:["222D",{',563,'OP}],prod:["220F',551,'}],sum:["2211',551,'}],bigotimes:["2A02',551,'}],bigoplus:["2A01',551,'}],bigodot:["2A00',551,'}],oint:["222E",{',563,'OP}],bigsqcup:["2A06',551,'}],smallint:["222B','",{largeop:f}],','triangleleft:"25C3",triangleright:"25B9",bigtriangleup:"25B3",bigtriangledown:"25BD",wedge:"2227",land:"2227",vee:"2228",lor:"2228",cap:"2229",cup:"222A",ddagger:"2021",dagger:"2020",sqcap:"2293",sqcup:"2294",uplus:"228E",amalg:"2A3F",diamond:"22C4",bullet:"2219",wr:"2240",div:"00F7",odot:["2299',585,'oslash:["2298',585,'otimes:["2297',585,'ominus:["2296',585,'oplus:["2295',585,'mp:"2213",pm:"00B1",circ:"2218",bigcirc:"25EF",setminus:"2216",cdot:"22C5",ast:"2217",times:"00D7",star:"22C6",propto:"221D",sqsubseteq:"2291",sqsupseteq:"2292",parallel:"2225",mid:"2223",dashv:"22A3",vdash:"22A2",leq:"2264",le:"2264",geq:"2265",ge:"2265",lt:"003C",gt:"003E",succ:"227B",prec:"227A",approx:"2248",succeq:"2AB0",preceq:"2AAF",supset:"2283",subset:"2282",supseteq:"2287",subseteq:"2286","in":"2208",ni:"220B",notin:"2209",owns:"220B",gg:"226B",ll:"226A",sim:"223C",simeq:"2243",perp:"22A5",equiv:"2261",asymp:"224D",smile:"2323",frown:"2322",ne:"2260",neq:"2260",cong:"2245",doteq:"2250",bowtie:"22C8",models:"22A8",notChar:"0338",Leftrightarrow:"21D4",Leftarrow:"21D0",Rightarrow:"21D2",leftrightarrow:"2194",leftarrow:"2190",gets:"2190",rightarrow:"2192",to:"2192",mapsto:"21A6",leftharpoonup:"21BC",leftharpoondown:"21BD",rightharpoonup:"21C0",rightharpoondown:"21C1",nearrow:"2197",searrow:"2198",nwarrow:"2196",swarrow:"2199",rightleftharpoons:"21CC",hookrightarrow:"21AA",hookleftarrow:"21A9",longleftarrow:"27F5",Longleftarrow:"27F8",longrightarrow:"27F6",Longrightarrow:"27F9",','Longleftrightarrow',':"27FA",longleftrightarrow:"27F7",longmapsto:"27FC",ldots:"2026",cdots:"22EF",vdots:"22EE",ddots:"22F1",dots:"2026",dotsc:"2026",dotsb:"22EF",dotsm:"22EF",dotsi:"22EF",dotso:"2026",ldotp:["002E",{',563,'PUNCT}],cdotp:["22C5",{',563,'PUNCT}],colon:["003A",{',563,'PUNCT}]},mathchar7:{Gamma:"0393",Delta:"0394",Theta:"0398",Lambda:"039B",Xi:"039E",Pi:"03A0",Sigma:"03A3",Upsilon:"03A5",Phi:"03A6",Psi:"03A8",Omega:"03A9",_:"005F","#":"0023","$":"0024","%":"0025","&":"0026",And:"0026"},delimiter:{"(":"(",")":")","[":"[","]":"]","<":"27E8",">":"27E9","\\\\lt":"27E8","\\\\gt":"27E9","/":"/","|":["|",{',563,'ORD}],".":"","\\\\\\\\":"\\\\","\\\\lmoustache":"23B0","\\\\rmoustache":"23B1","\\\\lgroup":"27EE","\\\\rgroup":"27EF","\\\\arrowvert":"23D0","\\\\Arrowvert":"2016","\\\\bracevert":"23AA","\\\\Vert":["2225",{',563,'ORD}],"\\\\|":["2225",{',563,'ORD}],"\\\\','vert":["|",{',563,610,'uparrow":"2191","\\\\downarrow":"2193","\\\\updownarrow":"2195","\\\\Uparrow":"21D1","\\\\Downarrow":"21D3","\\\\Updownarrow":"21D5","\\\\backslash":"\\\\","\\\\rangle":"27E9","\\\\langle":"27E8","\\\\rbrace":"}","\\\\lbrace":"{","\\\\}":"}","\\\\{":"{","\\\\rceil":"2309","\\\\lceil":"2308","\\\\rfloor":"230B","\\\\lfloor":"230A","\\\\lbrack":"[","\\\\rbrack":"]"},macros:{displaystyle',':["SetStyle","','D",c,0],textstyle',615,'T",f,0],scriptstyle',615,'S",f,1],scriptscriptstyle',615,'SS",f,2],rm',':["SetFont",i.VARIANT.','NORMAL],mit',623,'ITALIC],oldstyle',623,'OLDSTYLE],cal',623,'CALIGRAPHIC],it',623,'ITALIC],bf',623,'BOLD],bbFont',623,'DOUBLESTRUCK],scr',623,'SCRIPT],frak',623,'FRAKTUR],sf',623,'SANSSERIF],tt',623,'MONOSPACE],tiny',':["SetSize",','0.5],Tiny',645,'0.6],scriptsize',645,'0.7],small',645,'0.85],normalsize',645,'1],large',645,'1.2],Large',645,'1.44],LARGE',645,'1.73],huge',645,'2.07],Huge',645,'2.49],arcsin',':["NamedOp",0],','arccos',665,'arctan',665,'arg',665,'cos',665,'cosh',665,'cot',665,'coth',665,'csc',665,'deg',665,'det',':"NamedOp",','dim',665,'exp',665,'gcd',685,'hom',665,'inf',685,'ker',665,'lg',665,'lim',685,'liminf',':["NamedOp",null,"lim&thinsp;','inf"],limsup',703,'sup"],ln',665,'log',665,'max',685,'min',685,'Pr',685,'sec',665,'sin',665,'sinh',665,'sup',685,'tan',665,'tanh',665,'limits:["Limits",1],nolimits:["Limits",0],overline',':["UnderOver","','203E"],underline',729,'005F"],overbrace',729,'23DE",1],underbrace',729,'23DF",1],overrightarrow',729,'2192"],underrightarrow',729,'2192"],overleftarrow',729,'2190"],underleftarrow',729,'2190"],overleftrightarrow',729,'2194"],underleftrightarrow',729,'2194"],overset:"Overset",underset:"Underset",stackrel',':["Macro","\\\\','mathrel{\\\\','mathop{#2}\\\\limits^{#1}}",2],over:"Over",overwithdelims:"Over",atop:"Over",atopwithdelims:"Over",above:"Over",abovewithdelims:"Over",brace:["Over","{","}"],brack:["Over","[","]"],choose:["Over","(",")"],frac:"Frac",sqrt:"Sqrt",root:"Root",uproot:["MoveRoot","upRoot"],leftroot:["MoveRoot","leftRoot"],left:"LeftRight",right:"LeftRight",llap:"Lap",rlap:"Lap",raise:"RaiseLower",lower:"RaiseLower",moveleft',':"MoveLeftRight','",moveright',752,'",",":["','Spacer",i.LENGTH.','THINMATHSPACE','],":":["',756,757,'],">":["',756,'MEDIUMMATHSPACE],";":["',756,'THICKMATHSPACE','],"!":["',756,'NEGATIVETHINMATHSPACE],','enspace:["Spacer",".5em"],quad:["Spacer","1em"],qquad:["Spacer","2em"],thinspace:["',756,757,'],negthinspace:["',756,768,'hskip:"Hskip",hspace:"Hskip",kern:"Hskip",mskip:"Hskip",mspace:"Hskip",mkern:"Hskip",Rule:["Rule"],Space:["Rule","blank"],big',':["MakeBig",i.TEXCLASS.','ORD,0.85],Big',776,'ORD,1.15],bigg',776,'ORD,1.45],Bigg',776,'ORD,1.75],bigl',776,'OPEN,0.85],Bigl',776,'OPEN,1.','15],biggl',776,787,'45],Biggl',776,787,'75],bigr',776,'CLOSE,0.85],Bigr',776,'CLOSE,1.','15],biggr',776,798,'45],Biggr',776,798,'75],bigm',776,'REL,0.85],Bigm',776,'REL,1.15],biggm',776,'REL,1.45],Biggm',776,'REL,1.75],mathord',':["TeXAtom",i.TEXCLASS.','ORD],mathop',814,'OP],mathopen',814,'OPEN],mathclose',814,'CLOSE],mathbin',814,'BIN],mathrel',814,'REL],mathpunct',814,'PUNCT],mathinner',814,'INNER],vcenter',814,'VCENTER],','mathchoice',':["Extension","',832,'"],buildrel:"BuildRel",hbox:["HBox",0],text:"HBox",mbox:["HBox",0],fbox:"FBox",strut:"Strut",mathstrut',749,'vphantom{(}"],phantom:"Phantom",vphantom:["Phantom",1,0],hphantom:["Phantom",0,1],smash:"Smash",acute',':["Accent","','02CA"],grave',838,'02CB"],ddot',838,'00A8"],tilde',838,'02DC"],bar',838,'02C9"],breve',838,'02D8"],check',838,'02C7"],hat',838,'02C6"],vec',838,'20D7"],dot',838,'02D9"],widetilde',838,'02DC",1],widehat',838,'02C6",1],matrix:"Matrix",array:"Matrix",pmatrix:["Matrix","(",")"],cases:["Matrix","{","","left left",null,".1em"],eqalign',':["Matrix",null,null,"','right left",i.LENGTH.',765,',".5em","D"],','displaylines',862,'center",null',865,'cr:"Cr","\\\\":"Cr",newline:"Cr",hline:["HLine","solid"],hdashline:["HLine","dashed"],eqalignno',':["Matrix",null,null,"right left right",i.LENGTH.THICKMATHSPACE+" 3em",".5em","D"],','leqalignno',871,'bmod',749,'mathbin{\\\\rm mod}"],pmod',749,'pod{{\\\\rm mod}\\\\kern 6mu',' #1}",1],','mod',749,'mathchoice{\\\\kern18mu}{\\\\','kern12mu}{\\\\',883,883,'rm mod}\\\\,\\\\,#1",1],pod',749,882,'kern8mu}{\\\\kern8mu}{\\\\kern8mu}(#1)",1],iff:["Macro","\\\\;\\\\',597,'\\\\;"],skew:["Macro","{{#2{#3\\\\mkern#1mu}\\\\mkern-#1mu}{}}",3],mathcal',':["Macro","{\\\\','cal',879,'mathscr',892,'scr',879,'mathrm',892,'rm',879,'mathbf',892,'bf',879,'mathbb',892,'bbFont #1}",1],','Bbb',892,909,'mathit',892,'it',879,'mathfrak',892,'frak',879,'mathsf',892,'sf',879,'mathtt',892,'tt',879,'textrm',749,'mathord{\\\\','rm\\\\text{#1}}",1],textit',749,931,'it','{\\\\text{#1}}}",1],','textbf',749,931,'bf',936,'pmb',749,'rlap{#1}\\\\kern1px{#1}",1],TeX:["Macro","T\\\\kern-.14em\\\\lower.5ex{E}\\\\kern-.115em X"],LaTeX:["Macro","L\\\\kern-.325em\\\\raise.21em{\\\\scriptstyle{A}}\\\\kern-.17em\\\\TeX"],not',749,750,'rlap{\\\\kern.5em\\\\notChar}}"]," ":["Macro","\\\\text{ }"],space:"Tilde",begin:"Begin",end:"End",newcommand',833,'newcommand"],','renewcommand',833,949,'newenvironment',833,949,'def',833,949,'verb',833,'verb"],','boldsymbol',833,962,'"],tag',833,'AMSmath"],','notag',833,967,'label:["Macro","",1],nonumber:["Macro",""],unicode',833,'unicode"],color:"Color",require:"Require"},environment:{array:["Array"],matrix:["Array",n'], + ['ull,null,null,"c"],pmatrix',':["Array",null',',"(",")","c"],bmatrix',1,',"[","]","c"],Bmatrix',1,',"\\\\{","\\\\}","c"],vmatrix',1,',"\\\\vert","\\\\vert","c"],Vmatrix',1,',"\\\\Vert","\\\\Vert","c"],cases',1,',"\\\\{",".","ll",null,".1em"],','eqnarray',':["','Array",null,null,null,"rcl",i.LENGTH.THICKMATHSPACE,".5em","D','"],"',13,'*":["',15,'"],equation:[','null,"Equation',16,'equation*":[',21,'"],align:["','ExtensionEnv",null,"AMSmath',16,'align',18,26,'"],aligned:["',26,'"],','multline',':["',26,16,34,18,26,'"],split:["',26,'"],gather:["',26,16,'gather',18,26,'"],gathered:["',26,'"],alignat:["',26,16,'alignat',18,26,'"],alignedat:["',26,'"]},p_height:1.2/0.85});if(','this.config.Macros','){','var k=',60,';for(var l in k){if(k','.hasOwnProperty(','l)){if(typeof(k[l])==="','string"){','g.macros[l]=["Macro','",k[l]]}else{',68,'"].concat(k[l])}}}}};var a=MathJax.Object.Subclass({Init',':function(','l,m){','this.string=','l;this.i=0;var k;if(m){k={};for(var n in m){if(m',65,'n)){k[n]=m[n]}}}this.stack=d.Stack(k);this.Parse();','this.Push(','b.stop())},Parse',':function(){','var k;','while(this.i<this.string.length','){k=','this.string.charAt(this.i','++);if(g.special[k]){this[g.special[k]](k)}','else{if(','g.letter','.test(k)){this.','Variable','(k)}',86,'g.digit',88,'Number(k)}','else{this.','Other(k)}}}}},Push',80,'this.stack.','Push.apply(this','.stack,arguments)},mml',80,'if(',98,'Top().type!=="mml"){','return ','null}',105,98,'Top().data[0]},mmlToken',72,'k','){return ','k},ControlSequence',72,'q){',62,'this.GetCS','(),p,n;if(','g.macros[k',']){','var m=',119,'];if(!(m',' instanceof Array',')){m=[m]}','var l=','m[0];if(!(l instanceof Function)){l=this[l]}l.apply(this,["\\\\"+k].concat(m.slice(1)))}',86,'g.mathchar0mi[k',']){p=',129,'];n={','mathvariant:i.VARIANT.','ITALIC};if(p',124,'){n=p[1];p=p[0]}',78,'this.mmlToken(','i.mi','(i.entity("#x"+p)).With(n)))}else{if(g.','mathchar0mo[k',']){p=g.',141,132,'stretchy:','f};if(p',124,'){n=p[1];n.stretchy=f;p=p[0]}',78,138,'i.mo',140,'mathchar7[k',142,153,132,133,'NORMAL','};if(p',124,136,'if(','this.stack.env','.font){','n.','mathvariant','=',163,'.font}',78,138,'i.mi',140,'delimiter["\\\\"+k',']!=null){var o=g.',174,'];n={};if(o',124,'){n=o[1];o=o[0]}if(o.length===4){o=i.entity("#x"+o)}else{o=i.chars(o)}',78,138,'i.mo(o).With({','fence:f,',145,'f}).With(n)))}',95,'csUndefined','("\\\\"+k)}}}}}},',187,72,'k){','d.Error("','Undefined control sequence "+k)},',89,72,'l){var ','k={};if(',163,164,'k.',166,'=',163,169,78,138,'i.mi(i.chars(l)).With(k)))},Number',72,'m){var k,l=','this.string.slice(','this.i-1).match(g.number);if(l){k=i.mn(l[0].replace(/[{}]/g,""));this.i+=l[0].length-1}else{k=','i.mo(i.chars(','m))}if(',163,164,'k.',166,'=',163,169,78,138,'k))},Open',72,'k){',78,'b.open())},Close',72,'k){',78,'b.close())},Tilde',72,'k){',78,'i.mtext(i.chars(','h)))},Space',72,'k){},Superscript',72,'m){var k,l=this.stack.Prev();if(!l){l=i.mi("")}if(l.isEmbellishedWrapper){l=l.data[0].data[0]}if(l.type==="msubsup"){if(l.data[l.','sup]){if(!l.data[l.sup].isPrime){',192,'Double exponent',': use braces to clarify")}','l=i.msubsup(l,null,null',')}k=l.sup','}else{if(l.movesupsub){if(l.type!=="munderover"||l.data[l.','over',']){l=i.munderover(l,null,null).With({movesupsub:c})}k=l.','over}else{',245,');k=l.sup}}',78,'b.subsup(l).With({position:k}))},','Subscript',72,240,'sub]){',192,'Double subscripts',244,'k=l.sub',247,'under',249,'under}else{',245,');k=l.sub}}',78,254,'PRIME:','String.fromCharCode(','8242),SMARTQUOTE:',272,'8217),Prime',72,'m){',126,98,'Prev();if(!l){l=i.mi()}if(l.type==="msubsup"&&l.data[l.sup]){',192,'Prime causes double exponent',244,'var k="";this.i--;do{k+=this.PRIME;this.i++,m=','this.GetNext','()}while(m==="\'"||m===this.SMARTQUOTE);k=',138,212,'k)).With({','isPrime:c,variantForm:d.isSTIX}));',78,'i.msubsup(l,null,k))},Comment',72,'k){',82,'&&',84,')!="\\n"){this.i++}},Hash',72,'k){',192,'You can\'t use \'','macro parameter ','character #\' in math mode")},Other',72,'m){var l={',145,'false},k;if(',163,164,'l.',166,'=',163,169,'if(g.remap[m]){m=g.remap[m];if(m',124,'){l=m[1];m=m[0]}k=','i.mo(i.entity("#x"+','m))}else{k=i.mo(m)}if(k.autoDefault("texClass",true)==""){k=','i.TeXAtom(','k)}',78,138,'k.With(l)))},SetFont',72,'l,k){',163,'.font=k},SetStyle',72,'l,k,m,n){',163,'.style=k;',163,'.level=n;',78,'b.style().With({styles:{','displaystyle',':m,','scriptlevel',':n}}))},SetSize',72,'k,l){',163,'.size=l;',78,337,'mathsize:l+"em"}}))},Color',72,'m){',126,'this.GetArgument(','m);',62,163,'.color;',163,'.color=l;var n=','this.ParseArg(','m);if(k){',163,'.color}','else{delete ',163,362,78,'i.mstyle(n).With({mathcolor:l}))},Spacer',72,343,78,'i.mspace().With({width:','l,','mathsize:i.SIZE.NORMAL,scriptlevel:','1}))},LeftRight',72,'k){',78,'b[k.substr(1)]().With({delim:','this.GetDelimiter(','k)}))},NamedOp',72,'m,l,o){var n=(l!=null&&l===0?f:c);if(!o){o=m.substr(1)}l=((l||l==null)?c:f);o=o.replace(/&thinsp;/,',272,'8198));',62,182,'movablelimits',':l,','movesupsub',':n',',form:i.FORM.PREFIX,texClass:i.TEXCLASS.OP','});k','.useMMLspacing&=~','k','.SPACE_ATTR.form',';',78,138,'k))},Limits',72,327,121,98,'Prev("nopop");if(m.texClass!==','i.TEXCLASS.OP){','d.Error(l+" is allowed only on operators")}m.',389,'=(k?c:f);m.',387,'=f},Over',72,'m,l,n){',62,'b.over','().With({name:','m});if(l||n){k.open=l;k.close=n}',86,'m.match(/withdelims$/)){k.open=',379,'m);k.close=',379,'m)}}if(','m.match(/^\\\\','above/)){','k.thickness=','this.GetDimen(','m)}',86,423,'atop/)||l||n){',425,'0}}',78,'k)},Frac',72,196,'k=',359,'l);',121,359,'l);',78,'i.mfrac(k,m))},Sqrt',72,196,'m=','this.GetBrackets(','l),k=',359,'l);if(m==""){k=i.msqrt.apply(i,k.array())}else{k=','i.mroot(k,this.parseRoot(m','))}',78,'k)},Root',72,196,'m=','this.GetUpTo(','l,"\\\\of");',62,359,'l);',78,452,')))},parseRoot',72,'p){',126,163,',k=l.inRoot;l.inRoot=true;var o=','d.Parse(','p,l);p=o.mml();',121,'o.stack.global;if(m.leftRoot||m.upRoot){p','=i.mpadded(','p);if(m.leftRoot){p.width=m.leftRoot}if(m.upRoot){p.voffset=m.upRoot;p.height=m.upRoot}}l.inRoot=k;',105,'p},MoveRoot',72,'k,m){if(!',163,'.inRoot){d.Error(k+" can appear only within a root")}if(',98,'global[m]){',192,'Multiple use of "+k)}',126,352,'k);if(!l.match(/-?[0-9]+/)){',192,'The',' argument to "+','k+" must be an integer")}l=(l/15)+"em";if(l.substr(0,1)!=="-"){l="+"+l}',98,'global[m]=l},Accent',72,'m,k,o){var n=',359,'m);',126,138,319,289,'accent:c}));l.stretchy=(o?c:f);',78,'i.munderover(','n,null,l).With({accent:c}))},UnderOver',72,'m,p,k){var o={o:"over",u:"under"}[m.charAt(1)];var n=',359,'m);',126,507,'n,null,null);if(k){l.',389,'=c}l.data[l[o]]=',138,319,'p)).With({',145,'c,accent:(o=="under")}));',78,'l)},Overset',72,'k){',121,359,'k),l=',359,'k);',78,507,'l,null,m))},Underset',72,'k){',121,359,'k),l=',359,'k);',78,507,'l,m,null))},TeXAtom',72,'n,p){var o={texClass:p},m;if(p==',405,'o.',389,'=o.',387,'=c;',62,352,'n);',126,'k.match(/^\\s*\\\\rm\\s+([a-zA-Z0-9 ]+)$/);if(l){m=',138,'i.mo(l[1]).With({',387,':c,',389,':c,',133,158,391,'}));m',393,'m',395,'}','else{m=',321,472,'k,',163,').mml()).With(o)}}',572,321,359,'n)).With(o)}',78,'m)},Strut',72,'k){',78,'i.mpadded(i.mrow()).With','({height:"8.6pt",depth:"3pt",width:0}))},Phantom',72,'l,k,m){var n=i.mphantom(',359,'l));if(k||m){n',476,'n);if(m){n.height=n.depth=0}if(k){n.width=0}}',78,'n)},Smash',72,'m){',126,'this.trimSpaces(',448,'m));var k',476,359,'m));','switch(','l){case"b":k.depth=0;','break;case','"t":k.height=0;break;default:k.height=k.depth=0}',78,'k)},Lap',72,196,'k',476,359,'l)).With({width:0});if(l==="\\\\llap"){k.lspace="-1 width"}',78,'k)},RaiseLower',72,'k){',126,426,'k);',121,'b.position().With({name:k,move:"','vertical"});if(l.charAt(0)==="-"){l=l.slice(1);k={raise:"\\\\lower",lower:"\\\\raise"}[k.substr(1)]}if(k==="\\\\lower"){m.dh="-"+l;m.dd=l}else{m.dh=l;m.dd="-"+l}',78,'m)},MoveLeftRight',72,'k){var n=',426,'k);var m=(n.charAt(0)==="-"?n.slice(1):"-"+n);if(k==="\\\\moveleft"){',126,'n;n=m;m=l}',78,626,'horizontal",left:',371,'n,',373,'1}),right:',371,'m,',373,'1})}))},Hskip',72,'k){',78,371,426,'k),',373,'0}))},Rule',72,'m,o){',62,426,'m),n=',426,'m),q=',426,'m);var l,p={width:k,height:n,depth:q};if(o!=="blank"){l=',587,'(p);if(parseFloat(k)&&parseFloat(n)+parseFloat(q)){l=i.mstyle(l).With({mathbackground:(',163,'.color||"black")})}}else{l=i.mspace().With(p)}',78,'l)},MakeBig',72,'k,n,l){l*=g.p_height;l=String(l).replace(/(\\.\\d\\d\\d).+/,"$1")+"em";',121,379,'k);',78,321,'i.mo(m).With({minsize:l,maxsize:l,',340,':0,fence:c,',145,'c,symmetric:c})).With({texClass:n}))},BuildRel',72,'k){',126,'this.','ParseUpTo','(k,"\\\\over");',121,359,'k);',78,321,507,'m,null,l)).With({mclass:i.TEXCLASS.REL}))},HBox',72,343,'this.',99,',this.','InternalMath','(',352,'k),l))},FBox',72,'k){',78,'i.menclose.apply(i,this.',700,'(',352,'k))))},Require',72,'k){',126,352,'k);','this.Extension(','null,l)},Extension',72,'k,l,m){','if(k&&!typeof(k)==="',67,'k=k.name}l=d.extensionDir+"/"+l;if(!l.match(/\\.js$/)){l+=".js"}if(!','MathJax.Ajax.','loaded[',724,'fileURL(l)]){if(k!=null){delete g[m||"macros"][k.replace(/^\\\\/,"")]}','MathJax.Hub.','RestartAfter(',724,'Require(l))}},Macro',72,'l,o,n){if(n){var k=[];for(',121,'0;m<n;m++){k.push(',352,'l))}o=this.','SubstituteArgs','(k,o)}',74,'this.AddArgs(','o,',210,'this.i));this.i=0},Matrix',72,'l,n,s,p,q,m,k){var r=',285,'();if(r===""){','d.Error("Missing ','argument for "+l)}','if(r==="{"){this.i++}else{',74,'r+"}"+',210,'this.i+1);this.i=0}var o','=b.array().With({','requireClose:c,arraydef:{rowspacing:(m||"4pt"),','columnspacing:(','q||"1em")}});if(n||s){o.open=n;o.close=s}if(k==="D"){o','.arraydef.',338,'=c}if(p!=null){o',760,'columnalign=p}',78,'o)},Entry',72,'k){',78,'b.cell().With({','isEntry:c,name:k}))},Cr',72,'k){',78,770,'isCR:c,name:k}))},HLine',72,73,'if(m==null){m="solid"}var n=',98,'Top();if(n.type!=="array"||n.data','.length){',192,'Misplaced "+l)}if(n.table.length==0){n',760,'frame=m}else{var k=(n',760,'rowlines','?n',760,788,'.split(/ /):[]);while(k.length<n.table',782,'k.push("none")}k[n.table.length-1]=m;n',760,788,'=k.join(" ")}},Begin',72,196,'m=',352,'l);if(m.match','(/[^a-z*]/i)){d.Error(\'Invalid ','environment',' name "\'+m+\'"\')}if(!g.',804,'[m]){d.Error(\'Unknown ',804,' "\'+m+\'"\')}var n=g.',804,'[m];if(!(n',124,')){n=[n]}',62,'b.begin',415,'m,end:n[1],parse:this});if(n[0]&&this[n[0]]){k=this[n[0]].apply(this,[k].concat(n.slice(2)))}',78,'k)},End',72,'k){',78,'b.end',415,352,'k)}))},Equation',72,'k,l',112,'l},ExtensionEnv',72,327,717,'l.name,k,"',804,'")},Array',72,'m,o,t,r,s,n,k,p){if(!r){r=this.GetArgument("\\\\begin{"+m.name+"}")}var u=("c"+r).replace(/[^clr|:]/g,"").replace(/[^|:]([|:])+/g,"$1");r=r.replace(/[^clr]/g,"").split("").join(" ");r=r.replace(/l/g,"left").replace(/r/g,"right").replace(/c/g,"center");var q',756,'arraydef:{columnalign:r,',758,'s||"1em"),rowspacing:(n||"4pt")}});if(u.match(/[|:]/)){var l=(u.charAt(0)+u.charAt(u.length-1)).replace(/[^|:]/g,"");if(l!==""){q',760,'frame={"|":"solid",":":"dashed"}[l.charAt(0)];q',760,'framespacing=".5em .5ex"}u=u.substr(1,u.length-2);q',760,'columnlines=u.split("").join(" ").replace(/[^|: ]/g,"none").replace(/\\|/g,"solid").replace(/:/g,"dashed")}if(o){q.open=','this.convertDelimiter(','o)}if(t){q.close=',849,'t)}if(k==="D"){q',760,338,'=c}if(k==="S"){q',760,340,'=1}if(p){q',760,'useHeight=f}',78,'m);',105,'q},convertDelimiter',72,'k){if(k){k=g.delimiter[k]}if(k==null',112,106,'if(k',124,'){k=k[0]}if(k.length===4){k=',272,'parseInt(k,16))}',105,'k},trimSpaces',72,'k){if(typeof(k)!="',67,105,'k}',105,'k','.replace(/^\\s','+|\\s+$/g,"")},nextIsSpace',80,105,84,').match(/[ \\n\\r\\t]/)},GetNext',80,'while','(this.nextIsSpace()){this.i++}',105,84,')},GetCS',80,62,210,'this.i).match(/^([a-z]+|.) ?/i);','if(k){this.i+=k[','1].length;',105,'k[1]}',95,'i++;return" "}},GetArgument',72,73,606,285,'()){case"":if(!m){',749,750,105,'null;case"}":if(!m','){d.Error("Extra close brace',' or missing open brace")}',105,'null;','case"\\\\":this.i++;','return"\\\\"+',117,'();case"{":','var k=++this.i,','n=1;',82,'){',606,84,'++)){',918,608,'"{":n','++;break;case"}":if(','n==0',914,'")}if(--n==0',112,210,'k,this.i-1)}break}}',749,'close brace");break}',105,84,'++)},GetBrackets',72,'l){if(',285,'()!="["){return""}',922,'m=0;',82,'){',606,84,'++)){case"{":m++;',608,'"\\\\":this.i',932,'m--<=0',914,' while looking for',' \']\'")}',608,'"]":if(m==0',112,210,'k,this.i-1)}break}}',192,'Couldn\'t find',' closing \']\' for',493,'l)},GetDelimiter',72,'k){while',891,126,84,');if(this.i<this.string',782,'this.i++;if(l=="\\\\"){l+=',117,'(k)}if(g.delimiter[l]!=null',112,849,'l)}}',749,'or unrecognized delimiter for "+k)},GetDimen',72,196,'m;if',891,'if(',84,')=="{"){m=',352,802,'(/^\\s*([-+]?(\\.\\','d+|\\d+(\\.\\d*)?))\\s*(pt|em|ex|mu|px|mm|cm|in|pc',')\\s*$/)){',105,'m.','replace(/ /g,"")}}',572,210,'this.i);',62,'m.match(/^\\s*(([-+]?(\\.\\',997,')) ?/);',899,'0].length;',105,'k[1].',1001,749,'dimension or its units for "+l)},GetUpTo',72,'n,o){while',891,121,'this.i,l,q,p=0;',82,'){l=this.i;q=',84,'++);',606,'q){case"\\\\":q+=',117,'();',608,'"{":p',932,'p==0',914,960,' "+o)}p--;break}if(p==0&&q==o',112,210,'m,l)}}',192,968,' "+o+" for "+n)},ParseArg',72,'k',112,472,352,'k),',163,').mml()},',686,72,'k,l',112,472,459,'k,l),',163,1049,700,72,'q,s){var p={',338,':f};if(s!=null){p.',340,'=s}if(',163,164,'p.',166,'=',163,169,'if(!q.match(/\\$|\\\\\\(/)){return[this.','InternalText','(q,p)]}var o=0,l=0,r,n="";var m=[];while(o<q',782,'r=q.charAt(o++);if(r','==="$"){if(n==="$"){','m.push(i.TeXAtom(d.Parse(q.slice(l,o-','1',')).mml().With(p)));n="";l=o','}',86,'l<o-1','){m.push(this.InternalText(q.slice(l',',o-1),p))}n="$";l=o}}',86,'r','==="\\\\"){',1077,'==="("&&n==""){if(l<o-2',1085,',o-2),p))}n=")";l=o}',86,'r===")"&&n===")"){',1079,'2',1081,'}}}}}if(n!==""){',192,'Math not terminated in text box")}if(l<q.length',1085,'),p))}',105,'m},',1074,72,327,'l=l',883,'+/,h).replace(/\\s+$/,h);',105,235,'l)).With(k)},',738,72,327,'var o="";var n="";var p;',121,'0;while(m<k',782,'p=k.charAt(m++);if(p',1089,'o+=p+k.charAt(m++)}',86,'p==="#"){',1122,'==="#"){o+=p}else{if(!p.match(/[1-9]/)||p>l',782,192,'Illegal ',303,'reference")}n=',741,741,'n,o),l[p-1]);o=""}}else{o+=p}}}',105,741,'n,o)},AddArgs',72,327,'if(k.match(/^[a-z]/i)&&l.match(/(^|[^\\\\])(\\\\\\\\)*\\\\[a-z]+$/i)){l+=" "}',105,'l+k}});d.Augment({Stack:e,Parse:a,Definitions:g,Startup:j,Translate',72,'k){var l,n=k.innerHTML',883,'+/,"").replace(/\\s+$/,"");if(',728,'Browser.isKonqueror){n=n.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&")}var o=(k.type.replace(/\\n/g," ").match(/(;|\\s|\\n)mode\\s*=\\s*display(;|\\s|\\n|$)/)!=null);n=d.','prefilterMath','(n,o,k);try{l=',472,'n).mml()}catch(m){if(!m.texError){throw m}l=this.formatError(m,n,o,k)}if(l.inferred){l=i.apply(MathJax.ElementJax,l.data)}else{l=i(l)}if(o){l.root.display="block"}',105,'l},',1151,72,'l,m,k',112,'l.replace(/([_^]\\s*\\d)(\\d)/g,"$1 $2")},formatError',72,'m,l,n,k',112,'i.merror(m.message.replace(/\\n.*/,""))},Error',72,'k){throw ',728,'Insert(Error(k),{texError:c})},Macro',72,720,119,']=["Macro"].concat([].slice.call(arguments,1))}});d.loadComplete("jax.js")})(MathJax.InputJax.TeX);'] +]); - STACKITEM.start = STACKITEM.Subclass({ - type: "start", isOpen: TRUE, - checkItem: function (item) { - if (item.type === "stop") {return STACKITEM.mml(this.mmlData())} - return this.SUPER(arguments).checkItem.call(this,item); - } - }); - - STACKITEM.stop = STACKITEM.Subclass({ - type: "stop", isClose: TRUE - }); - - STACKITEM.open = STACKITEM.Subclass({ - type: "open", isOpen: TRUE, - stopError: "Extra open brace or missing close brace", - checkItem: function (item) { - if (item.type === "close") { - var mml = this.mmlData(); // this.mmlData(TRUE,TRUE); // force row - return STACKITEM.mml(MML.TeXAtom(mml)); // TeXAtom make it an ORD to prevent spacing (FIXME: should be another way) - } - return this.SUPER(arguments).checkItem.call(this,item); - } - }); - - STACKITEM.close = STACKITEM.Subclass({ - type: "close", isClose: TRUE - }); - - STACKITEM.subsup = STACKITEM.Subclass({ - type: "subsup", - stopError: "Missing superscript or subscript argument", - checkItem: function (item) { - var script = ["","subscript","superscript"][this.position]; - if (item.type === "open" || item.type === "left") {return TRUE} - if (item.type === "mml") { - this.data[0].SetData(this.position,item.data[0]); - return STACKITEM.mml(this.data[0]); - } - if (this.SUPER(arguments).checkItem.call(this,item)) - {TEX.Error("Missing open brace for "+script)} - }, - Pop: function () {} - }); - - STACKITEM.over = STACKITEM.Subclass({ - type: "over", isClose: TRUE, name: "\\over", - checkItem: function (item,stack) { - if (item.type === "over") {TEX.Error("Ambiguous use of "+item.name)} - if (item.isClose) { - var mml = MML.mfrac(this.num,this.mmlData(FALSE)); - if (this.thickness != null) {mml.linethickness = this.thickness} - if (this.open || this.close) { - mml.texClass = MML.TEXCLASS.INNER; - mml.texWithDelims = TRUE; - mml = MML.mfenced(mml).With({open: this.open, close: this.close}); - } - return [STACKITEM.mml(mml), item]; - } - return this.SUPER(arguments).checkItem.call(this,item); - }, - toString: function () {return "over["+this.num+" / "+this.data.join("; ")+"]"} - }); - - STACKITEM.left = STACKITEM.Subclass({ - type: "left", isOpen: TRUE, delim: '(', - stopError: "Extra \\left or missing \\right", - checkItem: function (item) { - if (item.type === "right") { - var mml = MML.mfenced(this.data.length === 1 ? this.data[0] : MML.mrow.apply(MML,this.data)); - return STACKITEM.mml(mml.With({open: this.delim, close: item.delim})); - } - return this.SUPER(arguments).checkItem.call(this,item); - } - }); - - STACKITEM.right = STACKITEM.Subclass({ - type: "right", isClose: TRUE, delim: ')' - }); - - STACKITEM.begin = STACKITEM.Subclass({ - type: "begin", isOpen: TRUE, - checkItem: function (item) { - if (item.type === "end") { - if (item.name !== this.name) - {TEX.Error("\\begin{"+this.name+"} ended with \\end{"+item.name+"}")} - if (!this.end) {return STACKITEM.mml(this.mmlData())} - return this.parse[this.end].call(this.parse,this,this.data); - } - if (item.type === "stop") {TEX.Error("Missing \\end{"+this.name+"}")} - return this.SUPER(arguments).checkItem.call(this,item); - } - }); - - STACKITEM.end = STACKITEM.Subclass({ - type: "end", isClose: TRUE - }); - - STACKITEM.style = STACKITEM.Subclass({ - type: "style", - checkItem: function (item) { - if (!item.isClose) {return this.SUPER(arguments).checkItem.call(this,item)} - var mml = MML.mstyle.apply(MML,this.data).With(this.styles); - return [STACKITEM.mml(mml),item]; - } - }); - - STACKITEM.position = STACKITEM.Subclass({ - type: "position", - checkItem: function (item) { - if (item.isClose) {TEX.Error("Missing box for "+this.name)} - if (item.isNotStack) { - var mml = item.mmlData(); - switch (this.move) { - case 'vertical': - var mml = MML.mpadded(mml).With({height: this.dh, depth: this.dd, voffset: this.dh}); - return [STACKITEM.mml(mml)]; - case 'horizontal': - return [STACKITEM.mml(this.left),item,STACKITEM.mml(this.right)]; - } - } - return this.SUPER(arguments).checkItem.call(this,item); - } - }); - - STACKITEM.array = STACKITEM.Subclass({ - type: "array", isOpen: TRUE, arraydef: {}, - Init: function () { - this.table = []; this.row = []; this.env = {}; - this.SUPER(arguments).Init.apply(this,arguments); - }, - checkItem: function (item) { - if (item.isClose) { - if (item.isEntry) {this.EndEntry(); this.clearEnv(); return FALSE} - if (item.isCR) {this.EndEntry(); this.EndRow(); this.clearEnv(); return FALSE} - this.EndTable(); this.clearEnv(); - var mml = MML.mtable.apply(MML,this.table).With(this.arraydef); - if (this.open || this.close) { - mml = MML.mfenced(mml).With({open: this.open, close: this.close}); - } - mml = STACKITEM.mml(mml); - if (this.requireClose) { - if (item.type === 'close') {return mml} - TEX.Error("Missing close brace"); - } - return [mml,item]; - } - return this.SUPER(arguments).checkItem.call(this,item); - }, - EndEntry: function () {this.row.push(MML.mtd.apply(MML,this.data)); this.data = []}, - EndRow: function () {this.table.push(MML.mtr.apply(MML,this.row)); this.row = []}, - EndTable: function () { - if (this.data.length || this.row.length) {this.EndEntry(); this.EndRow()} - }, - clearEnv: function () { - for (var id in this.env) {if (this.env.hasOwnProperty(id)) {delete this.env[id]}} - } - }); - - STACKITEM.cell = STACKITEM.Subclass({ - type: "cell", isClose: TRUE - }); - - STACKITEM.mml = STACKITEM.Subclass({ - type: "mml", isNotStack: TRUE, - Push: function () { - // embellished are type ORD in TeX (but not MML) so wrap them in TeXAtom - for (var i = 0, m = arguments.length; i < m; i++) { - if (arguments[i].type !== "mo" && arguments[i].isEmbellished()) - {arguments[i] = MML.TeXAtom(arguments[i]).With({isEmbellishedWrapper: TRUE})} - } - this.data.push.apply(this.data,arguments); - }, - Add: function () {this.data.push.apply(this.data,arguments); return this} - }); - - - var TEXDEF = TEX.Definitions = {}; - - TEX.Startup = function () { - MML = MathJax.ElementJax.mml; - MathJax.Hub.Insert(TEXDEF,{ - - // patterns for letters and numbers - letter: /[a-z]/i, - digit: /[0-9.]/, - number: /^(?:[0-9]+(?:\{,\}[0-9]{3})*(?:\.[0-9]*)*|\.[0-9]+)/, - - special: { - '\\': 'ControlSequence', - '{': 'Open', - '}': 'Close', - '~': 'Tilde', - '^': 'Superscript', - '_': 'Subscript', - ' ': 'Space', - "\t": 'Space', - "\r": 'Space', - "\n": 'Space', - "'": 'Prime', - '%': 'Comment', - '&': 'Entry', - '#': 'Hash', - '\u2019': 'Prime' - }, - - remap: { - '-': '2212', - '*': '2217' - }, - - mathchar0mi: { - // Lower-case greek - alpha: '03B1', - beta: '03B2', - gamma: '03B3', - delta: '03B4', - epsilon: '03F5', - zeta: '03B6', - eta: '03B7', - theta: '03B8', - iota: '03B9', - kappa: '03BA', - lambda: '03BB', - mu: '03BC', - nu: '03BD', - xi: '03BE', - omicron: '03BF', // added for completeness - pi: '03C0', - rho: '03C1', - sigma: '03C3', - tau: '03C4', - upsilon: '03C5', - phi: '03D5', - chi: '03C7', - psi: '03C8', - omega: '03C9', - varepsilon: '03B5', - vartheta: '03D1', - varpi: '03D6', - varrho: '03F1', - varsigma: '03C2', - varphi: '03C6', - - // Ord symbols - S: '00A7', - aleph: ['2135',{mathvariant: MML.VARIANT.NORMAL}], - hbar: '210F', - imath: '0131', - jmath: '0237', - ell: '2113', - wp: ['2118',{mathvariant: MML.VARIANT.NORMAL}], - Re: ['211C',{mathvariant: MML.VARIANT.NORMAL}], - Im: ['2111',{mathvariant: MML.VARIANT.NORMAL}], - partial: ['2202',{mathvariant: MML.VARIANT.NORMAL}], - infty: ['221E',{mathvariant: MML.VARIANT.NORMAL}], - prime: ['2032',{mathvariant: MML.VARIANT.NORMAL}], - emptyset: ['2205',{mathvariant: MML.VARIANT.NORMAL}], - nabla: ['2207',{mathvariant: MML.VARIANT.NORMAL}], - top: ['22A4',{mathvariant: MML.VARIANT.NORMAL}], - bot: ['22A5',{mathvariant: MML.VARIANT.NORMAL}], - angle: ['2220',{mathvariant: MML.VARIANT.NORMAL}], - triangle: ['25B3',{mathvariant: MML.VARIANT.NORMAL}], - backslash: ['2216',{mathvariant: MML.VARIANT.NORMAL}], - forall: ['2200',{mathvariant: MML.VARIANT.NORMAL}], - exists: ['2203',{mathvariant: MML.VARIANT.NORMAL}], - neg: ['00AC',{mathvariant: MML.VARIANT.NORMAL}], - lnot: ['00AC',{mathvariant: MML.VARIANT.NORMAL}], - flat: ['266D',{mathvariant: MML.VARIANT.NORMAL}], - natural: ['266E',{mathvariant: MML.VARIANT.NORMAL}], - sharp: ['266F',{mathvariant: MML.VARIANT.NORMAL}], - clubsuit: ['2663',{mathvariant: MML.VARIANT.NORMAL}], - diamondsuit: ['2662',{mathvariant: MML.VARIANT.NORMAL}], - heartsuit: ['2661',{mathvariant: MML.VARIANT.NORMAL}], - spadesuit: ['2660',{mathvariant: MML.VARIANT.NORMAL}] - }, - - mathchar0mo: { - surd: '221A', - - // big ops - coprod: ['2210',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - bigvee: ['22C1',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - bigwedge: ['22C0',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - biguplus: ['2A04',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - bigcap: ['22C2',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - bigcup: ['22C3',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - 'int': ['222B',{texClass: MML.TEXCLASS.OP}], - intop: ['222B',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE, movablelimits:TRUE}], - iint: ['222C',{texClass: MML.TEXCLASS.OP}], - iiint: ['222D',{texClass: MML.TEXCLASS.OP}], - prod: ['220F',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - sum: ['2211',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - bigotimes: ['2A02',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - bigoplus: ['2A01',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - bigodot: ['2A00',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - oint: ['222E',{texClass: MML.TEXCLASS.OP}], - bigsqcup: ['2A06',{texClass: MML.TEXCLASS.OP, movesupsub:TRUE}], - smallint: ['222B',{largeop:FALSE}], - - // binary operations - triangleleft: '25C3', - triangleright: '25B9', - bigtriangleup: '25B3', - bigtriangledown: '25BD', - wedge: '2227', - land: '2227', - vee: '2228', - lor: '2228', - cap: '2229', - cup: '222A', - ddagger: '2021', - dagger: '2020', - sqcap: '2293', - sqcup: '2294', - uplus: '228E', - amalg: '2A3F', - diamond: '22C4', - bullet: '2219', - wr: '2240', - div: '00F7', - odot: ['2299',{largeop: FALSE}], - oslash: ['2298',{largeop: FALSE}], - otimes: ['2297',{largeop: FALSE}], - ominus: ['2296',{largeop: FALSE}], - oplus: ['2295',{largeop: FALSE}], - mp: '2213', - pm: '00B1', - circ: '2218', - bigcirc: '25EF', - setminus: '2216', - cdot: '22C5', - ast: '2217', - times: '00D7', - star: '22C6', - - // Relations - propto: '221D', - sqsubseteq: '2291', - sqsupseteq: '2292', - parallel: '2225', - mid: '2223', - dashv: '22A3', - vdash: '22A2', - leq: '2264', - le: '2264', - geq: '2265', - ge: '2265', - lt: '003C', - gt: '003E', - succ: '227B', - prec: '227A', - approx: '2248', - succeq: '2AB0', // or '227C', - preceq: '2AAF', // or '227D', - supset: '2283', - subset: '2282', - supseteq: '2287', - subseteq: '2286', - 'in': '2208', - ni: '220B', - notin: '2209', - owns: '220B', - gg: '226B', - ll: '226A', - sim: '223C', - simeq: '2243', - perp: '22A5', - equiv: '2261', - asymp: '224D', - smile: '2323', - frown: '2322', - ne: '2260', - neq: '2260', - cong: '2245', - doteq: '2250', - bowtie: '22C8', - models: '22A8', - - notChar: '0338', - - - // Arrows - Leftrightarrow: '21D4', - Leftarrow: '21D0', - Rightarrow: '21D2', - leftrightarrow: '2194', - leftarrow: '2190', - gets: '2190', - rightarrow: '2192', - to: '2192', - mapsto: '21A6', - leftharpoonup: '21BC', - leftharpoondown: '21BD', - rightharpoonup: '21C0', - rightharpoondown: '21C1', - nearrow: '2197', - searrow: '2198', - nwarrow: '2196', - swarrow: '2199', - rightleftharpoons: '21CC', - hookrightarrow: '21AA', - hookleftarrow: '21A9', - longleftarrow: '27F5', - Longleftarrow: '27F8', - longrightarrow: '27F6', - Longrightarrow: '27F9', - Longleftrightarrow: '27FA', - longleftrightarrow: '27F7', - longmapsto: '27FC', - - - // Misc. - ldots: '2026', - cdots: '22EF', - vdots: '22EE', - ddots: '22F1', - dots: '2026', // should be more complex than this - dotsc: '2026', // dots with commas - dotsb: '22EF', // dots with binary ops and relations - dotsm: '22EF', // dots with multiplication - dotsi: '22EF', // dots with integrals - dotso: '2026', // other dots - - ldotp: ['002E', {texClass: MML.TEXCLASS.PUNCT}], - cdotp: ['22C5', {texClass: MML.TEXCLASS.PUNCT}], - colon: ['003A', {texClass: MML.TEXCLASS.PUNCT}] - }, - - mathchar7: { - Gamma: '0393', - Delta: '0394', - Theta: '0398', - Lambda: '039B', - Xi: '039E', - Pi: '03A0', - Sigma: '03A3', - Upsilon: '03A5', - Phi: '03A6', - Psi: '03A8', - Omega: '03A9', - - '_': '005F', - '#': '0023', - '$': '0024', - '%': '0025', - '&': '0026', - And: '0026' - }, - - delimiter: { - '(': '(', - ')': ')', - '[': '[', - ']': ']', - '<': '27E8', - '>': '27E9', - '\\lt': '27E8', - '\\gt': '27E9', - '/': '/', - '|': ['|',{texClass:MML.TEXCLASS.ORD}], - '.': '', - '\\\\': '\\', - '\\lmoustache': '23B0', // non-standard - '\\rmoustache': '23B1', // non-standard - '\\lgroup': '27EE', // non-standard - '\\rgroup': '27EF', // non-standard - '\\arrowvert': '23D0', - '\\Arrowvert': '2016', - '\\bracevert': '23AA', // non-standard - '\\Vert': ['2225',{texClass:MML.TEXCLASS.ORD}], - '\\|': ['2225',{texClass:MML.TEXCLASS.ORD}], - '\\vert': ['|',{texClass:MML.TEXCLASS.ORD}], - '\\uparrow': '2191', - '\\downarrow': '2193', - '\\updownarrow': '2195', - '\\Uparrow': '21D1', - '\\Downarrow': '21D3', - '\\Updownarrow': '21D5', - '\\backslash': '\\', - '\\rangle': '27E9', - '\\langle': '27E8', - '\\rbrace': '}', - '\\lbrace': '{', - '\\}': '}', - '\\{': '{', - '\\rceil': '2309', - '\\lceil': '2308', - '\\rfloor': '230B', - '\\lfloor': '230A', - '\\lbrack': '[', - '\\rbrack': ']' - }, - - macros: { - displaystyle: ['SetStyle','D',TRUE,0], - textstyle: ['SetStyle','T',FALSE,0], - scriptstyle: ['SetStyle','S',FALSE,1], - scriptscriptstyle: ['SetStyle','SS',FALSE,2], - - rm: ['SetFont',MML.VARIANT.NORMAL], - mit: ['SetFont',MML.VARIANT.ITALIC], - oldstyle: ['SetFont',MML.VARIANT.OLDSTYLE], - cal: ['SetFont',MML.VARIANT.CALIGRAPHIC], - it: ['SetFont',MML.VARIANT.ITALIC], // may need special handling - bf: ['SetFont',MML.VARIANT.BOLD], - bbFont: ['SetFont',MML.VARIANT.DOUBLESTRUCK], - scr: ['SetFont',MML.VARIANT.SCRIPT], - frak: ['SetFont',MML.VARIANT.FRAKTUR], - sf: ['SetFont',MML.VARIANT.SANSSERIF], - tt: ['SetFont',MML.VARIANT.MONOSPACE], - -// font: - - tiny: ['SetSize',0.5], - Tiny: ['SetSize',0.6], // non-standard - scriptsize: ['SetSize',0.7], - small: ['SetSize',0.85], - normalsize: ['SetSize',1.0], - large: ['SetSize',1.2], - Large: ['SetSize',1.44], - LARGE: ['SetSize',1.73], - huge: ['SetSize',2.07], - Huge: ['SetSize',2.49], - - arcsin: ['NamedOp',0], - arccos: ['NamedOp',0], - arctan: ['NamedOp',0], - arg: ['NamedOp',0], - cos: ['NamedOp',0], - cosh: ['NamedOp',0], - cot: ['NamedOp',0], - coth: ['NamedOp',0], - csc: ['NamedOp',0], - deg: ['NamedOp',0], - det: 'NamedOp', - dim: ['NamedOp',0], - exp: ['NamedOp',0], - gcd: 'NamedOp', - hom: ['NamedOp',0], - inf: 'NamedOp', - ker: ['NamedOp',0], - lg: ['NamedOp',0], - lim: 'NamedOp', - liminf: ['NamedOp',null,'lim&thinsp;inf'], - limsup: ['NamedOp',null,'lim&thinsp;sup'], - ln: ['NamedOp',0], - log: ['NamedOp',0], - max: 'NamedOp', - min: 'NamedOp', - Pr: 'NamedOp', - sec: ['NamedOp',0], - sin: ['NamedOp',0], - sinh: ['NamedOp',0], - sup: 'NamedOp', - tan: ['NamedOp',0], - tanh: ['NamedOp',0], - - limits: ['Limits',1], - nolimits: ['Limits',0], - - overline: ['UnderOver','203E'], - underline: ['UnderOver','005F'], - overbrace: ['UnderOver','23DE',1], - underbrace: ['UnderOver','23DF',1], - overrightarrow: ['UnderOver','2192'], - underrightarrow: ['UnderOver','2192'], - overleftarrow: ['UnderOver','2190'], - underleftarrow: ['UnderOver','2190'], - overleftrightarrow: ['UnderOver','2194'], - underleftrightarrow: ['UnderOver','2194'], - - overset: 'Overset', - underset: 'Underset', - stackrel: ['Macro','\\mathrel{\\mathop{#2}\\limits^{#1}}',2], - - over: 'Over', - overwithdelims: 'Over', - atop: 'Over', - atopwithdelims: 'Over', - above: 'Over', - abovewithdelims: 'Over', - brace: ['Over','{','}'], - brack: ['Over','[',']'], - choose: ['Over','(',')'], - - frac: 'Frac', - sqrt: 'Sqrt', - root: 'Root', - uproot: ['MoveRoot','upRoot'], - leftroot: ['MoveRoot','leftRoot'], - - left: 'LeftRight', - right: 'LeftRight', - - llap: 'Lap', - rlap: 'Lap', - raise: 'RaiseLower', - lower: 'RaiseLower', - moveleft: 'MoveLeftRight', - moveright: 'MoveLeftRight', - - ',': ['Spacer',MML.LENGTH.THINMATHSPACE], - ':': ['Spacer',MML.LENGTH.THINMATHSPACE], // for LaTeX - '>': ['Spacer',MML.LENGTH.MEDIUMMATHSPACE], - ';': ['Spacer',MML.LENGTH.THICKMATHSPACE], - '!': ['Spacer',MML.LENGTH.NEGATIVETHINMATHSPACE], - enspace: ['Spacer',".5em"], - quad: ['Spacer',"1em"], - qquad: ['Spacer',"2em"], - thinspace: ['Spacer',MML.LENGTH.THINMATHSPACE], - negthinspace: ['Spacer',MML.LENGTH.NEGATIVETHINMATHSPACE], - - hskip: 'Hskip', - hspace: 'Hskip', - kern: 'Hskip', - mskip: 'Hskip', - mspace: 'Hskip', - mkern: 'Hskip', - Rule: ['Rule'], - Space: ['Rule','blank'], - - big: ['MakeBig',MML.TEXCLASS.ORD,0.85], - Big: ['MakeBig',MML.TEXCLASS.ORD,1.15], - bigg: ['MakeBig',MML.TEXCLASS.ORD,1.45], - Bigg: ['MakeBig',MML.TEXCLASS.ORD,1.75], - bigl: ['MakeBig',MML.TEXCLASS.OPEN,0.85], - Bigl: ['MakeBig',MML.TEXCLASS.OPEN,1.15], - biggl: ['MakeBig',MML.TEXCLASS.OPEN,1.45], - Biggl: ['MakeBig',MML.TEXCLASS.OPEN,1.75], - bigr: ['MakeBig',MML.TEXCLASS.CLOSE,0.85], - Bigr: ['MakeBig',MML.TEXCLASS.CLOSE,1.15], - biggr: ['MakeBig',MML.TEXCLASS.CLOSE,1.45], - Biggr: ['MakeBig',MML.TEXCLASS.CLOSE,1.75], - bigm: ['MakeBig',MML.TEXCLASS.REL,0.85], - Bigm: ['MakeBig',MML.TEXCLASS.REL,1.15], - biggm: ['MakeBig',MML.TEXCLASS.REL,1.45], - Biggm: ['MakeBig',MML.TEXCLASS.REL,1.75], - - mathord: ['TeXAtom',MML.TEXCLASS.ORD], - mathop: ['TeXAtom',MML.TEXCLASS.OP], - mathopen: ['TeXAtom',MML.TEXCLASS.OPEN], - mathclose: ['TeXAtom',MML.TEXCLASS.CLOSE], - mathbin: ['TeXAtom',MML.TEXCLASS.BIN], - mathrel: ['TeXAtom',MML.TEXCLASS.REL], - mathpunct: ['TeXAtom',MML.TEXCLASS.PUNCT], - mathinner: ['TeXAtom',MML.TEXCLASS.INNER], - - vcenter: ['TeXAtom',MML.TEXCLASS.VCENTER], - - mathchoice: ['Extension','mathchoice'], - buildrel: 'BuildRel', - - hbox: ['HBox',0], - text: 'HBox', - mbox: ['HBox',0], - fbox: 'FBox', - - strut: 'Strut', - mathstrut: ['Macro','\\vphantom{(}'], - phantom: 'Phantom', - vphantom: ['Phantom',1,0], - hphantom: ['Phantom',0,1], - smash: 'Smash', - - acute: ['Accent', "02CA"], // or 0301 - grave: ['Accent', "02CB"], // or 0300 - ddot: ['Accent', "00A8"], // or 0308 - tilde: ['Accent', "02DC"], // or 0303 - bar: ['Accent', "02C9"], // or 0304 - breve: ['Accent', "02D8"], // or 0306 - check: ['Accent', "02C7"], // or 030C - hat: ['Accent', "02C6"], // or 0302 - vec: ['Accent', "20D7"], - dot: ['Accent', "02D9"], // or 0307 - widetilde: ['Accent', "02DC",1], // or 0303 - widehat: ['Accent', "02C6",1], // or 0302 - - matrix: 'Matrix', - array: 'Matrix', - pmatrix: ['Matrix','(',')'], - cases: ['Matrix','{','',"left left",null,".1em"], - eqalign: ['Matrix',null,null,"right left",MML.LENGTH.THICKMATHSPACE,".5em",'D'], - displaylines: ['Matrix',null,null,"center",null,".5em",'D'], - cr: 'Cr', - '\\': 'Cr', - newline: 'Cr', -// noalign: 'HandleNoAlign', - eqalignno: ['Matrix',null,null,"right left right",MML.LENGTH.THICKMATHSPACE+" 3em",".5em",'D'], - leqalignno: ['Matrix',null,null,"right left right",MML.LENGTH.THICKMATHSPACE+" 3em",".5em",'D'], - - // TeX substitution macros - bmod: ['Macro','\\mathbin{\\rm mod}'], - pmod: ['Macro','\\pod{{\\rm mod}\\kern 6mu #1}',1], - mod: ['Macro','\\mathchoice{\\kern18mu}{\\kern12mu}{\\kern12mu}{\\kern12mu}{\\rm mod}\\,\\,#1',1], - pod: ['Macro','\\mathchoice{\\kern18mu}{\\kern8mu}{\\kern8mu}{\\kern8mu}(#1)',1], - iff: ['Macro','\\;\\Longleftrightarrow\\;'], - skew: ['Macro','{{#2{#3\\mkern#1mu}\\mkern-#1mu}{}}',3], - mathcal: ['Macro','{\\cal #1}',1], - mathscr: ['Macro','{\\scr #1}',1], - mathrm: ['Macro','{\\rm #1}',1], - mathbf: ['Macro','{\\bf #1}',1], - mathbb: ['Macro','{\\bbFont #1}',1], - Bbb: ['Macro','{\\bbFont #1}',1], - mathit: ['Macro','{\\it #1}',1], - mathfrak: ['Macro','{\\frak #1}',1], - mathsf: ['Macro','{\\sf #1}',1], - mathtt: ['Macro','{\\tt #1}',1], - textrm: ['Macro','\\mathord{\\rm\\text{#1}}',1], - textit: ['Macro','\\mathord{\\it{\\text{#1}}}',1], - textbf: ['Macro','\\mathord{\\bf{\\text{#1}}}',1], - pmb: ['Macro','\\rlap{#1}\\kern1px{#1}',1], - TeX: ['Macro','T\\kern-.14em\\lower.5ex{E}\\kern-.115em X'], - LaTeX: ['Macro','L\\kern-.325em\\raise.21em{\\scriptstyle{A}}\\kern-.17em\\TeX'], - not: ['Macro','\\mathrel{\\rlap{\\kern.5em\\notChar}}'], - ' ': ['Macro','\\text{ }'], - space: 'Tilde', - - - // LaTeX - begin: 'Begin', - end: 'End', - - newcommand: ['Extension','newcommand'], - newenvironment: ['Extension','newcommand'], - def: ['Extension','newcommand'], - - verb: ['Extension','verb'], - - boldsymbol: ['Extension','boldsymbol'], - - tag: ['Extension','AMSmath'], - notag: ['Extension','AMSmath'], - label: ['Macro','',1], // not implemented yet - nonumber: ['Macro',''], // not implemented yet - - // Extensions to TeX - unicode: ['Extension','unicode'], - color: 'Color', - -// href: ['Extension','HTML'], -// 'class': ['Extension','HTML'], -// style: ['Extension','HTML'], -// cssId: ['Extension','HTML'], -// bbox: ['Extension','bbox'], - - require: 'Require' - - }, - - environment: { - array: ['Array'], - matrix: ['Array',null,null,null,'c'], - pmatrix: ['Array',null,'(',')','c'], - bmatrix: ['Array',null,'[',']','c'], - Bmatrix: ['Array',null,'\\{','\\}','c'], - vmatrix: ['Array',null,'\\vert','\\vert','c'], - Vmatrix: ['Array',null,'\\Vert','\\Vert','c'], - cases: ['Array',null,'\\{','.','ll',null,".1em"], - eqnarray: ['Array',null,null,null,'rcl',MML.LENGTH.THICKMATHSPACE,".5em",'D'], - 'eqnarray*': ['Array',null,null,null,'rcl',MML.LENGTH.THICKMATHSPACE,".5em",'D'], - - equation: [null,'Equation'], - 'equation*': [null,'Equation'], - - align: ['ExtensionEnv',null,'AMSmath'], - 'align*': ['ExtensionEnv',null,'AMSmath'], - aligned: ['ExtensionEnv',null,'AMSmath'], - multline: ['ExtensionEnv',null,'AMSmath'], - 'multline*': ['ExtensionEnv',null,'AMSmath'], - split: ['ExtensionEnv',null,'AMSmath'], - gather: ['ExtensionEnv',null,'AMSmath'], - 'gather*': ['ExtensionEnv',null,'AMSmath'], - gathered: ['ExtensionEnv',null,'AMSmath'], - alignat: ['ExtensionEnv',null,'AMSmath'], - 'alignat*': ['ExtensionEnv',null,'AMSmath'], - alignedat: ['ExtensionEnv',null,'AMSmath'] - }, - - p_height: 1.2 / .85 // cmex10 height plus depth over .85 - - }); - }; - - /************************************************************************/ - /* - * The TeX Parser - */ - - TEX.Parse = MathJax.Object.Subclass({ - Init: function (string,env) { - this.string = string; this.i = 0; - var ENV; if (env) {ENV = {}; for (var id in env) {if (env.hasOwnProperty(id)) {ENV[id] = env[id]}}} - this.stack = TEX.Stack(ENV); - this.Parse(); - this.Push(STACKITEM.stop()); - }, - Parse: function () { - var c; - while (this.i < this.string.length) { - c = this.string.charAt(this.i++); - if (TEXDEF.special[c]) {this[TEXDEF.special[c]](c)} - else if (TEXDEF.letter.test(c)) {this.Variable(c)} - else if (TEXDEF.digit.test(c)) {this.Number(c)} - else {this.Other(c)} - } - }, - Push: function () {this.stack.Push.apply(this.stack,arguments)}, - mml: function () { - if (this.stack.Top().type !== "mml") {return null} - return this.stack.Top().data[0]; - }, - mmlToken: function (token) {return token}, // used by boldsymbol extension - - /************************************************************************/ - /* - * Handle various token classes - */ - - /* - * Lookup a control-sequence and process it - */ - ControlSequence: function (c) { - var name = this.GetCS(); - if (TEXDEF.macros[name]) { // javascript macro - var macro = TEXDEF.macros[name]; - if (!(macro instanceof Array)) {macro = [macro]} - var fn = macro[0]; if (!(fn instanceof Function)) {fn = this[fn]} - fn.apply(this,["\\"+name].concat(macro.slice(1))); - } else if (TEXDEF.mathchar0mi[name]) { // normal mathchar (mi) - var mchar = TEXDEF.mathchar0mi[name]; var def = {mathvariant: MML.VARIANT.ITALIC}; - if (mchar instanceof Array) {def = mchar[1]; mchar = mchar[0]} - this.Push(this.mmlToken(MML.mi(MML.entity("#x"+mchar)).With(def))); - } else if (TEXDEF.mathchar0mo[name]) { // normal mathchar (mo) - var mchar = TEXDEF.mathchar0mo[name]; var def = {stretchy: FALSE}; - if (mchar instanceof Array) {def = mchar[1]; def.stretchy = FALSE; mchar = mchar[0]} - this.Push(this.mmlToken(MML.mo(MML.entity("#x"+mchar)).With(def))); - } else if (TEXDEF.mathchar7[name]) { // mathchar in current family - var mchar = TEXDEF.mathchar7[name]; var def = {mathvariant: MML.VARIANT.NORMAL}; - if (mchar instanceof Array) {def = mchar[1]; mchar = mchar[0]} - if (this.stack.env.font) {def.mathvariant = this.stack.env.font} - this.Push(this.mmlToken(MML.mi(MML.entity("#x"+mchar)).With(def))); - } else if (TEXDEF.delimiter["\\"+name] != null) { // delimiter - var delim = TEXDEF.delimiter["\\"+name], def = {}; - if (delim instanceof Array) {def = delim[1]; delim = delim[0]} - if (delim.length === 4) {delim = MML.entity('#x'+delim)} else {delim = MML.chars(delim)} - this.Push(this.mmlToken(MML.mo(delim).With({fence: FALSE, stretchy: FALSE}).With(def))); - } else { // error - TEX.Error("Undefined control sequence \\"+name); - } - }, - - /* - * Handle a variable (a single letter) - */ - Variable: function (c) { - var def = {}; if (this.stack.env.font) {def.mathvariant = this.stack.env.font} - this.Push(this.mmlToken(MML.mi(MML.chars(c)).With(def))); - }, - - /* - * Determine the extent of a number (pattern may need work) - */ - Number: function (c) { - var mml, n = this.string.slice(this.i-1).match(TEXDEF.number); - if (n) {mml = MML.mn(n[0].replace(/[{}]/g,"")); this.i += n[0].length - 1} - else {mml = MML.mo(MML.chars(c))} - if (this.stack.env.font) {mml.mathvariant = this.stack.env.font} - this.Push(this.mmlToken(mml)); - }, - - /* - * Handle { and } - */ - Open: function (c) {this.Push(STACKITEM.open())}, - Close: function (c) {this.Push(STACKITEM.close())}, - - /* - * Handle tilde and spaces - */ - Tilde: function (c) {this.Push(MML.mtext(MML.chars(" ")))}, - Space: function (c) {}, - - /* - * Handle ^, _, and ' - */ - Superscript: function (c) { - var position, base = this.stack.Prev(); if (!base) {base = MML.mi("")} - if (base.isEmbellishedWrapper) {base = base.data[0].data[0]} - if (base.type === "msubsup") { - if (base.data[base.sup]) { - if (!base.data[base.sup].isPrime) {TEX.Error("Double exponent: use braces to clarify")} - base = MML.msubsup(base,null,null); - } - position = base.sup; - } else if (base.movesupsub) { - if (base.type !== "munderover" || base.data[base.over]) - {base = MML.munderover(base,null,null).With({movesupsub:TRUE})} - position = base.over; - } else { - base = MML.msubsup(base,null,null); - position = base.sup; - } - this.Push(STACKITEM.subsup(base).With({position: position})); - }, - Subscript: function (c) { - var position, base = this.stack.Prev(); if (!base) {base = MML.mi("")} - if (base.isEmbellishedWrapper) {base = base.data[0].data[0]} - if (base.type === "msubsup") { - if (base.data[base.sub]) {TEX.Error("Double subscripts: use braces to clarify")} - position = base.sub; - } else if (base.movesupsub) { - if (base.type !== "munderover" || base.data[base.under]) - {base = MML.munderover(base,null,null).With({movesupsub:TRUE})} - position = base.under; - } else { - base = MML.msubsup(base,null,null); - position = base.sub; - } - this.Push(STACKITEM.subsup(base).With({position: position})); - }, - PRIME: String.fromCharCode(0x2032), SMARTQUOTE: String.fromCharCode(0x2019), - Prime: function (c) { - var base = this.stack.Prev(); if (!base) {base = MML.mi()} - if (base.type === "msubsup" && base.data[base.sup]) - {TEX.Error("Prime causes double exponent: use braces to clarify")} - var sup = ""; this.i--; - do {sup += this.PRIME; this.i++, c = this.GetNext()} - while (c === "'" || c === this.SMARTQUOTE); - sup = this.mmlToken(MML.mo(MML.chars(sup)).With({isPrime: TRUE, variantForm: TEX.isSTIX})); - this.Push(MML.msubsup(base,null,sup)); - }, - - /* - * Handle comments - */ - Comment: function (c) { - while (this.i < this.string.length && this.string.charAt(this.i) != "\n") {this.i++} - }, - - /* - * Handle hash marks outside of definitions - */ - Hash: function (c) { - TEX.Error("You can't use 'macro parameter character #' in math mode"); - }, - - /* - * Handle other characters (as <mo> elements) - */ - Other: function (c) { - var def = {stretchy: false}, mo; - if (this.stack.env.font) {def.mathvariant = this.stack.env.font} - if (TEXDEF.remap[c]) { - c = TEXDEF.remap[c]; - if (c instanceof Array) {def = c[1]; c = c[0]} - mo = MML.mo(MML.entity('#x'+c)); - } else { - mo = MML.mo(c); - } - if (mo.autoDefault("texClass",true) == "") {mo = MML.TeXAtom(mo)} - this.Push(this.mmlToken(mo.With(def))); - }, - - /************************************************************************/ - /* - * Macros - */ - - SetFont: function (name,font) {this.stack.env.font = font}, - SetStyle: function (name,texStyle,style,level) { - this.stack.env.style = texStyle; this.stack.env.level = level; - this.Push(STACKITEM.style().With({styles: {displaystyle: style, scriptlevel: level}})); - }, - SetSize: function (name,size) { - this.stack.env.size = size; - this.Push(STACKITEM.style().With({styles: {mathsize: size+"em"}})); // convert to absolute? - }, - - Color: function (name) { - var color = this.GetArgument(name); - var old = this.stack.env.color; this.stack.env.color = color; - var math = this.ParseArg(name); - if (old) {this.stack.env.color} else {delete this.stack.env.color} - this.Push(MML.mstyle(math).With({mathcolor: color})); - }, - - Spacer: function (name,space) { - this.Push(MML.mspace().With({width: space, mathsize: MML.SIZE.NORMAL, scriptlevel:1})); - }, - - LeftRight: function (name) { - this.Push(STACKITEM[name.substr(1)]().With({delim: this.GetDelimiter(name)})); - }, - - NamedOp: function (name,limits,id) { - var underover = (limits != null && limits === 0 ? FALSE : TRUE); - if (!id) {id = name.substr(1)}; limits = ((limits || limits == null) ? TRUE : FALSE); - id = id.replace(/&thinsp;/,String.fromCharCode(0x2006)); - var mml = MML.mo(id).With({ - movablelimits: limits, - movesupsub: underover, - form: MML.FORM.PREFIX, - texClass: MML.TEXCLASS.OP - }); - mml.useMMLspacing &= ~mml.SPACE_ATTR.form; // don't count this explicit form setting - this.Push(this.mmlToken(mml)); - }, - Limits: function (name,limits) { - var op = this.stack.Prev("nopop"); - if (op.texClass !== MML.TEXCLASS.OP) {TEX.Error(name+" is allowed only on operators")} - op.movesupsub = (limits ? TRUE : FALSE); - op.movablelimits = FALSE; - }, - - Over: function (name,open,close) { - var mml = STACKITEM.over().With({name: name}); - if (open || close) { - mml.open = open; mml.close = close; - } else if (name.match(/withdelims$/)) { - mml.open = this.GetDelimiter(name); - mml.close = this.GetDelimiter(name); - } - if (name.match(/^\\above/)) {mml.thickness = this.GetDimen(name)} - else if (name.match(/^\\atop/) || open || close) {mml.thickness = 0} - this.Push(mml); - }, - - Frac: function (name) { - var num = this.ParseArg(name); - var den = this.ParseArg(name); - this.Push(MML.mfrac(num,den)); - }, - - Sqrt: function (name) { - var n = this.GetBrackets(name), mml = this.ParseArg(name); - if (n == "") {mml = MML.msqrt.apply(MML,mml.array())} - else {mml = MML.mroot(mml,this.parseRoot(n))} - this.Push(mml); - }, - Root: function (name) { - var n = this.GetUpTo(name,"\\of"); - var arg = this.ParseArg(name); - this.Push(MML.mroot(arg,this.parseRoot(n))); - }, - parseRoot: function (n) { - var env = this.stack.env, inRoot = env.inRoot; env.inRoot = true; - var parser = TEX.Parse(n,env); n = parser.mml(); var global = parser.stack.global; - if (global.leftRoot || global.upRoot) { - n = MML.mpadded(n); - if (global.leftRoot) {n.width = global.leftRoot} - if (global.upRoot) {n.voffset = global.upRoot; n.height = global.upRoot} - } - env.inRoot = inRoot; - return n; - }, - MoveRoot: function (name,id) { - if (!this.stack.env.inRoot) TEX.Error(name+" can appear only within a root"); - if (this.stack.global[id]) TEX.Error("Multiple use of "+name); - var n = this.GetArgument(name); - if (!n.match(/-?[0-9]+/)) TEX.Error("The argument to "+name+" must be an integer"); - n = (n/15)+"em"; - if (n.substr(0,1) !== "-") {n = "+"+n} - this.stack.global[id] = n; - }, - - Accent: function (name,accent,stretchy) { - var c = this.ParseArg(name); - var mml = this.mmlToken(MML.mo(MML.entity("#x"+accent)).With({accent: TRUE})); - mml.stretchy = (stretchy ? TRUE : FALSE); - this.Push(MML.munderover(c,null,mml).With({accent: TRUE})); - }, - - UnderOver: function (name,c,stack) { - var pos = {o: "over", u: "under"}[name.charAt(1)]; - var base = this.ParseArg(name); - var mml = MML.munderover(base,null,null); - if (stack) {mml.movesupsub = TRUE} - mml.data[mml[pos]] = - this.mmlToken(MML.mo(MML.entity("#x"+c)).With({stretchy: TRUE, accent: (pos == "under")})); - this.Push(mml); - }, - - Overset: function (name) { - var top = this.ParseArg(name), base = this.ParseArg(name); - this.Push(MML.munderover(base,null,top)); - }, - Underset: function (name) { - var bot = this.ParseArg(name), base = this.ParseArg(name); - this.Push(MML.munderover(base,bot,null)); - }, - - TeXAtom: function (name,mclass) { - var def = {texClass: mclass}; - if (mclass == MML.TEXCLASS.OP) {def.movesupsub = def.movablelimits = TRUE} - this.Push(MML.TeXAtom(this.ParseArg(name)).With(def)); - }, - - Strut: function (name) { - this.Push(MML.mpadded().With({height: "8.6pt", depth: "3pt", width: 0})); - }, - - Phantom: function (name,v,h) { - var box = MML.mphantom(this.ParseArg(name)); - if (v || h) { - box = MML.mpadded(box); - if (h) {box.height = box.depth = 0} - if (v) {box.width = 0} - } - this.Push(box); - }, - - Smash: function (name) { - var bt = this.trimSpaces(this.GetBrackets(name)); - var smash = MML.mpadded(this.ParseArg(name)); - switch (bt) { - case "b": smash.depth = 0; break; - case "t": smash.height = 0; break; - default: smash.height = smash.depth = 0; - } - this.Push(smash); - }, - - Lap: function (name) { - var mml = MML.mpadded(this.ParseArg(name)).With({width: 0}); - if (name === "\\llap") {mml.lspace = "-1 width"} - this.Push(mml); - }, - - RaiseLower: function (name) { - var h = this.GetDimen(name); - var item = STACKITEM.position().With({name: name, move: 'vertical'}); - if (h.charAt(0) === '-') {h = h.slice(1); name = {raise: "\\lower", lower: "\\raise"}[name.substr(1)]} - if (name === "\\lower") {item.dh = '-'+h; item.dd = h} else {item.dh = h; item.dd = '-'+h} - this.Push(item); - }, - - MoveLeftRight: function (name) { - var h = this.GetDimen(name); - var nh = (h.charAt(0) === '-' ? h.slice(1) : '-'+h); - if (name === "\\moveleft") {var tmp = h; h = nh; nh = tmp} - this.Push(STACKITEM.position().With({ - name: name, move: 'horizontal', - left: MML.mspace().With({width: h, mathsize: MML.SIZE.NORMAL, scriptlevel:1}), - right: MML.mspace().With({width: nh, mathsize: MML.SIZE.NORMAL, scriptlevel:1}) - })); - }, - - Hskip: function (name) { - this.Push(MML.mspace().With({ - width: this.GetDimen(name), mathsize: MML.SIZE.NORMAL, scriptlevel:0 - })); - }, - - Rule: function (name,style) { - var w = this.GetDimen(name), - h = this.GetDimen(name), - d = this.GetDimen(name); - var mml, type = "mspace", def = {width:w, height:h, depth:d}; - if (style !== 'blank') { - def.mathbackground = (this.stack.env.color || "black"); - type = "mpadded"; - } - mml = (MML[type])().With(def); - this.Push(mml); - }, - - MakeBig: function (name,mclass,size) { - size *= TEXDEF.p_height; - size = String(size).replace(/(\.\d\d\d).+/,'$1')+"em"; - var delim = this.GetDelimiter(name); - this.Push(MML.TeXAtom(MML.mo(delim).With({ - minsize: size, maxsize: size, scriptlevel: 0, - fence: TRUE, stretchy: TRUE, symmetric: TRUE - })).With({texClass: mclass})); - }, - - BuildRel: function (name) { - var top = this.ParseUpTo(name,"\\over"); - var bot = this.ParseArg(name); - this.Push(MML.TeXAtom(MML.munderover(bot,null,top)).With({mclass: MML.TEXCLASS.REL})); - }, - - HBox: function (name,style) { - this.Push.apply(this,this.InternalMath(this.GetArgument(name),style)); - }, - - FBox: function (name) { - this.Push(MML.menclose.apply(MML,this.InternalMath(this.GetArgument(name)))); - }, - - Require: function (name) { - var file = this.GetArgument(name); // @@@ FIXME: check for OK URL - this.Extension(null,file); - }, - - Extension: function (name,file,array) { - if (name && !typeof(name) === "string") {name = name.name} - file = TEX.extensionDir+"/"+file; - if (!file.match(/\.js$/)) {file += ".js"} - if (!MathJax.Ajax.loaded[MathJax.Ajax.fileURL(file)]) { - if (name != null) {delete TEXDEF[array || 'macros'][name.replace(/^\\/,"")]} - MathJax.Hub.RestartAfter(MathJax.Ajax.Require(file)); - } - }, - - Macro: function (name,macro,argcount) { - if (argcount) { - var args = []; - for (var i = 0; i < argcount; i++) {args.push(this.GetArgument(name))} - macro = this.SubstituteArgs(args,macro); - } - this.string = this.AddArgs(macro,this.string.slice(this.i)); - this.i = 0; - }, - - Matrix: function (name,open,close,align,spacing,vspacing,style) { - var c = this.GetNext(); if (c === "") {TEX.Error("Missing argument for "+name)} - if (c === "{") {this.i++} else {this.string = c+"}"+this.string.slice(this.i+1); this.i = 0} - var array = STACKITEM.array().With({ - requireClose: TRUE, - arraydef: { - rowspacing: (vspacing||"3pt"), - columnspacing: (spacing||"1em") - } - }); - if (open || close) {array.open = open; array.close = close} - if (style === "D") {array.arraydef.displaystyle = TRUE} - if (align != null) {array.arraydef.columnalign = align} - this.Push(array); - }, - - Entry: function (name) { - this.Push(STACKITEM.cell().With({isEntry: TRUE, name: name})); - }, - - Cr: function (name) { - this.Push(STACKITEM.cell().With({isCR: TRUE, name: name})); - }, - - /************************************************************************/ - /* - * LaTeX environments - */ - - Begin: function (name) { - var env = this.GetArgument(name); - if (env.match(/[^a-z*]/i)) {TEX.Error('Invalid environment name "'+env+'"')} - if (!TEXDEF.environment[env]) {TEX.Error('Unknown environment "'+env+'"')} - var cmd = TEXDEF.environment[env]; if (!(cmd instanceof Array)) {cmd = [cmd]} - var mml = STACKITEM.begin().With({name: env, end: cmd[1], parse:this}); - if (cmd[0] && this[cmd[0]]) {mml = this[cmd[0]].apply(this,[mml].concat(cmd.slice(2)))} - this.Push(mml); - }, - End: function (name) { - this.Push(STACKITEM.end().With({name: this.GetArgument(name)})); - }, - - Equation: function (begin,row) {return row}, - - ExtensionEnv: function (begin,file) {this.Extension(begin.name,file,"environment")}, - - Array: function (begin,open,close,align,spacing,vspacing,style,raggedHeight) { - if (!align) {align = this.GetArgument("\\begin{"+begin.name+"}")} - var lines = align.replace(/[^clr|]/g,'').replace(/[^|]\|/g,'|').split('').join(' '); - align = align.replace(/[^clr]/g,'').split('').join(' '); - align = align.replace(/l/g,'left').replace(/r/g,'right').replace(/c/g,'center'); - var array = STACKITEM.array().With({ - arraydef: { - columnalign: align, - columnspacing: (spacing||"1em"), - rowspacing: (vspacing||"3pt") - } - }); - // FIXME: do something about initial (and terminal?) vertical line - if (lines.match(/\|/)) - {array.arraydef.columnlines = lines.replace(/[^| ]/g,'none').replace(/\|/g,'solid')} - if (open) {array.open = this.convertDelimiter(open)} - if (close) {array.close = this.convertDelimiter(close)} - if (style === "D") {array.arraydef.displaystyle = TRUE} - if (style === "S") {array.arraydef.scriptlevel = 1} // FIXME: should use mstyle? - if (raggedHeight) {array.arraydef.useHeight = FALSE} - this.Push(begin); - return array; - }, - - /************************************************************************/ - /* - * String handling routines - */ - - /* - * Convert delimiter to character - */ - convertDelimiter: function (c) { - if (c) {c = TEXDEF.delimiter[c]} - if (c == null) {return null} - if (c instanceof Array) {c = c[0]} - if (c.length === 4) {c = String.fromCharCode(parseInt(c,16))} - return c; - }, - - /* - * Trim spaces from a string - */ - trimSpaces: function (text) { - if (typeof(text) != 'string') {return text} - return text.replace(/^\s+|\s+$/g,''); - }, - - /* - * Check if the next character is a space - */ - nextIsSpace: function () { - return this.string.charAt(this.i).match(/[ \n\r\t]/); - }, - - /* - * Get the next non-space character - */ - GetNext: function () { - while (this.nextIsSpace()) {this.i++} - return this.string.charAt(this.i); - }, - - /* - * Get and return a control-sequence name - */ - GetCS: function () { - var CS = this.string.slice(this.i).match(/^([a-z]+|.) ?/i); - if (CS) {this.i += CS[1].length; return CS[1]} else {this.i++; return " "} - }, - - /* - * Get and return a TeX argument (either a single character or control sequence, - * or the contents of the next set of braces). - */ - GetArgument: function (name,noneOK) { - switch (this.GetNext()) { - case "": - if (!noneOK) {TEX.Error("Missing argument for "+name)} - return null; - case '}': - if (!noneOK) {TEX.Error("Extra close brace or missing open brace")} - return null; - case '\\': - this.i++; return "\\"+this.GetCS(); - case '{': - var j = ++this.i, parens = 1; - while (this.i < this.string.length) { - switch (this.string.charAt(this.i++)) { - case '\\': this.i++; break; - case '{': parens++; break; - case '}': - if (parens == 0) {TEX.Error("Extra close brace")} - if (--parens == 0) {return this.string.slice(j,this.i-1)} - break; - } - } - TEX.Error("Missing close brace"); - break; - } - return this.string.charAt(this.i++); - }, - - /* - * Get an optional LaTeX argument in brackets - */ - GetBrackets: function (name) { - if (this.GetNext() != '[') {return ''}; - var j = ++this.i, parens = 0; - while (this.i < this.string.length) { - switch (this.string.charAt(this.i++)) { - case '{': parens++; break; - case '\\': this.i++; break; - case '}': - if (parens-- <= 0) {TEX.Error("Extra close brace while looking for ']'")} - break; - case ']': - if (parens == 0) {return this.string.slice(j,this.i-1)} - break; - } - } - TEX.Error("Couldn't find closing ']' for argument to "+name); - }, - - /* - * Get the name of a delimiter (check it in the delimiter list). - */ - GetDelimiter: function (name) { - while (this.nextIsSpace()) {this.i++} - var c = this.string.charAt(this.i); - if (this.i < this.string.length) { - this.i++; if (c == "\\") {c += this.GetCS(name)} - if (TEXDEF.delimiter[c] != null) {return this.convertDelimiter(c)} - } - TEX.Error("Missing or unrecognized delimiter for "+name); - }, - - /* - * Get a dimension (including its units). - */ - GetDimen: function (name) { - if (this.nextIsSpace()) {this.i++} - if (this.string.charAt(this.i) == '{') { - var dimen = this.GetArgument(name); - if (dimen.match(/^\s*([-+]?(\.\d+|\d+(\.\d*)?))\s*(pt|em|ex|mu|px|mm|cm|in|pc)\s*$/)) - {return dimen.replace(/ /g,"")} - } else { - var dimen = this.string.slice(this.i); - var match = dimen.match(/^\s*(([-+]?(\.\d+|\d+(\.\d*)?))\s*(pt|em|ex|mu|px|mm|cm|in|pc)) ?/); - if (match) { - this.i += match[0].length; - return match[1].replace(/ /g,""); - } - } - TEX.Error("Missing dimension or its units for "+name); - }, - - /* - * Get everything up to the given control sequence (token) - */ - GetUpTo: function (name,token) { - while (this.nextIsSpace()) {this.i++} - var j = this.i, k, c, parens = 0; - while (this.i < this.string.length) { - k = this.i; c = this.string.charAt(this.i++); - switch (c) { - case '\\': c += this.GetCS(); break; - case '{': parens++; break; - case '}': - if (parens == 0) {TEX.Error("Extra close brace while looking for "+token)} - parens--; - break; - } - if (parens == 0 && c == token) {return this.string.slice(j,k)} - } - TEX.Error("Couldn't find "+token+" for "+name); - }, - - /* - * Parse various substrings - */ - ParseArg: function (name) {return TEX.Parse(this.GetArgument(name),this.stack.env).mml()}, - ParseUpTo: function (name,token) {return TEX.Parse(this.GetUpTo(name,token),this.stack.env).mml()}, - - /* - * Break up a string into text and math blocks - * @@@ FIXME: skip over braced groups? @@@ - * @@@ FIXME: pass environment to TEX.Parse? @@@ - */ - InternalMath: function (text,level) { - var def = {displaystyle: FALSE}; if (level != null) {def.scriptlevel = level} - if (this.stack.env.font) {def.mathvariant = this.stack.env.font} - if (!text.match(/\$|\\\(/)) {return [MML.mtext(MML.chars(text)).With(def)]} - var i = 0, k = 0, c, match = ''; - var mml = []; - while (i < text.length) { - c = text.charAt(i++); - if (c === '$') { - if (match === '$') { - mml.push(MML.TeXAtom(TEX.Parse(text.slice(k,i-1)).mml().With(def))); - match = ''; k = i; - } else { - if (k < i-1) {mml.push(MML.mtext(MML.chars(text.slice(k,i-1))).With(def))} - match = '$'; k = i; - } - } else if (c === '\\') { - c = text.charAt(i++); - if (c === '(' && match == '') { - if (k < i-2) {mml.push(MML.mtext(MML.chars(text.slice(k,i-2))).With(def))} - match = ')'; k = i; - } else if (c === ')' && match === ')') { - mml.push(MML.TeXAtom(TEX.Parse(text.slice(k,i-2)).mml().With(def))); - match = ''; k = i; - } - } - } - if (match !== '') {TEX.Error("Math not terminated in text box")} - if (k < text.length) {mml.push(MML.mtext(MML.chars(text.slice(k))).With(def))} - return mml; - }, - - /* - * Replace macro paramters with their values - */ - SubstituteArgs: function (args,string) { - var text = ''; var newstring = ''; var c; var i = 0; - while (i < string.length) { - c = string.charAt(i++); - if (c === "\\") {text += c + string.charAt(i++)} - else if (c === '#') { - c = string.charAt(i++); - if (c === '#') {text += c} else { - if (!c.match(/[1-9]/) || c > args.length) - {TEX.Error("Illegal macro parameter reference")} - newstring = this.AddArgs(this.AddArgs(newstring,text),args[c-1]); - text = ''; - } - } else {text += c} - } - return this.AddArgs(newstring,text); - }, - - /* - * Make sure that macros are followed by a space if their names - * could accidentally be continued into the following text. - */ - AddArgs: function (s1,s2) { - if (s2.match(/^[a-z]/i) && s1.match(/(^|[^\\])(\\\\)*\\[a-z]+$/i)) {s1 += ' '} - return s1+s2; - } - - }); - - /************************************************************************/ - - TEX.Augment({ - Translate: function (script) { - var mml, math = script.innerHTML.replace(/^\s+/,"").replace(/\s+$/,""); - if (MathJax.Hub.Browser.isKonqueror) - {math = math.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&")} - var displaystyle = - (script.type.replace(/\n/g," ").match(/(;|\s|\n)mode\s*=\s*display(;|\s|\n|$)/) != null); - math = TEX.prefilterMath(math,displaystyle,script); - try { - mml = TEX.Parse(math).mml(); -// mml = MML.semantics(mml,MML.annotation(math).With({encoding:"application:x-tex"})); - } catch(err) { - if (!err.texError) {throw err} - mml = this.formatError(err,math,displaystyle,script); - } - if (mml.inferred) {mml = MML.apply(MathJax.ElementJax,mml.data)} else {mml = MML(mml)} - if (displaystyle) {mml.root.display = "block"} - return mml; - }, - prefilterMath: function (math,displaystyle,script) {return math}, - formatError: function (err,math,displaystyle,script) { - return MML.merror(err.message.replace(/\n.*/,"")); - }, - Error: function (message) { - throw MathJax.Hub.Insert(Error(message),{texError: TRUE}); - }, - Macro: function (name,def,argn) { - TEXDEF.macros[name] = ['Macro'].concat([].slice.call(arguments,1)); - } - }); - - TEX.loadComplete("jax.js"); - -})(MathJax.InputJax.TeX);