commit f42c71feca08997cccd1851e64ba8f75ba62cde3
parent 4c8158ca36dd45b5be3a8a8d530a08f8bd4eae75
Author: Davide P. Cervone <dpvc@union.edu>
Date: Thu, 16 Jul 2015 15:39:05 -0400
Merge branch 'issue956' into develop. Issue #956.
Diffstat:
1 file changed, 42 insertions(+), 16 deletions(-)
diff --git a/unpacked/extensions/TeX/mhchem.js b/unpacked/extensions/TeX/mhchem.js
@@ -42,10 +42,13 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
var CE = MathJax.Object.Subclass({
string: "", // the \ce string being parsed
i: 0, // the current position in the string
- tex: "", // the processed TeX result
+ tex: "", // the partially processed TeX result
+ TEX: "", // the full TeX result
atom: false, // last processed token is an atom
sup: "", // pending superscript
sub: "", // pending subscript
+ presup: "", // pending pre-superscript
+ presub: "", // pending pre-subscript
//
// Store the string when a CE object is created
@@ -122,7 +125,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
else {this["Parse"+(this.ParseTable[c]||"Other")](c)}
}
this.FinishAtom();
- return this.tex;
+ return this.TEX;
},
//
@@ -299,22 +302,24 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
// Handle the super and subscripts for an atom
//
FinishAtom: function () {
- if (this.sup || this.sub) {
- if (this.sup && this.sub && !this.atom) {
- //
- // right-justify super- and subscripts when they are before the atom
- //
- var sup = this.sup, sub = this.sub;
- if (!sup.match(/\d/)) {sup += "\\vphantom{0}"} // force common heights
- if (!sub.match(/\d/)) {sub += "\\vphantom{0}"}
- this.tex += "\\raise 1pt{\\scriptstyle\\begin{CEscriptstack}"+sup+"\\\\"+
- sub+"\\end{CEscriptstack}}\\kern-.125em ";
+ if (this.sup || this.sub || this.presup || this.presub) {
+ if (!this.atom && this.tex === "") {
+ this.presup = this.sup, this.presub = this.sub; // save for later
+ this.sub = this.sup = "";
+ return;
+ }
+ if (this.sub && !this.sup) {this.sup = "\\Space{0pt}{0pt}{.2em}"} // forces subscripts to align properly
+ if (this.presup || this.presub) {
+ if (!this.presup && !this.sup) {this.presup = "\\Space{0pt}{0pt}{.2em}"}
+ this.tex = "\\CEprescripts{"+(this.presub||"\\CEnone")+"}{"+(this.presup||"\\CEnone")+"}"
+ + "{"+this.tex+"}{"+(this.sub||"\\CEnone")+"}{"+(this.sup||"\\CEnone")+"}";
+ this.presub = this.presup = "";
} else {
- if (!this.sup) {this.sup = "\\Space{0pt}{0pt}{.2em}"} // forces subscripts to align properly
this.tex += "^{"+this.sup+"}_{"+this.sub+"}";
}
this.sup = this.sub = "";
}
+ this.TEX += this.tex; this.tex = "";
this.atom = false;
},
@@ -376,7 +381,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
ce: 'CE',
cf: 'CE',
cee: 'CE',
-
+
//
// Make these load AMSmath package (redefined below when loaded)
//
@@ -396,6 +401,12 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
hyphen: ["Macro","\\text{-}"],
//
+ // Handle prescripts and none
+ //
+ CEprescripts: "CEprescripts",
+ CEnone: "CEnone",
+
+ //
// Needed for \bond for the ~ forms
//
tripledash: ["Macro","\\raise3mu{\\tiny\\text{-}\\kern2mu\\text{-}\\kern2mu\\text{-}}"]
@@ -405,8 +416,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
// Needed for \bond for the ~ forms
//
environment: {
- CEstack: ['Array',null,null,null,'r',null,"0.001em",'T',1],
- CEscriptstack: ['Array',null,null,null,'r',null,"0.2em",'S',1]
+ CEstack: ['Array',null,null,null,'r',null,"0.001em",'T',1]
}
},null,true);
@@ -445,6 +455,22 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
var arg = this.GetArgument(name);
var tex = CE(arg).Parse();
this.string = tex + this.string.substr(this.i); this.i = 0;
+ },
+
+ //
+ // Implements \CEprescripts{presub}{presup}{base}{sub}{sup}
+ //
+ CEprescripts: function (name) {
+ var presub = this.ParseArg(name),
+ presup = this.ParseArg(name),
+ base = this.ParseArg(name),
+ sub = this.ParseArg(name),
+ sup = this.ParseArg(name);
+ var MML = MathJax.ElementJax.mml;
+ this.Push(MML.mmultiscripts(base,sub,sup,MML.mprescripts(),presub,presup));
+ },
+ CEnone: function (name) {
+ this.Push(MathJax.ElementJax.mml.none());
}
});