Package: mathkeyboardengine
MathKeyboardEngine for PythonMathKeyboardEngine for Python provides the logic for a highly customizable virtual math keyboard. It is intended for use together with any LaTeX typesetting library (for examplematplotlib.mathtext,sympy in combination with the official latex installorKatex in a webview).Also available:MathKeyboardEngine for C#.MathKeyboardEngine for JavaScript.An execution timelineYou 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.On your customized virtual math keyboard, you press a key. The key calls a MathKeyboardEngine function, for exampleinsert(some_matrix_node)ormove_up(),delete_left(), etc.Callingget_edit_mode_latex()outputs the total of LaTeX you typed, for example\frac{3}{4}\blacksquare(if\blacksquareis your cursor), which you then feed to the typesetting library for display.Callingget_view_mode_latex()outputs the LaTeX without a cursor.Let me test it now!Live (JavaScript) examples can be tested atmathkeyboardengine.github.io.A Python example for the PyQt6 GUI framework can be found in theexamplesfolder. 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: theStandardLeafNode,StandardBranchingNode,AscendingBranchingNodeandDescendingBranchingNodecan 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 libraryInstallPythonandVS Code.Run the following command in theVS CodeTerminal:py -m pip install --upgrade mathkeyboardengineThen usefrommathkeyboardengineimport*k=KeyboardMemory()latexconfiguration=LatexConfiguration()# subscribe to button click events of virtual key presses, etc.orimportmathkeyboardengineasmkek=mke.KeyboardMemory()latexconfiguration=mke.LatexConfiguration()Note: "mke" is an abbreviation of "MathKeyboardEngine". You can choose something different.DocumentationVisit thedocumentationand the (latest version of the)*examples folderfor 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 thechangelogdoesn't note any important changes.How to use this repoFollow these steps to set up (and verify) a development environment for this repository:Install the latest version of Python viahttps://www.python.org/downloads. The download includespip.Open the Terminal in VS Code and runpy -m pip install --upgrade pytest.Run all tests viapy -m pytest tests/.See code coverage:py -m pip install --upgrade pytest-covpy -m pytest tests/ --cov=src --cov-report term-missing.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 thesrcfolder 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 insetup.pyandnoxfile.py.Run all tests for the flatpacked mathkeyboardengine for multiple versions of python :py -m pip install --upgrade noxpy -m nox(this usesnoxfile.pyfrom the root of the repository).If you're interested the release steps, see_disthelper/release_steps.txt.Ask or contributeask questionsabout anything that is not clear or when you'd like help.shareideas or what you've made.report a bug.request an enhancement.open a pull request.