Skip to content

MathKeyboardEngine/MathKeyboardEngine.Python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

latest release

MathKeyboardEngine for Python

MathKeyboardEngine for Python provides the logic for a highly customizable virtual math keyboard. It is intended for use together with any LaTeX typesetting library (for example matplotlib.mathtext, sympy in combination with the official latex install or Katex in a webview).

Also available:

An execution timeline

  1. You load a page with your customized virtual math keyboard (based on one of the examples). The keys show typeset LaTeX - loaded form a local png file or rendered on the fly - and a cursor is displayed in a textbox-look-a-like element.
  2. On your customized virtual math keyboard, you press a key. The key calls a MathKeyboardEngine function, for example insert(some_matrix_node) or move_up(), delete_left(), etc.
  3. Calling get_edit_mode_latex() outputs the total of LaTeX you typed, for example \frac{3}{4}\blacksquare (if \blacksquare is your cursor), which you then feed to the typesetting library for display.
  4. Calling get_view_mode_latex() outputs the LaTeX without a cursor.

Let me test it now!

Live (JavaScript) examples can be tested at mathkeyboardengine.github.io.

A Python example for the PyQt6 GUI framework can be found in the examples folder. Note that the Python example is limited, because it does not handle physical keyboard input. Also, there are many more GUI frameworks for which there is no example. However, the PyQt6 example might provide insight in how to use MathKeyboardEngine in any project.

Pros and cons?

Unique about MathKeyboardEngine:

  • it supports (almost?) all math mode LaTeX, including matrices. (Please share if you know anything that is not supported.)
  • its syntax tree consists of very few different parts: the StandardLeafNode, StandardBranchingNode, AscendingBranchingNode and DescendingBranchingNode can be used for almost all LaTeX, including fractions, powers, combinations, subscript, etc. with ready-to-use up/down/left/right navigation.
  • it can be used with any LaTeX math typesetting library you like.

A con:

  • this library will never be able to handle setting the cursor with the touch of a finger on a typeset formula. (But it DOES support up/down/left/right navigation and has a selection mode via arrow keys.)

More pros:

  • you have full control over what you display on the virtual keyboard keys and what a virtual key press actually does.
  • customize the editor output at runtime: dot or comma as decimal separator, cross or dot for multiplication, cursor style, colors, etc.
  • this library also supports handling input from a physical keyboard, where - for example - the forward slash "/" key can be programmed to result in encapsulating a previously typed number as the numerator of a fraction. (See the examples.)
  • almost forgotten: it's open source, free to use, free to modify (please fork this repo)!

How to use this library

Install Python and VS Code.

Run the following command in the VS Code Terminal:

py -m pip install --upgrade mathkeyboardengine

Then use

from mathkeyboardengine import *

k = KeyboardMemory()
latexconfiguration = LatexConfiguration()

# subscribe to button click events of virtual key presses, etc.

or

import mathkeyboardengine as mke

k = mke.KeyboardMemory()
latexconfiguration = mke.LatexConfiguration()

Note: "mke" is an abbreviation of "MathKeyboardEngine". You can choose something different.

Documentation

Visit the documentation and the (latest version of the)* examples folder for more implementation details.

* If you use a version tag in the url like this: https://github.com/MathKeyboardEngine/MathKeyboardEngine.Python/tree/v0.1.1, you can see the git repository as it was for that version. That may not be needed if the changelog doesn't note any important changes.

How to use this repo

Follow these steps to set up (and verify) a development environment for this repository:

  1. Install the latest version of Python via https://www.python.org/downloads. The download includes pip.
  2. Open the Terminal in VS Code and run
    py -m pip install --upgrade pytest.
  3. Run all tests via
    py -m pytest tests/.
  4. See code coverage:
    py -m pip install --upgrade pytest-cov
    py -m pytest tests/ --cov=src --cov-report term-missing.
  5. This repository has been developed in a folder structure that helps understanding it. The released package however has a "flat" structure, so that all imports can be done from a single namespace. This is done via _disthelper/flatpack.py (developed especially for this repository). Files from the src folder are recursively copied to a new folder 'mathkeyboardengine' and import statements are automatically updated. It also produces a new version of the tests folder. It is called in setup.py and noxfile.py.
  6. Run all tests for the flatpacked mathkeyboardengine for multiple versions of python :
    py -m pip install --upgrade nox
    py -m nox (this uses noxfile.py from the root of the repository).
  7. If you're interested the release steps, see _disthelper/release_steps.txt.

License

The MathKeyboardEngine repositories use the most permissive licensing available. The "BSD Zero Clause License" (0BSD) allows for
commercial + non-commercial use, closed + open source, with + without modifications, etc. and is equivalent to licenses like:

The "BSD Zero Clause License" (0BSD) does not have the condition

(...), provided that the above copyright notice and this permission notice appear in all copies.

which is part of the "MIT License" (MIT) and its shorter equivalent "ISC License" (ISC). Apart from that they are all equivalent.

Ask or contribute

About

MathKeyboardEngine for Python provides the logic for a highly customizable virtual math keyboard. It is intended for use together with any LaTeX typesetting library.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Languages