我正在尝试在this site上构建一个功能,用户将在文本区域中输入数学表达式,然后将其呈现为MathML格式。
示例:
Input expression string: cos(x^3)
Then the expression should be converted to MathML as:
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mi>cos</mi>
<mo>⁡</mo>
<mo>(</mo>
<msup>
<mi>x</mi>
<mn>3</mn>
</msup>
<mo>)</mo>
</mrow>
</math>
我正在尝试为这件事找到c#解决方案,并为此搜索了很多内容,但没有找到太多帮助。 如果有人知道任何资源开始使用此功能,请告诉我。 任何帮助将不胜感激。
答案 0 :(得分:4)
我从之前的解析器中为MathML解析器创建了一个基本表达式。您可以下载或分叉result here at BitBucket。 (下载左侧链接)。
使用ToMathML(expression)
类的Parser
方法将表达式转换为MathML。
它还附带了一个用于测试解析器的命令行测试程序,生成MathML的命令是ml:
calc ~:> ml cos(x^3)
<math xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mi>cos</mi><mrow><mrow><mo>(</mo><mrow><msup><mi>x</mi><mn>3</mn></msup></mrow><mo>)</mo></mrow></mrow></mrow></math>
calc ~:> ml 1/(x-1)
<math xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mfrac><mn>1</mn><mrow><mrow><mo>(</mo><mrow><mi>x</mi><mo>-</mo><mn>1</mn></mrow><mo>)</mo></mrow></mrow></mfrac></mrow></math>
calc ~:>
解析器中没有隐含的乘法,因此您必须始终在表达式中使用*(例如2 * x)。
希望它对您的场景有用。我想这取决于你需要它的功能。在它的当前形式中,解析器将表达式转换为MathML的一个非常基本的子集。
随意分叉并继续处理它。