我正在网站上混合使用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个。额外的开口括号需要以某种方式显示那些额外的括号。