123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- 0a1
- > /* eslint-disable */
- 5a7,22
- > * KaTeX mhchem.js
- > *
- > * This file implements a KaTeX version of mhchem version 3.3.0.
- > * It is adapted from MathJax/extensions/TeX/mhchem.js
- > * It differs from the MathJax version as follows:
- > * 1. The interface is changed so that it can be called from KaTeX, not MathJax.
- > * 2. \rlap and \llap are replaced with \mathrlap and \mathllap.
- > * 3. Four lines of code are edited in order to use \raisebox instead of \raise.
- > * 4. The reaction arrow code is simplified. All reaction arrows are rendered
- > * using KaTeX extensible arrows instead of building non-extensible arrows.
- > * 5. \tripledash vertical alignment is slightly adjusted.
- > *
- > * This code, as other KaTeX code, is released under the MIT license.
- > *
- > * /*************************************************************
- > *
- 33a51
- > // version: "3.3.0" for MathJax and KaTeX
- 35,37d52
- < MathJax.Extension["TeX/mhchem"] = {
- < version: "3.3.0"
- < };
- 39c54
- < MathJax.Hub.Register.StartupHook("TeX Jax Ready", function () {
- ---
- > // Add \ce, \pu, and \tripledash to the KaTeX macros.
- 41c56,58
- < var TEX = MathJax.InputJax.TeX;
- ---
- > katex.__defineMacro("\\ce", function(context) {
- > return chemParse(context.consumeArgs(1)[0], "ce")
- > });
- 43,47c60,62
- < //
- < // This is the main class for handing the \ce and related commands.
- < // Its main method is Parse() which takes the argument to \ce and
- < // returns the corresponding TeX string.
- < //
- ---
- > katex.__defineMacro("\\pu", function(context) {
- > return chemParse(context.consumeArgs(1)[0], "pu");
- > });
- 49,50c64,68
- < var CE = MathJax.Object.Subclass({
- < string: "", // the \ce string being parsed
- ---
- > // Needed for \bond for the ~ forms
- > // Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not
- > // a mathematical minus, U+2212. So we need that extra 0.56.
- > katex.__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu"
- > + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");
- 52,55c70
- < //
- < // Store the string when a CE object is created
- < //
- < Init: function (string) { this.string = string; },
- ---
- > import katex from "katex";
- 57,64c72,85
- < //
- < // This converts the CE string to a TeX string.
- < //
- < Parse: function (stateMachine) {
- < try {
- < return texify.go(mhchemParser.go(this.string, stateMachine));
- < } catch (ex) {
- < TEX.Error(ex);
- ---
- > //
- > // This is the main function for handing the \ce and \pu commands.
- > // It takes the argument to \ce or \pu and returns the corresponding TeX string.
- > //
- >
- > var chemParse = function (tokens, stateMachine) {
- > // Recreate the argument string from KaTeX's array of tokens.
- > var str = "";
- > var expectedLoc = tokens[tokens.length - 1].loc.start
- > for (var i = tokens.length - 1; i >= 0; i--) {
- > if(tokens[i].loc.start > expectedLoc) {
- > // context.consumeArgs has eaten a space.
- > str += " ";
- > expectedLoc = tokens[i].loc.start;
- 65a87,88
- > str += tokens[i].text;
- > expectedLoc += tokens[i].text.length;
- 67c90,92
- < });
- ---
- > var tex = texify.go(mhchemParser.go(str, stateMachine));
- > return tex;
- > };
- 1405,1406c1430,1431
- < res += "^{\\smash[t]{\\vphantom{2}}\\llap{"+(b5.b||"")+"}}";
- < res += "_{\\vphantom{2}\\llap{\\smash[t]{"+(b5.p||"")+"}}}";
- ---
- > res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{"+(b5.b||"")+"}}";
- > res += "_{\\vphantom{2}\\mathllap{\\smash[t]{"+(b5.p||"")+"}}}";
- 1508,1520c1533,1536
- < var arrow = texify._getArrow(buf.r);
- < if (b6.rd || b6.rq) {
- < if (buf.r === "<=>" || buf.r === "<=>>" || buf.r === "<<=>" || buf.r === "<-->") {
- < // arrows that cannot stretch correctly yet, https://github.com/mathjax/MathJax/issues/1491
- < arrow = "\\long"+arrow;
- < if (b6.rd) { arrow = "\\overset{"+b6.rd+"}{"+arrow+"}"; }
- < if (b6.rq) { arrow = "\\underset{\\lower7mu{"+b6.rq+"}}{"+arrow+"}"; }
- < arrow = " {}\\mathrel{"+arrow+"}{} ";
- < } else {
- < if (b6.rq) { arrow += "[{"+b6.rq+"}]"; }
- < arrow += "{"+b6.rd+"}";
- < arrow = " {}\\mathrel{\\x"+arrow+"}{} ";
- < }
- ---
- > var arrow = "\\x" + texify._getArrow(buf.r);
- > if (b6.rq) { arrow += "[{" + b6.rq + "}]"; }
- > if (b6.rd) {
- > arrow += "{" + b6.rd + "}";
- 1522c1538
- < arrow = " {}\\mathrel{\\long"+arrow+"}{} ";
- ---
- > arrow += "{}";
- 1615c1631
- < case "<-->": return "leftrightarrows";
- ---
- > case "<-->": return "rightleftarrows";
- 1618,1619c1634,1635
- < case "<=>>": return "Rightleftharpoons";
- < case "<<=>": return "Leftrightharpoons";
- ---
- > case "<=>>": return "rightequilibrium";
- > case "<<=>": return "leftequilibrium";
- 1634,1637c1650,1653
- < case "~-": return "{\\rlap{\\lower.1em{-}}\\raise.1em{\\tripledash}}";
- < case "~=": return "{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}";
- < case "~--": return "{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}";
- < case "-~-": return "{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{-}}\\tripledash}";
- ---
- > case "~-": return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";
- > case "~=": return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
- > case "~--": return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
- > case "-~-": return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";
- 1680,1770d1695
- <
- < //
- < // MathJax definitions
- < //
- < MathJax.Extension["TeX/mhchem"].CE = CE;
- <
- < /***************************************************************************/
- <
- < TEX.Definitions.Add({
- < macros: {
- < //
- < // Set up the macros for chemistry
- < //
- < ce: "CE",
- < pu: "PU",
- <
- < //
- < // Make these load AMSmath package (redefined below when loaded)
- < //
- < xleftrightarrow: ["Extension", "AMSmath"],
- < xrightleftharpoons: ["Extension", "AMSmath"],
- < xRightleftharpoons: ["Extension", "AMSmath"],
- < xLeftrightharpoons: ["Extension", "AMSmath"],
- <
- < // FIXME: These don't work well in FF NativeMML mode
- < longrightleftharpoons: ["Macro", "\\stackrel{\\textstyle{-}\\!\\!{\\rightharpoonup}}{\\smash{{\\leftharpoondown}\\!\\!{-}}}"],
- < longRightleftharpoons: ["Macro", "\\stackrel{\\textstyle{-}\\!\\!{\\rightharpoonup}}{\\smash{\\leftharpoondown}}"],
- < longLeftrightharpoons: ["Macro", "\\stackrel{\\textstyle\\vphantom{{-}}{\\rightharpoonup}}{\\smash{{\\leftharpoondown}\\!\\!{-}}}"],
- < longleftrightarrows: ["Macro", "\\stackrel{\\longrightarrow}{\\smash{\\longleftarrow}\\Rule{0px}{.25em}{0px}}"],
- <
- < //
- < // Needed for \bond for the ~ forms
- < // Not perfectly aligned when zoomed in, but on 100%
- < //
- < tripledash: ["Macro", "\\vphantom{-}\\raise2mu{\\kern2mu\\tiny\\text{-}\\kern1mu\\text{-}\\kern1mu\\text{-}\\kern2mu}"]
- < },
- < }, null, true);
- <
- < if (!MathJax.Extension["TeX/AMSmath"]) {
- < TEX.Definitions.Add({
- < macros: {
- < xrightarrow: ["Extension", "AMSmath"],
- < xleftarrow: ["Extension", "AMSmath"]
- < }
- < }, null, true);
- < }
- <
- < //
- < // These arrows need to wait until AMSmath is loaded
- < //
- < MathJax.Hub.Register.StartupHook("TeX AMSmath Ready", function () {
- < TEX.Definitions.Add({
- < macros: {
- < //
- < // Some of these are hacks for now
- < //
- < xleftrightarrow: ["xArrow", 0x2194, 6, 6],
- < xrightleftharpoons: ["xArrow", 0x21CC, 5, 7], // FIXME: doesn't stretch in HTML-CSS output
- < xRightleftharpoons: ["xArrow", 0x21CC, 5, 7], // FIXME: how should this be handled?
- < xLeftrightharpoons: ["xArrow", 0x21CC, 5, 7]
- < }
- < }, null, true);
- < });
- <
- < TEX.Parse.Augment({
- <
- < //
- < // Implements \ce and friends
- < //
- < CE: function (name) {
- < var arg = this.GetArgument(name);
- < var tex = CE(arg).Parse();
- < this.string = tex + this.string.substr(this.i); this.i = 0;
- < },
- <
- < PU: function (name) {
- < var arg = this.GetArgument(name);
- < var tex = CE(arg).Parse('pu');
- < this.string = tex + this.string.substr(this.i); this.i = 0;
- < }
- <
- < });
- <
- < //
- < // Indicate that the extension is ready
- < //
- < MathJax.Hub.Startup.signal.Post("TeX mhchem Ready");
- <
- < });
- <
- < MathJax.Ajax.loadComplete("[mhchem]/unpacked/mhchem.js");
|