我需要将以Latex样式编写的数学公式转换为C / C ++代码的函数。 例如: y = sin(x)^ 2 会变成类似
的东西double y = sin(x) * sin(x);
或
double y = pow(sin(x), 2);
其中 x 是之前定义的变量。 我的意思是它应该将乳胶配方转换为C / C ++语法。因此,如果有一个函数 y = G(x,y)^ F(x), G(x,y)和无关紧要> F(x)的下, 程序员定义它是一个问题。它只会生成
double y = pow(G(x, y), F(x));
当公式过于复杂时,需要花一些时间将其包含在C / C ++公式中,这就是我需要这样一个转换器的原因。有没有?
答案 0 :(得分:9)
Emacs的内置计算器计算模式可以做到这一点(以及更多)。您的示例可以像这样转换:
将公式放入一些emacs缓冲区
$ y = sin(x)^2 $
将光标放在公式中,激活calc-embedded模式
M-x calc-embedded
将显示语言切换为C:
M-x calc-c-language
你有:
$ y == pow(sin(x), 2) $
请注意,它将latex中的'='符号解释为相等,这导致C的'=='。相当于Cs赋值运算符'='的乳胶将是'\ gets'。
有关此问题的更多信息,请参见Turong's blog
答案 1 :(得分:5)
数学方程式(例如LaTeX中的数学方程式)和C表达式不可互换。前者陈述了两个术语之间的关系,后者定义了一个可以被评估的实体,明确地产生一个值。 C中的a = b
表示'获取变量b
中的值并将其存储在变量a
中,在数学中,它表示'在当前上下文中,a和b相等'。第一个描述计算过程,第二个描述静态事实。因此,数学方程式可以颠倒过来:a = b
相当于b = a
,但对C方程做同样的事情会产生一些完全不同的东西。
更糟糕的是,LaTeX公式只包含渲染方程式所需的信息;通常,这还不足以捕捉他们的意思。
当然,一些LaTeX公式,如你的例子,可以转换成C计算,但很多其他公式不能,所以任何自动化的方式只会有限的意义。
答案 2 :(得分:3)
我知道这个问题太旧了,但我还是会添加一个回复,因为他认为这可能会对其他人有所帮助。在我的搜索中,问题突然出现了。
我正在开发一个类似于public git repo
的工具你必须对乳胶输入施加一些人为的限制,这是不可能的。 目前我编写的工具只支持mul,div,add,sub,sqrt,pow,frac和sum,因为这些是我需要处理的唯一操作集,并且通过提供预处理器可能会有点松散(见preproc.l用于[可能不那么好]的例子),它可以清除原始乳胶输入。
答案 3 :(得分:0)
我不确定是否有一个简单的答案,因为数学公式(在LaTeX文档中)实际上是模棱两可的,所以要自动翻译成某些代码需要自动理解它们。
MathML标准有IIRC两种表示公式的形式(一种用于显示,另一种用于计算),并且有一些原因。