MathJax和括号的渲染

时间:2017-01-09 15:38:21

标签: javascript math mathjax

我正在网站上混合使用LaTeX和计算器数学输入以及MathJax输出。我一直试图弄清楚如何让MathJax在5 ^(x)和A /(2 * pi * h + 2 * pi)等表达式周围显示括号。

ASCIIMath输入假定()在用户的输入中有^或/时进行分组,因此不显示括号。需要使用((和))转义这些括号。这会影响用户输入不匹配的括号。由于该网站的目的是教孩子数学,因此他们必须清楚地看到他们输入的内容。

有没有人为我提供某种解决方案?我目前有一个MathJax的扩展(用简单的JS编写),它将一些输入转换为更正确的ASCIIMath,然后可以正确处理。

我可以给出的最好的MWE在我对这篇文章的编辑中给出。

修改 我有以下几乎可以工作的JS代码,但在少数情况下会产生意想不到的结果:

filterExponentBrackets: function (str) {
      if ((/\^|\/|sqrt/g).test(str)) {
        if ((/\(|\)/g).test(str)) {
          var openingBrackets = str.split("(").length-1;
              closingBrackets = str.split(")").length-1;
              startString = str.substr(0, str.indexOf('('));
              midString = str.substr(str.indexOf('('), str.indexOf(')'));
              endString = str.substr(str.indexOf(')') + closingBrackets);
          if (openingBrackets === closingBrackets) {
              str = startString + '(' + midString + ')' + endString;
          } else {
            if (openingBrackets < closingBrackets) {
              // Some issues here around no opening and some closing
              str = startString + '(' + midString + ')' + endString;
            } else {
              // Think a bit more about this case, need to not show the frac or sqrt or ^
              str = str;
            }
          }
        }
      }
  return str;
  }

以下mocha测试:

describe('Mismatched bracket fixes', function() {
    it('Fractions with extra closing brackets', function () {
      assert.equal(mathsFilters.filterExponentBrackets("A/(2*pi*h+2*h))"), "A/((2*pi*h+2*h)))")
    });

    it('Fractions with extra opening brackets', function () {
      assert.equal(mathsFilters.filterExponentBrackets("A/((2*pi*h+2*h)"), "A/((2*pi*h+2*h)))")
    });

    it('Fractions with equal opening and closing brackets', function () {
      assert.equal(mathsFilters.filterExponentBrackets("A/(2*pi*h+2*h)"), "A/((2*pi*h+2*h))")
    });

    it('Fractions with only closing brackets', function () {
      assert.equal(mathsFilters.filterExponentBrackets("A/2*pi*h+2*h)"), "A/2*pi*h+2*h)")
    });

    it('Fractions with only opening brackets', function () {
      assert.equal(mathsFilters.filterExponentBrackets("A/(2*pi*h+2*h"), "A/(2*pi*h+2*h")
    });
  });

额外的开口支架和仅有开口或仅有关闭支架的情况并不完全正确。对于仅打开或关闭括号,分数应为A / 2个。额外的开口括号需要以某种方式显示那些额外的括号。

0 个答案:

没有答案