我正在开发一个基于 html 的计算器,我想渲染一个表达式,然后评估它,所有这些都必须在 Javascript 中完成。我更喜欢用 LaTeX 编写表达式,并且可以交互地编辑呈现的表达式,但其他语言也可以工作。
我之前尝试过的是使用 MathQuill 以交互方式呈现表达式,然后使用 MathJS 对其进行评估。然而,这在某种程度上是可行的,因为这两个包的设计目标不同(MathQuill 呈现 LaTeX,而 MathJS 具有自定义数学语法),它不能很好地工作(例如,如果用户输入\frac{5}{17*x}
并假设它是正确的语法,然后评估它并从 MathJS 中得到一个错误)。
目前,我看到了三种方法:
- 继续我所拥有的(或者切换到 MathJax- 哪个更好?)。
- 找到一个同时进行渲染和评估的工具(无论是乳胶还是其他语言)
- 找到两个使用接近(如果不相同)语法进行渲染和评估的工具
- 按照这里的建议编写我自己的渲染和评估工具。我宁愿不这样做,因为它看起来有点乏味,而且我不想重新发明轮子。
这样做的最糟糕的方法是什么?
更新 1:查看altJS提供的替代语言列表后,我想我可以使用 Python、Ruby 或 Basic 作为用户输入的语言。如果我这样做了,它将为渲染它打开很多可能性(从技术上讲,它不是“渲染”,而是想想那里有多少语法荧光笔)。但是,我不希望用户访问这些语言的更高级的元素,因为这会给我的用户带来混乱,而且它也可能不安全(比如使用eval
)。我只希望用户能够使用数学运算、变量(仅我指定他们可以使用的以及用户创建的)和函数(仅我指定他们可以使用的以及用户定义的)。有没有办法限制可以使用的语言子集?
更新 2:我在 altJS 页面上查看了更多内容,并意识到几乎所有语言都旨在将语言 XYZ 编译为 JavaScript,然后在页面上运行 JavaScript,而不是在页面上运行语言XYZ。我没有仔细研究过每一个,但他们中的大多数似乎都是这样的。其他的,如 Brython,似乎被设计为在浏览器中运行语言 XYZ,但作为 JavaScript 的替代/补充,而不是作为用户的输入语言。是否有一些解决方法,以便我可以使用这些方法作为输入?
更新 3:感谢@SpaceDog 提供这些信息,并指出我没有具体说明用户应该能够实现什么。所以,这是我想要实现的功能:
- 基本运算(加法、减法、乘法、除法/分数、取幂、根、模)
- 函数(三角函数、对数等)
- 常数(e、pi 等)
- 变量(赋值、重新赋值和使用它们)
- 用户定义函数
LaTeXCalc似乎满足所有这些要求,除了最后一个。此外,它似乎不在 Javascript 中。
这让我想到了另一个想法:使用类似 MathJax 的东西进行演示,然后使用Wolfram Alpha API来实际处理计算。好处是它将为输入和输出提供更高级的选项。但是,该应用程序将变得无用(为什么不直接使用 wolframalpha.com,如果计算器实际上只是一个克隆?),它需要花钱,并且该应用程序无法离线工作(它是一个桌面应用程序,用 HTML 编写/CSS/JS)。对此有什么想法?