是否有支持LaTeX语法的计算器?

57
当我在LaTeX中写数学时,我经常需要对LaTeX源代码中的数字执行简单的算术运算,例如515.1544 + 454 = ???
我通常将LaTeX代码复制粘贴到Google中以获得结果,但仍然必须手动更改语法,例如:

\frac{154,7}{25} - (289 - \frac{1337}{42})

必须更改为

154,7/25 - (289 - 1337/42)

似乎编写一个程序来处理最常用的操作很容易。是否有一种计算器可以理解这个语法?
编辑: 我知道这样做完美地是不可能的(因为停机问题)。对于我需要的简单情况,这样做很容易。\frac, \cdot, \sqrt和其他一些标签就能行。该程序只需在无法理解的情况下返回错误。
18个回答

28

这是这个问题的答案。 - Mark Cramer
4
沃尔夫拉姆是一个专有系统。这对我们中的一些人来说是个绝不妥协的问题。 - Lori

19

15

Calc包可以让你在源代码中进行一些计算,但仅限于像\setcounter\addtolength这样的命令。就我所知,这不是您想要的。

如果您已经使用sage,那么sagetex包非常棒(否则它就太过于复杂了)。它允许您从如下代码输入中获得漂亮格式化的输出:

The square of
$\begin{pmatrix}
1 & 2 \\
3 & 4
\end{pmatrix}$
is \sage{matrix([[1, 2], [3,4]])^2}.

The prime factorization of the current page number is \sage{factor(\thepage)}

12

正如Andy所说,答案是。有一个能理解大多数LaTeX公式的计算器:Emacs。

请尝试以下步骤(假设使用vanilla emacs):

  1. 打开emacs
  2. 打开你的.tex文件(或激活latex-mode)
  3. 将光标放在两个$$之间的某个位置,或者如在公式开始/结束环境内部(甚至矩阵)等位置。
  4. 为了获得最大的便利性,使用嵌入式calc模式

因此,在上面给出的公式中:

$\frac{154,7}{25} - (289 - \frac{1337}{42})$

C-x * d 复制该公式到下一行,并进入calc-embedded模式,这应该已经为您激活了calc的LaTeX变体。 这时你的缓冲区看起来像这样:

$\frac{154,7}{25} - (289 - \frac{1337}{42})$

$\frac{-37651}{150}$`

请注意,分数已经尽可能转换。再次执行相同的操作(C-x * d),并按下 c f 将分数转换为浮点数,将得到以下缓冲区:

$\frac{154,7}{25} - (289 - \frac{1337}{42})$

$\frac{-37651}{150}$

$-251.006666667$

我使用C-x * d复制公式并进入嵌入模式以查看中间值,但是还有C-x * e,它避免了复制并直接为当前公式输入嵌入模式。

如果您感兴趣,应该查看Emacs Calc - 嵌入模式的信息页面。总的来说,一起查看Gnu Emacs 计算器的帮助和令人惊叹的互动教程会很有帮助。


5

5

3
您的链接已失效。 - Luke Taylor
谢谢你做到了! - Luke Taylor
1
抱歉,链接已经修复。我正在逐步准备好自己的行动 :) - Todor Milev

4

有一种方法可以实现你想要的,但不完全是你描述的方式。

你可以使用fp包(\usepackage[options]{fp}),浮点数包可以做任何你想要的事情;解方程,加减乘除等等。不幸的是,它无法读取LaTeX数学公式,你需要做一些不同的事情,文档非常差,所以我会在这里给出一个例子。

例如,如果你想计算(2x3)/5,你应该输入:

\FPmul\p{2}{3}           % \p is the assignment of the operation 2x3
\FPupn\p{\p{} 7 round}   % upn evaluates the assignment \p and rounds to 7dp
\FPdiv\q{\p}{5}          % divides the assigned value p by 5 names result q
\FPupn\q{\q{} 4 round}   % rounds the result to 4 decimal places and evaluates
$\frac{2\times3}{5}=\FPprint\q$  % This will print the result of the calculations in the math.

FP命令始终不可见,只有FPprint打印与之关联的结果,因此您的文档不会凌乱,FP命令可以放置在任何地方(非动词),只要它们在相关的FPprint之前。


3
你可以直接将内容粘贴到symbolab中,该网站还提供免费的逐步解决方案。并且,由于symbolab使用mathquill,它会立即格式化您的latex公式。

3
考虑到 LaTeX 本身是一种图灵完备的标记语言,我强烈怀疑你不能建立像这样的东西,而不是直接构建到 LaTeX 中。此外,LaTeX 数学标记本身几乎没有语义意义,它仅仅描述了视觉外观。
话虽如此,您可能可以拼凑一些东西来识别 LaTeX 数学标记的非可编程子集,并以相同的方式输出结果。如果您感兴趣的只是简单的分数和整数算术(小心十进制小数,因为它们可能出现在德语文本中),那么这应该不太难。但一旦您开始使用积分、矩阵等等,我担心 LaTeX 缺乏表达能力来准确地描述您的意图。毕竟,它是一个文档准备系统,因此不太适合作为计算机代数系统的输入。
附注:您可以切换到 Word,它在当前版本中具有足够类似于 LaTeX 的数学标记语言(现在甚至支持 LaTeX 标记),同时对于简单术语仍然友好于谷歌。

Illustration of math markup in Microsoft Word

使用免费的Microsoft Math插件,您甚至可以让Word在原地计算表达式。

Illustration of the Microsoft Math add-in for Microsoft Word, calculating an expression


我可能只需编写一个简单的elisp脚本来实现您建议的内容。我只是想知道是否已经有人编写了它。 - Jørgen Fogh
至少据我所知没有。但是我认为,用一种不错的脚本语言,可以在大约一个下午内构建出至少能够工作的东西。 - Joey
@Glorfindel:我自己的帖子总是使用hypftier.de/dump来存储图片,因为那是我控制的位置,并且在可预见的未来不会消失(它也早于SO现在拥有的Imgur)。没有必要在下面添加来源注释。 - Joey
好的,谢谢。我会在周末期间更新我的机器人以反映这一点。 - Glorfindel

2

Emacs的calc-mode可以接受LaTeX输入。我每天都在使用它。按下"d",然后按"L"进入LaTeX输入模式。按"'"打开提示符,在其中粘贴你的tex。

任何说不可能的人都是错的。


听起来不错。我试过了,确实可以将上面的字符串粘贴进去,但是之后我就迷失了,因为我不知道如何将其转换为可读形式。它也不会自动简化。我必须输入“0 +”才能对其进行评估。 - Gyro Gearloose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接