【发布时间】:2013-11-28 08:36:35
【问题描述】:
我正在开发一个基于 html 的计算器,我想渲染一个表达式,然后计算它,所有这些都必须在 Javascript 中完成。我更喜欢用 LaTeX 编写表达式,并且可以交互地编辑呈现的表达式,但其他语言也可以。
我之前尝试过使用 MathQuill 以交互方式呈现表达式,然后使用 MathJS 对其进行评估。然而,这在某种程度上是可行的,因为这两个包的设计目标不同(MathQuill 呈现 LaTeX,而 MathJS 具有自定义数学语法),它不能很好地工作(例如,如果用户输入 \frac{5}{17*x} 和假设它是正确的语法,然后评估它并从 MathJS 中得到一个错误)。
目前,我看到了三种方法:
- 继续我所拥有的(或者改用 MathJax- 哪个更好?)。
- 找到一个既能渲染又能评估的工具(无论是乳胶还是其他语言)
- 找到两个工具,以接近(如果不相同)语法进行渲染和评估
- 按照here 的建议编写我自己的渲染和评估工具。我不想这样做,因为它看起来有点乏味,而且我不想重新发明轮子。
这样做的糟糕方法是什么?
更新 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)。对此有什么想法?
【问题讨论】:
-
也许我对this类似问题的回答可能会有所帮助。
标签: javascript latex interpreter renderer