The following are common standards for all text box inputs
In addition to the standard Python/SymPy syntax below, this version supports entering LaTeX code directly. Prefix the LaTeX code with a half-width dollar sign $ as a marker, and the system will automatically convert the LaTeX expression into a SymPy expression for computation.
Usage:
| # | Meaning | LaTeX input | Equivalent SymPy input |
|---|---|---|---|
| 1 | x over 2 | $\frac{x}{2} | x/2 |
| 2 | x squared | $x^{2} | x**2 |
| 3 | square root of x | $\sqrt{x} | sqrt(x) |
| 4 | sin(x) | $\sin{x} | sin(x) |
| 5 | natural log ln(x) | $\ln{x} | log(x) |
| 6 | pi | $\pi | pi |
| 7 | infinity ∞ | $\infty | oo |
$, and it must be a half-width dollar sign. If it does not start with $, the system will parse the expression using the original SymPy/Python syntax rules. LaTeX parsing supports common mathematical symbols and structures; complex expressions may also mix LaTeX and SymPy syntax.
+ - * /** (e.g. x**2 means x squared)sqrt()abs()log(x, a)log(x)sin() cos() tan() cot() sec() csc()asin() acos() atan() acot() etc.sinh() cosh() tanh() etc.epioo / -oo() are sufficientIExamples:
| # | Meaning | Expression to enter |
|---|---|---|
| 1 | 2x | 2*x |
| 2 | x squared | x**2 |
| 3 | arithmetic square root of x | sqrt(x) |
| 4 | log base 2 of x | log(x,2) |
| 5 | natural log ln(x) | log(x) |
| 6 | sine of x | sin(x) |
FiniteSet(1,2,3)ImageSet(Lambda(x, f(x)), Domain)RealsComplexesNaturalsNaturals0IntegersRationalsEmptySetInterval(x,y)Interval.Lopen(x,y)Interval.Ropen(x,y)Interval.open(x,y)Union(A,B)Intersection(A,B)Complement(A,B), where A is the universal setExamples:
| # | Meaning | Expression to enter |
|---|---|---|
| 1 | set {1,2} | FiniteSet(1,2) |
| 2 | interval [1,2] | Interval(1,2) |
| 3 | interval [1,2) | Interval.Ropen(1,2) |
| 4 | interval (1,2) | Interval.open(1,2) |
| 5 | union {0}∪[1,2] | Union(FiniteSet(0),Interval(1,2)) |
| 6 | intersection {1,2}∩{2,3} | Intersection(FiniteSet(1,2),FiniteSet(2,3)) |
| 7 | complement R \ [-1,1] | Complement(Reals,Interval(-1,1)) |
FiniteSet(1,2,3) to restrict the domain to the discrete set {1,2,3}FiniteSet(0,1) to solve only for roots within that setUnion(Interval(0,1), FiniteSet(2)) represents the union of interval [0,1] and point 2ImageSet(Lambda(x, x**2), Interval(0, 5)) represents {x² | x∈[0,5]}ImageSet(Lambda(n, n*pi), Integers), where n is an integerImageSet(Lambda(x, 2*x+1), Integers) represents the set of all odd integersFor a function already defined on the "Define" page, you can use it directly in most other input boxes:
g+1/g yields x**2 + 1/x**2f(3) computes 3**2 = 9 automatically; nested calls such as f(g(2)) are supportedIn modules such as derivative, integral, equation solving, and expression simplification, if the denominator of a result contains a radical, the system automatically rationalizes the denominator, simplifying the result into its simplest form where both numerator and denominator are integral or radical expressions.
Three computation engines are supported:
On the "Define Vector" page, you can define 2D vectors and perform vector operations.
v, customizablesqrt(3), pi/2)On the "Solve Triangle" page, enter the known conditions of a triangle to solve for the remaining unknowns.
pi/3, sqrt(2))| Case | Known conditions | Note |
|---|---|---|
| ASA | two angles and the included side | unique solution |
| AAS | two angles and a non-included side | unique solution |
| SAS | two sides and the included angle | unique solution |
| SSA | two sides and an angle opposite one of them | may have two, one, or no solution |
| SSS | three sides | unique solution |
On the "Plot Function" page, you can plot function graphs.
x**2, sin(x))1/x breaks at x=0)sin(x), set the domain to [0, 2*pi], and click Plot to see a complete sine wave.
On the "Plane Geometry" page, define points, lines, segments, circles, triangles, and polygons, then visualize them on the "Plane Plot" page.
| Category | Method | Parameters |
|---|---|---|
| Basic | point by coordinates | x, y |
| Basic | line through two points | point1, point2 |
| Basic | circle by center and radius | center, radius |
| Basic | circle through three points (circumcircle) | point1, point2, point3 |
| Basic | triangle through three points | point1, point2, point3 |
| Basic | polygon by vertex list | point1, point2, ... |
| Circle | circle with diameter endpoints | point1, point2 |
| Circle | circle by center and a point on it | center, pointOnCircle |
| Line | perpendicular bisector of a segment | segmentName |
| Line | parallel through a point | pointName, segmentName |
| Line | perpendicular through a point | pointName, segmentName |
| Line | angle bisector of two lines | line1, line2 |
| Line | angle bisector (three points) | point1, point2(vertex), point3 |
| Triangle | median of a triangle | triangleName, vertexIndex(0/1/2) |
| Triangle | altitude of a triangle | triangleName, vertexIndex(0/1/2) |
| Triangle | midline of a triangle | triangleName |
| Triangle | incircle of a triangle | triangleName |
| Triangle | excircle of a triangle | triangleName, vertexIndex(0/1/2) |
| Segment | segment through two points | point1, point2 |
Switch to the "Plane Plot" page; all defined objects are checked by default. Uncheck the ones you don't need, then click Plot or Update to generate the Matplotlib image.
On the "Solid Geometry" page, define 3D points, lines, planes, and segments, then visualize them in 3D on the "Solid Plot" page.
| Method | Parameters |
|---|---|
| point by coordinates | x, y, z |
| line through two points | point1, point2 |
| parallel plane through a point | planeName, pointName |
| perpendicular plane to a line through a point | lineName, pointName |
| parallel line to a line through a point | lineName, pointName |
| perpendicular to a line through a point | pointName, lineName |
| perpendicular to a plane through a point | planeName, pointName |
| plane through a line and an external point | lineName, pointName |
| plane through two intersecting/parallel lines | line1Name, line2Name |
| foot of perpendicular from point to plane | pointName, planeName |
| foot of perpendicular from point to line | pointName, lineName |
| 3D segment through two points | point1, point2 |
Switch to the "Solid Plot" page, filter objects via checkboxes, then click Plot or Update to generate a 3D rotatable Matplotlib image (with transparent planes and colored lines).
On the "Plane Compute" page, use defined points, lines, circles, triangles, polygons, etc. for geometric computation. Parameters are separated by half-width English commas, and defined objects are referenced by name.
| Category | Operation | Parameter example |
|---|---|---|
| Point | distance between two points | A, B |
| Point | midpoint coordinates | A, B |
| Point | collinearity check | A, B, C |
| Point | translate point | A, 1, 2 |
| Point | rotate point about a fixed point | A, pi/2, O |
| Point | reflect point across a line | A, L1 |
| Line | line equation | A, B |
| Line | line slope | A, B |
| Line | intersection of two lines | L1, L2 |
| Line | distance from point to line | A, L1 |
| Line | angle between two lines | L1, L2 |
| Line | parallel / perpendicular check | L1, L2 |
| Circle | center / radius / area / perimeter | C1 |
| Circle | intersection of two circles | C1, C2 |
| Circle | tangent line equation | A, C1 |
| Triangle | area / perimeter / circumcenter / incenter / centroid / orthocenter | T1 |
| Triangle | circumradius / inradius | T1 |
| Triangle | right/isosceles/equilateral check | T1 |
| Polygon | area / perimeter | A, B, C, D |
| Transform | translate / rotate / reflect | see Point operations |
| Vector | vector between points / magnitude / dot product / angle | A, B |
A,B,C; the result is 6.
On the "Solid Compute" page, use defined 3D points, lines, planes, etc. for spatial geometric computation.
| Category | Operation | Parameter example |
|---|---|---|
| Point | distance / midpoint between two points | A, B |
| Point | distance from point to plane | A, P1 |
| Point | distance from point to line | A, L1 |
| Point | project point onto plane / line | A, P1 or A, L1 |
| Point | coplanarity check | A, B, C, D |
| Line | direction vector / intersection / angle | L1, L2 |
| Line | parallel / perpendicular check | L1, L2 |
| Line | projection of line onto plane | L1, P1 |
| Plane | plane equation from three points | A, B, C |
| Plane | plane normal vector | P1 |
| Plane | angle / intersection line / parallel-perpendicular of two planes | P1, P2 |
| Line-Plane | intersection of plane and line | P1, L1 |
| Line-Plane | angle between line and plane | L1, P1 |
| Volume | tetrahedron volume | A, B, C, D |
| Vector(3D) | vector / magnitude / dot / cross / angle between points | A, B |
| Oblique projection | projection / inverse / area ratio | A or 1,2,0 |
A,B,C,D; the result is 1/6.
Differential equation input does not follow the function input standard above, because the solution is unknown before solving. The system excludes all defined functions when parsing the expression to avoid interference, and the function to solve for is fixed as f(x).
In the input, use f(x).diff(x,n) to denote the n-th derivative with respect to x. The 1 can be omitted, so f(x).diff(x) denotes the first derivative.
Example: check "Differential Equation", enter f(x).diff(x,1) on the left and f(x)+1 on the right, completing the input of f'(x)=f(x)+1; click Solve to get f(x)=C1*exp(x)-1.
Open the settings page via the menu bar "Features → Settings" to configure the following:
help_en.html in this page's English version).Both settings are saved as JSON under the Qt standard configuration directory (typical path AppData/Local/CalculusCalculator/CalculusCalculator/settings.json), with content such as {"language": "zh_CN", "theme": "dark"}.
Via the menu bar "File → Save / Open" you can save the current workspace (including theme and language) as a project file, which restores the saved theme and language when opened.
Temporarily store and manage commonly used expressions via the "Cache" feature, in two ways:
Each text input box has three icon quick buttons on its right:
| Icon | Function | Description |
|---|---|---|
| keyboard | Visual input | open the formula editor dialog to insert math symbols and structures graphically |
| open | Open cache | pop up the cache dialog; double-click a cached item to fill the current input box |
| plus | Store to cache | store the current input box text into the cache (duplicates move to front; icon briefly becomes a checkmark) |
A visual math formula input panel based on pyqt5-math-widget (bundled in the math_input/ directory). Since v2.0.0, the formula editor's underlying engine has been replaced with MathLive, offering a smoother input experience and more accurate symbol rendering.
On the "Save Settings (when saving)" area of the settings page, you can fine-tune which types of information are saved via checkboxes:
| Option | Description |
|---|---|
| Function list | custom function definitions (fs dict) |
| Equation list (systems) | list of all entered equation expressions |
| Inequality list (systems) | list of all entered inequality expressions |
| Vector list | all defined vectors |
| All cache contents | all expressions cached in the cache area |
| Plane geometry object list | points, lines, circles, triangles, etc. defined in plane geometry |
| Solid geometry object list | points, lines, planes, etc. defined in solid geometry |
| All text box texts | text content in all input boxes |
| All selection box options | current selection of all dropdown boxes |
| All expression display contents | contents of all formula rendering views |
| All settings options | tab index, language, theme, and other framework settings |
__init__.py to the core/ directory; refactored ui/i18n.py into core/settings.pyA new "Blockly" feature lets you build a visual computation flow by dragging and snapping blocks together, completing complex computations without writing code. Open the block editor on the "Blockly" page. Currently supported:
$ for LaTeX input (see "0. Direct LaTeX Code Input").A new splash screen shows progress and hints while the program loads resources, avoiding a blank wait during startup. Combined with the existing lazy-loading (lazy_loader) mechanism, the overall startup speed is optimized.
The above content fully references the language specifications of Python 3.12 and SymPy 1.14.
If you have questions, please refer to:
| Version | Release date | Core updates |
|---|---|---|
| v2.0.0 | 2026-08-14 | New Blockly feature (visual computation flow); formula editor backend upgraded to MathLive; new splash screen and optimized startup; English help documentation added; Blockly added dual-mode code preview (native SymPy code / library code); fixed LaTeX output rendering misdetection; fixed subscript access error when sympify receives a SymPy object |
Thank you for using it!
LiMingkang
2026/8/14