52

当我在 LaTeX 中编写数学时,我经常需要对我的 LaTeX 源代码中的数字执行简单的算术运算,例如515.1544 + 454 = ???.

我通常将 LaTeX 代码复制粘贴到 Google 中以获得结果,但我仍然必须手动更改语法,例如

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

必须改为

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

为最常用的操作编写一个程序来执行此操作似乎微不足道。有能理解这种语法的计算器吗?

编辑:我知道完美地做到这一点是不可能的(因为停机问题)。为我需要的简单案例做这件事是微不足道的。\frac、\cdot、\sqrt 和其他一些标签可以解决问题。对于它不理解的情况,该程序可能会返回一个错误。

4

18 回答 18

24

WolframAlpha 可以接受 TeX 形式的输入.

http://blog.wolframalpha.com/2010/09/30/talk-to-wolframalpha-in-tex/

于 2012-02-04T22:28:28.700 回答
19

LaTeXCalc 项目就是为此而设计的。它将读取一个 TeX 文件并进行计算。欲了解更多信息,请查看主页http://latexcalc.sourceforge.net/

于 2010-06-16T04:58:04.577 回答
14

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)}
于 2009-08-02T17:56:40.207 回答
9

正如安迪所说,答案是肯定的,有一个计算器可以理解大多数乳胶公式:Emacs。

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

  1. 打开 emacs
  2. 打开您的 .tex 文件(或激活乳胶模式)
  3. 将点定位在两个 $$ 之间的某个位置,或者例如在公式(甚至矩阵)的开始/结束环境中。
  4. 使用 calc 嵌入模式获得最大的震撼

因此,您在上面给出的公式中有一点:

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

复制C-x * d下面行中的公式并进入模式,该模式应该已经为您激活了 calc 的乳胶变体。您的缓冲区现在看起来像这样:calc-embedded

$\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-Embedded Mode的信息页面。总的来说,Gnu Emaca 计算器的帮助以及很棒的交互式教程

于 2015-01-17T10:40:46.923 回答
5

您可以在(主要是带有一些 R 的 TeX)文件上运行一个名为 Sweave 的 R 函数,该文件可以用它们在 Tex 中的结果替换 R 表达式。

可以在此处找到教程:http ://www.scribd.com/doc/6451985/Learning-to-Sweave-in-APA-Style

于 2010-04-13T16:41:37.483 回答
4

我的计算器可以做到这一点。要获得格式化的输出,请双击结果公式并按 ctrl+c 进行复制。

它也可以做相当高级的事情(微分,简单的积分(而不是那么简单的积分)......)。

https://calculator-algebra.org/

示例计算:

https://calculator-algebra.org:8166/#%7B%22currentPage%22%3A%22calculator%22%2C%22calculatorInput%22%3A%22%5C%5Cfrac%7B1%2B2%7D%7B3%7D% 3B%20d%2Fdx(arctan%20(2x%2B3))%22%2C%22monitoring%22%3A%22true%22%7D

于 2014-10-15T19:25:44.360 回答
3

考虑到 LaTeX 本身是一种图灵完备的标记语言,我强烈怀疑你是否可以构建这样的东西,而不是直接内置到 LaTeX 中。此外,LaTeX 数学 matkup 本身几乎没有语义含义,它仅描述视觉外观。

话虽如此,您可能可以将识别 LaTeX 数学标记的非可编程子集的东西拼凑在一起,并以相同的方式吐出结果。如果您只对带有分数和整数的简单算术感兴趣(但要小心小数,因为它们可能会出现3{,}141...在德语文本中:)),这应该不会太难。但是一旦你从积分、矩阵等开始。我担心 LaTeX 缺乏表达能力来准确描述你的意图。毕竟,它是一个文档准备系统,因此不太适合作为计算机代数系统的输入。

旁注:您可以切换到 Word,它在当前版本中具有足够类似于 LaTeX 的数学标记语言(现在它甚至支持 LaTeX 标记),但对于更简单的术语来说仍然对 Google 友好:

Microsoft Word 中的数学标记插图

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

Microsoft Word 的 Microsoft Math 加载项的插图,计算表达式

于 2009-08-02T16:05:05.187 回答
3

有一种方法可以做您想做的事,但与您描述的不太一样。

你可以使用 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 之前。

于 2011-01-04T15:05:42.490 回答
3

您可以将其粘贴到symbolab中,作为奖励,它有免费的逐步解决方案。此外,由于 symbolab 使用 mathquill,它会立即格式化您的乳胶。

于 2015-02-19T11:17:09.327 回答
2

没有,因为它通常是不可能的。

LaTeX 数学模式标记是表示性标记,在某些情况下它不能提供足够的信息来计算表达式。

这是创建 MathML 内容标记的原因之一,也是在 Mathematica 中使用 MathML 的原因之一。MathML 实际上是两种语言合二为一:

  • 演示文稿标记
  • 内容标记

为了完成你的目标,你必须拥有 MathML 以及组合的演示和内容标记(请参阅MathML 规范)。

在我看来,您最好的选择是使用 MathML(即使它很冗长)并在必要时转换为 LaTeX。也就是说,我也最喜欢 LaTeX 语法,也许我们需要的是 MathML 的紧凑语法(在精神上类似于RelaxNG 紧凑语法)。

于 2009-08-02T16:06:08.617 回答
2

对于 LaTeX 计算,您可以使用 CalcTeX 包。这个包了解 LaTeX 语言的元素并进行计算,例如,您的问题可在 http://sg.bzip.pl/CalcTeX/examples/frac.tgz上找到, 或者请写

\noindent 计算请使用以下环境 $515.1544 + 454$ 或 \[ \frac{154.7}{25}-(289-\frac{1337}{42.}) \] 或 \begin{equation} 154.7/25-( 289-1337/42.) \end{方程}

欲了解更多信息,请访问项目网站或联系该项目的作者。

于 2009-08-16T19:11:37.557 回答
2

为了在 LaTeX 本身中执行数学运算,您还可以查看 pgfmath 包,它比 calc 包更强大、更方便。您可以从 TikZ 和 PGF 软件包手册的第六部分了解如何使用它,您可以在此处找到(当前版本 2.10): http ://mirror.unl.edu/ctan/graphics/pgf/base/doc/通用/pgf/pgfmanual.pdf

于 2011-05-13T18:13:44.457 回答
2

Emacs 计算模式接受乳胶输入。我每天都用它。按“d”,然后按“L”进入 Latex 输入模式。按“'”打开一个提示,您可以在其中粘贴您的 tex。

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

于 2014-11-10T15:03:06.323 回答
1

IIRC Mathematica 可以做到。

于 2009-08-02T15:57:29.387 回答
1

没有,因为它通常是不可能的。LaTeX 数学模式标记是表示性标记,在某些情况下它不能提供足够的信息来计算表达式。

你说的对。LaTeX 本身并没有提供足够的信息来进行任何计算。此外,它不代表任何信息来进行计算。但是没有人阻止以 LaTeX 格式编写包含此类信息的文本。这是一条艰难的道路,因为您需要构建一个规则系统,该系统叠加在 Latex 格式的文本需要包含哪些内容才能被您的解释器识别。然后说服用户有必要学习,等等等等......创建一个逻辑和直观的数学表达式计算器的最简单方法。并且表达式已经可以转换乳胶。和你说的差不多。这是在我指出的程序中实现的。AnEasyCalc 允许在任何文本编辑器中键入平面文本时键入表达式。它检查,然后自己计算并生成 LateX 字符串。它的工作非常简单快捷。试试看,你会看到的。

于 2015-07-18T15:39:18.867 回答
1

这并不完全是您所要求的,但它是一个不错的包,您可以将其包含在 LaTeX 文档中以执行各种操作,包括算术、微积分甚至向量和矩阵:

包名是“计算器”

http://mirror.unl.edu/ctan/macros/latex/contrib/calculator/calculator.pdf

于 2015-11-02T16:42:42.620 回答
0

<> 试试 AnEasyCalc 程序。它可以很容易地获得乳胶配方:http: //steamandwater.od.ua/AnEasyCalc/ :)

于 2015-05-02T19:20:07.970 回答
0

latex2sympy2 Python库可以解析 LaTeX 数学表达式。

from latex2sympy2 import latex2sympy

tex_str = r"""YOUR TEX MATH HERE"""
tex_str = r"\frac{9\pi}{\ln(12)}+22"  # example TeX math

sympy_object = latex2sympy(tex_str)
evaluated_tex = float(sympy_object.evalf())
print(evaluated_tex)

此 Python 3 代码的计算9/ln(12)+22结果(在上面的 LaTeX 中)为 33.37842899841745。

上面的代码片段只处理基本的代数简化(没有变量的数学表达式)。由于该库将 LaTeX 数学转换为 SymPy 对象,因此可以轻松调整和扩展上述代码以处理更复杂的 LaTeX 数学(包括求解导数、积分等)。

latex2sympy2 库可以通过 pip 命令安装:pip install --user latex2sympy2

于 2021-12-07T04:42:00.300 回答