This package provides the command math-at-point for evaluating an arithmetic
expression at point using calc-eval. Similar to quick-calc, the result is
displayed in the minibuffer as well as copied into the kill ring.
This package can be cloned from GitHub via the following command:
git clone https://github.com/shankar2k/math-at-point.gitTo start using it, place it somewhere in your Emacs load-path and add the line
(require 'math-at-point)in your .emacs.d/init.el file. Then run M-x math-at-point to run it. It is
useful to create a global keybinding for math-at-point function. I recommend
C-z = (assuming that you have first unbound C-z from suspend-emacs).
(global-unset-key (kbd "C-z"))
(global-set-key (kbd "C-z =") 'math-at-point)If you use use-package, you can configure this as follows:
(setq map-load-path "<path to math-at-point dir>")
(unbind-key "C-z")
(use-package math-at-point
:load-path map-load-path
:ensure nil
:bind ("C-z =" . math-at-point))To use this command, simply invoke math-at-point when the point is inside of a
math expression or a LaTeX math fragment.
A math expression consists of decimal numbers, the operations +, -, *, /, ^,
parentheses, and can be interspersed with whitespace. The whole expression
must be fully contained in the current line. If the point is inside a LaTeX
math fragment, then the math expression can also contain LaTeX syntax such as
\frac{2}{5} or \sqrt{4^3}.
The result is computed using calc-eval and then displayed in the minibuffer
and copied into the kill ring (so that it can be pasted with yank). If the
point is not within a math expression or LaTeX math fragment, then instead
quick-calc is run.
If the command invoked with the optional prefix argument (C-u M-x math-at-point),
then the evaluation result is inserted after the expression, prefixed by “=”. If
there was already a previous result, it is replaced..
There is also the command math-at-point-simple that can evaluate a simple math
expression at point. A simple math expression is similar to a math expression,
but does not allow parentheses (and thus can be matched using a regular
expression alone). Note that every simple math expression is a math
expression, and thus the functionality of math-at-point is a superset of
math-at-point-simple
Suppose that you have the following text in your buffer:
The total force is 6.23+(3.789/(5-4)) + 6.4*(2 - (5+<3>) *736.83 ) /2000 newtons.
Here, <3> denotes that the point is on the 3 inside the fourth set of balanced parens.
If M-x math-at-point is invoked, then the following message will appear in the minibuffer:
Result 6.23+(3.789/(5-4)) + 6.4*(2 - (5+3) *736.83 ) /2000 => -8.837448
If C-u M-x math-at-point is invoked, then the text is changed to:
The total force is 6.23+(3.789/(5-4)) + 6.4*(2 - (5+[3]) *736.83 ) /2000=-8.837448 newtons.
Suppose that the following text is in your buffer:
Lets do some cool arithmetic! Let $$x = 3$$, \[y = 4\], and \(z = 5\). Then,
\[\begin{aligned}
x^{\frac{2}{3}} = <3>^{\frac{2}{3}} =
\end{aligned}\]Here, <3> denotes that the point is on the 3 after the first = sign in the
\begin{aligned} environment. If M-x math-at-point is invoked, then the
following message will appear in the minibuffer:
Result 3^{\frac{2}{3}} => 2.08008382306
If C-u M-x math-at-point is invoked, then the text is changed to:
Lets do some cool arithmetic! Let $$x = 3$$, \[y = 4\], and \(z = 5\). Then,
\[\begin{aligned}
x ^{\frac{2}{3}} = 3^{\frac{2}{3}} =2.08008382306
\end{aligned}\]math-at-point requires Emacs 27 or later because I use rx-define to define the
regular expressions used to match a simple math expression.