{"id":19345233,"url":"https://github.com/verybadcat/csharpmath","last_synced_at":"2025-10-04T22:54:26.207Z","repository":{"id":38106474,"uuid":"105953532","full_name":"verybadcat/CSharpMath","owner":"verybadcat","description":"LaTeX. in C#. (ported from the wonderful iosMath project).","archived":false,"fork":false,"pushed_at":"2024-03-28T07:02:38.000Z","size":50779,"stargazers_count":419,"open_issues_count":54,"forks_count":68,"subscribers_count":24,"default_branch":"master","last_synced_at":"2025-10-01T11:53:26.617Z","etag":null,"topics":["dotnet","formula","latex","math","rendering"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/verybadcat.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":"Contributing.md","funding":null,"license":"License","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"Roadmap.png","authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-10-06T00:24:11.000Z","updated_at":"2025-09-26T09:49:43.000Z","dependencies_parsed_at":"2023-12-30T10:26:39.767Z","dependency_job_id":"b4ba987d-9069-48ea-91ad-3990fe65562d","html_url":"https://github.com/verybadcat/CSharpMath","commit_stats":{"total_commits":1093,"total_committers":17,"mean_commits":64.29411764705883,"dds":"0.30192131747483986","last_synced_commit":"cf8fe8cc571d5a5e9afea7dfe4e0a21529acfe3b"},"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/verybadcat/CSharpMath","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verybadcat%2FCSharpMath","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verybadcat%2FCSharpMath/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verybadcat%2FCSharpMath/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verybadcat%2FCSharpMath/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/verybadcat","download_url":"https://codeload.github.com/verybadcat/CSharpMath/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verybadcat%2FCSharpMath/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278386108,"owners_count":25978113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnet","formula","latex","math","rendering"],"created_at":"2024-11-10T04:05:52.480Z","updated_at":"2025-10-04T22:54:26.173Z","avatar_url":"https://github.com/verybadcat.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch3 align=\"center\"\u003eCross-platform LaTeX rendering!\u003c/h3\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cbr/\u003e\u003cimg src=\"Icon.png\" width=\"300px\" alt=\"CSharpMath icon\"\u003e\u003cbr/\u003e\u003cbr/\u003e\nCSharpMath is a C# port of the wonderful \u003ca href=\"https://github.com/kostub/iosMath\"\u003eiosMath LaTeX engine\u003c/a\u003e.\u003cbr/\u003e\n\u003ci\u003eThe icon is a product of this library.\u003c/i\u003e\n\u003c/p\u003e\n\n[Current release][NuGet]|[![NuGet release shield](https://img.shields.io/nuget/v/CSharpMath.svg)][NuGet] [![GitHub release shield](https://img.shields.io/github/release/verybadcat/CSharpMath.svg)][GitHub] [![GitHub release date shield](https://img.shields.io/github/release-date/verybadcat/CSharpMath.svg)][GitHub] [![GitHub commits since last release shield](https://img.shields.io/github/commits-since/verybadcat/CSharpMath/latest.svg)][GitHub]\n-|-\n[Current prerelease][NuGet-pre]|[![NuGet pre-release shield](https://img.shields.io/nuget/vpre/CSharpMath.svg)][NuGet-pre] [![GitHub pre-release shield](https://img.shields.io/github/release-pre/verybadcat/CSharpMath.svg)][GitHub-pre] [![GitHub pre-release date shield](https://img.shields.io/github/release-date-pre/verybadcat/CSharpMath.svg)][GitHub-pre] [![GitHub commits since last prerelease shield](https://img.shields.io/github/commits-since/verybadcat/CSharpMath/latest.svg?include_prereleases)][GitHub-pre]\n\u003c!-- The \"Current nightly\" badge is blocked on https://github.com/badges/shields/pull/4184 --\u003e\n\n[![NuGet downloads shield](https://img.shields.io/nuget/dt/CSharpMath.svg)][NuGet] [![GitHub contributors shield](https://img.shields.io/github/contributors/verybadcat/CSharpMath.svg)](https://github.com/verybadcat/CSharpMath/graphs/contributors) [![GitHub license shield](https://img.shields.io/github/license/verybadcat/CSharpMath.svg)](https://github.com/verybadcat/CSharpMath/blob/master/License) [![GitHub last commit shield](https://img.shields.io/github/last-commit/verybadcat/CSharpMath.svg)](https://github.com/verybadcat/CSharpMath/commits/master) [![GitHub Build workflow shield](https://img.shields.io/github/workflow/status/verybadcat/CSharpMath/Build.svg)](https://github.com/verybadcat/CSharpMath/actions?query=workflow%3ABuild+branch%3Amaster) [![GitHub Test workflow shield](https://img.shields.io/github/workflow/status/verybadcat/CSharpMath/Test.svg?label=tests)](https://github.com/verybadcat/CSharpMath/actions?query=workflow%3ATest+branch%3Amaster) [![codecov.io badge](https://codecov.io/github/verybadcat/CSharpMath/coverage.svg?branch=master)](https://codecov.io/github/verybadcat/CSharpMath?branch=master)\n\n[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/verybadcat/CSharpMath.svg)](http://isitmaintained.com/project/verybadcat/CSharpMath \"Average time to resolve an issue\") [![Percentage of issues still open](http://isitmaintained.com/badge/open/verybadcat/CSharpMath.svg)](http://isitmaintained.com/project/verybadcat/CSharpMath \"Percentage of issues still open\") [![Issues welcome](https://img.shields.io/badge/issues-welcome-success)](https://github.com/verybadcat/CSharpMath/issues) [![Pull Requests welcome](https://img.shields.io/badge/pull_requests-welcome-success)](https://github.com/verybadcat/CSharpMath/issues) [![❤](https://img.shields.io/badge/made%20with-%e2%9d%a4-ff69b4.svg)](https://www.youtube.com/watch?v=dQw4w9WgXcQ \"\")\n\n[NuGet]: https://www.nuget.org/packages/CSharpMath/\n[NuGet-pre]: https://www.nuget.org/packages/CSharpMath/absoluteLatest\n[GitHub]: https://github.com/verybadcat/CSharpMath/releases/latest\n[GitHub-pre]: https://github.com/verybadcat/CSharpMath/releases\n\n \u003c!--\n## Choose your platform\nReally, any one you like!\n\n[//]: # (Primary platforms)\n\n[SkiaSharp](wiki/@GettingStarted~SkiaSharp.md)\n[Xamarin.Forms](wiki/@GettingStarted~Forms.md)\n[Xamarin.iOS](wiki/@GettingStarted~iOS.md)\n\n[//]: # (Through SkiaSharp)\n\n[tvOS](wiki/@GettingStarted~tvOS.md)\n[watchOS](wiki/@GettingStarted~watchOS.md)\n[Xamarin.Android](wiki/@GettingStarted~Android.md)\n[Xamarin.Mac](wiki/@GettingStarted~Mac.md)\n[.NET Core](wiki/@GettingStarted~NetCore.md)\n[Windows Forms](wiki/@GettingStarted~WinForms.md)\n[Windows Presentation Framework](wiki/@GettingStarted~WPF.md)\n[Universal Windows Platform](wiki/@GettingStarted~UWP.md)\n[Gtk#](wiki/@GettingStarted~Gtk.md)\n[Tizen](wiki/@GettingStarted~Tizen.md)\n\n[//]: # (Future)\n\n[Unity](wiki/@GettingStarted~Unity.md)\n[ASP.NET](wiki/@GettingStarted~ASP.md)\n--\u003e\n\n# Platform support\n\niOS (CSharpMath.Ios) was ironically the first front end, which was added in v0.0.\n\nXamarin.Forms (CSharpMath.Forms) support via SkiaSharp (CSharpMath.SkiaSharp) was added in v0.1 as development continued.\n\nAvalonia (CSharpMath.Avalonia) support was also added in v0.4.\n\nFor Windows platforms, use https://github.com/ForNeVeR/wpf-math.\n\nFor Unity3D, use https://assetstore.unity.com/packages/tools/gui/texdraw-51426. (paid: USD$50)\n\n_The above projects are independent of CSharpMath._\n\n# Usage and Examples\n\nTo get started, do something like this:\n\n### 1. CSharpMath.Ios\n\n```cs\nvar latexView = IosMathLabels.MathView(@\"x = -b \\pm \\frac{\\sqrt{b^2-4ac}}{2a}\", 15);\nlatexView.ContentInsets = new UIEdgeInsets(10, 10, 10, 10);\nvar size = latexView.SizeThatFits(new CoreGraphics.CGSize(370, 180));\nlatexView.Frame = new CoreGraphics.CGRect(0, 20, size.Width, size.Height);\nsomeSuperview.Add(latexView);\n```\n\n[See an example project](CSharpMath.Ios.Example)\n      \n![Quadratic Formula](CSharpMath/RenderedSamples/Quadratic%20Formula.png)|![Power Series](CSharpMath/RenderedSamples/PowerSeries.png)\n------------------------------------------------------------------------|-----------------------------------------------------------\n![Matrix Product](CSharpMath/RenderedSamples/MatrixProduct.png)         |![Continued Fraction](CSharpMath/RenderedSamples/ContinuedFraction.png)\n    \n### 2. CSharpMath.SkiaSharp\n```cs\nvar painter = CSharpMath.SkiaSharp.MathPainter();\npainter.LaTeX = @\"\\frac\\sqrt23\";\npaiinter.Draw(someCanvas);\n```\nThis is used by CSharpMath.Forms below.\n    \n### 3. CSharpMath.Forms\n\n```xaml\n\u003cContentPage xmlns=\"http://xamarin.com/schemas/2014/forms\"\n             xmlns:math=\"clr-namespace:CSharpMath.Forms;assembly=CSharpMath.Forms\"\n             x:Class=\"Namespace.Class\"\u003e\n    \u003cmath:MathView x:Name=\"View\" HorizontalOptions=\"FillAndExpand\" VerticalOptions=\"FillAndExpand\"\u003e\n        \\frac\\sqrt23\n    \u003c/math:MathView\u003e\n\u003c/ContentPage\u003e\n```\nor:\n```cs\nvar view = new CSharpMath.Forms.MathView();\nview.HorizontalOptions = view.VerticalOptions = LayoutOptions.FillAndExpand;\nview.LaTeX = @\"\\frac\\sqrt23\";\nsomeLayout.Children.Add(view);\n```\n\n[See an example project](CSharpMath.Forms.Example)\n    \niOS | Android | Windows UWP\n----|---------|------------\n![1/2](https://user-images.githubusercontent.com/19922066/40612166-fd6c5b38-62ab-11e8-9cb1-b2b7eb6883be.png) | ![1+1](https://user-images.githubusercontent.com/19922066/40575043-183a6970-6110-11e8-887f-820e14efc588.jpeg) | ![Panning a view](https://user-images.githubusercontent.com/19922066/40731183-18a09b68-6463-11e8-8095-1a4cc9df9eae.gif) ![Colors!](https://user-images.githubusercontent.com/19922066/40972206-8abc247c-68f2-11e8-8684-561b5e833c21.png)\n\n### 4. CSharpMath.Avalonia\n\n```xaml\n\u003cUserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:math=\"clr-namespace:CSharpMath.Avalonia;assembly=CSharpMath.Avalonia\"\n             x:Class=\"Namespace.Class\"\u003e\n    \u003cmath:MathView LaTeX=\"x + 2 \\sqrt{x} + 1 = (\\sqrt x+1)^2\" /\u003e\n\u003c/UserControl\u003e\n```\nor:\n```cs\nvar view = new CSharpMath.Avalonia.MathView();\nview.LaTeX = @\"\\frac\\sqrt23\";\nsomePanel.Children.Add(view);\n```\n\n[See an example project](CSharpMath.Avalonia.Example)\n\n![MathViewPage](https://user-images.githubusercontent.com/19922066/78373612-692db400-75fd-11ea-89c3-2f2a4f47784a.png)\n\n## But I want a button instead!\n\nFor Xamarin.Forms, you can make use of `CSharpMath.Forms.MathButton` to make a clickable math button. It wraps a `MathView` inside and will use its properties to draw math on the button.\n```xaml\n\u003cContentPage xmlns=\"http://xamarin.com/schemas/2014/forms\"\n             xmlns:math=\"clr-namespace:CSharpMath.Forms;assembly=CSharpMath.Forms\"\n             x:Class=\"Namespace.Class\"\u003e\n    \u003cmath:MathButton x:Name=\"MathButton\"\u003e\n        \u003cmath:MathView x:Name=\"MathView\"\u003e\n            \\frac\\sqrt23\n        \u003c/math:MathView\u003e\n    \u003c/math:MathButton\u003e\n\u003c/ContentPage\u003e\n```\nFor Avalonia, `Avalonia.Controls.Button` already supports arbitrary content. Use it instead.\n```xaml\n\u003cUserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:math=\"clr-namespace:CSharpMath.Avalonia;assembly=CSharpMath.Avalonia\"\n             x:Class=\"Namespace.Class\"\u003e\n    \u003cButton x:Name=\"MathButton\"\u003e\n        \u003cmath:MathView x:Name=\"MathView\"\u003e\n            \\frac\\sqrt23\n        \u003c/math:MathView\u003e\n    \u003c/Button\u003e\n\u003c/UserControl\u003e\n```\n\n## But I want to display a majority of normal text with a minority of math!\nCSharpMath also provides a `TextView` exactly for this purpose. You can use `$`, `\\(` and `\\)` to delimit inline math and `$$`, `\\[` and `\\]` to delimit display math.\nThere is also a `TextButton` for the Xamarin.Forms equivalent of `MathButton`.\nXamarin.Forms:\n```xaml\n\u003cContentPage xmlns=\"http://xamarin.com/schemas/2014/forms\"\n             xmlns:math=\"clr-namespace:CSharpMath.Forms;assembly=CSharpMath.Forms\"\n             x:Class=\"Namespace.Class\"\u003e\n    \u003cmath:TextView LaTeX=\"Text text text text text \\( \\frac{\\sqrt a}{b} \\) text text text text text\" /\u003e\n\u003c/ContentPage\u003e\n```\nAvalonia:\n```xaml\n\u003cUserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:math=\"clr-namespace:CSharpMath.Avalonia;assembly=CSharpMath.Avalonia\"\n             x:Class=\"Namespace.Class\"\u003e\n    \u003cmath:TextView LaTeX=\"Text text text text text \\( \\frac{\\sqrt a}{b} \\) text text text text text\" /\u003e\n\u003c/UserControl\u003e\n```\nXamarin.Forms|Avalonia\n-|-\n![Xamarin.Forms](https://user-images.githubusercontent.com/19922066/80187259-e7e8a080-8641-11ea-8c15-63e36b85047e.png)|![Avalonia](https://user-images.githubusercontent.com/19922066/80187422-31d18680-8642-11ea-81b3-aea7e027a7ea.png)\n\n## What about rendering to an image instead of displaying in a view?\nWarning: There are still some rough edges on image rendering to be resolved, such as [this](CSharpMath.Rendering.Tests/MathDisplay/AccentOverF.png) and [this](CSharpMath.Rendering.Tests/TextLeft/WideDisplayMaths.png). However, it is already usable for the majority of cases.\n\nFor SkiaSharp:\n```cs\nusing CSharpMath.SkiaSharp;\nvar painter = new MathPainter { LaTeX = @\"\\frac23\" }; // or TextPainter\nusing var png = painter.DrawAsStream();\n// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Jpeg) for JPEG\n// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Gif) for GIF\n// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Bmp) for BMP\n// or... you get it.\n```\nFor Xamarin.Forms:\n```cs\nusing CSharpMath.SkiaSharp;\nvar painter = someMathView.Painter; // or someTextView.Painter\nusing var png = painter.DrawAsStream();\n// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Jpeg) for JPEG\n// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Gif) for GIF\n// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Bmp) for BMP\n// or... you get it.\n```\nFor Avalonia:\n```cs\nusing CSharpMath.Avalonia;\nvar painter = someMathView.Painter; // or someTextView.Painter\n// Due to limitations of the Avalonia API, you can only render as PNG to a target stream\npainter.DrawAsPng(someStream);\n```\n\n![Cell 1](CSharpMath.Rendering.Tests/MathDisplay/ExponentWithFraction.png)|![Cell 2](CSharpMath.Rendering.Tests/MathDisplay/SummationWithCup.png)|![Cell 3](CSharpMath.Rendering.Tests/MathDisplay/Color.png)\n-|-|-\n![Cell 4](CSharpMath.Rendering.Tests/MathDisplay/RaiseBox.png)|![Cell 5](CSharpMath.Rendering.Tests/MathDisplay/SomeLimit.png)|![Cell 6](CSharpMath.Rendering.Tests/MathDisplay/VectorProjection.png)\n![Cell 7](CSharpMath.Rendering.Tests/MathDisplay/Matrix3.png)|![Cell 8](CSharpMath.Rendering.Tests/MathDisplay/IntegralColorBoxCorrect.png)|![Cell 9](CSharpMath.Rendering.Tests/MathDisplay/Taylor.png)\n\n\n## This looks great and all, but is there a way to edit and evaluate the math?\nYes! You can use a `CSharpMath.Rendering.FrontEnd.MathKeyboard` to process key presses and generate a `CSharpMath.Atom.MathList` or a LaTeX string. You can then call `CSharpMath.Evaluation.Evaluate` to get a `CSharpMath.Evaluation.MathItem`, which can be a `CSharpMath.Evaluation.MathItem.Entity` containing an `AngouriMath.Entity` that you can simplify, a `CSharpMath.Evaluation.Comma` containing a comma-delimited collection of `CSharpMath.Evaluation.MathItem`, or a `CSharpMath.Evaluation.MathItem.SetNode` containing an `AngouriMath.Core.SetNode`. For all uses of an `AngouriMath.Entity` or an `AngouriMath.Core.SetNode`, check out https://github.com/asc-community/AngouriMath.\n\nNOTE: `CSharpMath.Evaluation` is not released yet. It will be part of the 0.5.0 update.\n```cs\nvar keyboard = new CSharpMath.Rendering.FrontEnd.MathKeyboard();\nkeyboard.KeyPress(CSharpMath.Editor.MathKeyboardInput.Sine, CSharpMath.Editor.MathKeyboardInput.SmallTheta);\nvar (math, error) = CSharpMath.Evaluation.Evaluate(keyboard.MathList);\nif (error != null) { /*Handle invalid input by displaying error which is a string*/ }\nelse\n    switch (math)\n    {\n        case CSharpMath.Evaluation.MathItem.Entity { Content: var entity }:\n            // entity is an AngouriMath.Entity\n            var simplifiedEntity = entity.Simplify();\n            break;\n        case CSharpMath.Evaluation.MathItem.Comma comma:\n            // comma is a System.Collections.Generic.IEnumerable\u003cCSharpMath.Evaluation.MathItem\u003e\n            break;\n        case CSharpMath.Evaluation.MathItem.Set { Content: var set }:\n            // set is an AngouriMath.Core.Set\n            break;\n    }\n```\nor more conveniently:\n```cs\nvar keyboard = new CSharpMath.Rendering.FrontEnd.MathKeyboard();\nkeyboard.KeyPress(CSharpMath.Editor.MathKeyboardInput.Sine, CSharpMath.Editor.MathKeyboardInput.SmallTheta);\n// Displays errors as red text, also automatically chooses between\n// simplifying an expression and solving an equation depending on the presence of an equals sign\nvar resultLaTeX = CSharpMath.Evaluation.Interpret(keyboard.MathList);\n```\n\nAnalyzing an expression | Solving an equation\n-|-\n![Analyzing an expression](https://user-images.githubusercontent.com/19922066/82801930-a8b3a680-9eb0-11ea-9947-8da278d24e9f.jpeg)|![Solving an equation](https://user-images.githubusercontent.com/19922066/82801937-abae9700-9eb0-11ea-8c3e-82fa27463ff4.jpeg)\n\n# [Documentation](https://github.com/verybadcat/CSharpMath/wiki/Documentation-of-public-facing-APIs-of-CSharpMath.Rendering,-CSharpMath.SkiaSharp-and-CSharpMath.Forms-MathViews)\n\n# Opting in to the nightly feed\n\nFor those who wish to be even more updated than prereleases, you can opt in to the nightly feed which is updated whenever the master branch has a new commit.\n\n1. Log in to GitHub\n2. Generate a new token (a 40-digit hexadecimal number) in https://github.com/settings/tokens/new with the `read:packages` scope\n3. Create a new file called `NuGet.Config` or `nuget.config` in the same folder as your solution with content\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cconfiguration\u003e\n    \u003cpackageSources\u003e\n        \u003cadd key=\"CSharpMathNightly\" value=\"https://nuget.pkg.github.com/verybadcat/index.json\" /\u003e\n    \u003c/packageSources\u003e\n    \u003cpackageSourceCredentials\u003e\n        \u003cCSharpMathNightly\u003e\n            \u003cadd key=\"Username\" value=\"USERNAME\" /\u003e\n            \u003cadd key=\"ClearTextPassword\" value=\"TOKEN\" /\u003e\n        \u003c/CSharpMathNightly\u003e\n    \u003c/packageSourceCredentials\u003e\n\u003c/configuration\u003e\n```\n4. Replace `USERNAME` in the above file with your GitHub username and `TOKEN` with your generated token.\n5. Open a package webpage in https://github.com/verybadcat/CSharpMath/packages\n6. Insert the following into your `.csproj`:\n```xml\n\u003cItemGroup\u003e\n  \u003cPackageReference Include=\"PACKAGE\" Version=\"VERSION\" /\u003e\n\u003c/ItemGroup\u003e\n```\n7. Replace `PACKAGE` in the above file by the package name in the webpage, e.g. `CSharpMath.SkiaSharp`, and `VERSION` by the version in the webpage, e.g. `0.4.2-ci-9db8a6dec29202804764fab9d6f7f19e43c3c083`. The 40-digit hexadecimal number at the end of the version is the Git commit that was the package was built on. CI versions for a version are older than that version, aka chronologically `0.4.2-ci-xxx` → `0.4.2` → `0.4.3-ci-xxx` → `0.5.0` → `0.5.1-ci-xxx`.\n### SourceLink for CI packages\n\nUnfortunately, non-NuGet.org feeds do not support `.snupkg`s, so you will have to download all the packages yourself.\n1. Go to https://github.com/verybadcat/CSharpMath/actions?query=workflow%3ABuild\n2. Open the latest build\n3. Download artifacts\n4. Extract the files to a folder\n5. Add the folder as a local NuGet feed to Visual Studio according to https://docs.microsoft.com/en-gb/nuget/consume-packages/install-use-packages-visual-studio#package-sources\n\n# Project structure\n\n\u003c!--\nquickchart.io is open source, here is the tracking issue for experimental GraphViz support:\nhttps://github.com/typpo/quickchart/issues/57\n\nhttps://quickchart.io/chart?chof=png\u0026cht=gv\u0026chl=graph{...}\nchof: chart format, defaults to SVG where text renders differently on different platforms, e.g. renders perfectly on Windows but not on Android, but PNG looks even worse\ncht: chart type, gv stands for GraphViz which produces organizational charts\nchl: chart labels, here a graph written in https://en.wikipedia.org/wiki/DOT_language is used. Special characters such as spaces and less-than symbols must be escaped to %20 and %3C respectively or GitHub markdown will fail to parse the URL\n\nFor all uses and possible values of the API parameters, see https://developers.google.com/chart/image/docs/chart_params\n--\u003e\n![Project structure](https://quickchart.io/chart?cht=gv\u0026chl=graph{node[shape=box];{rank=same;\"Typography.OpenFont\";\"Typography.TextBreak\";CSharpMath};\"Typography.OpenFont\"[shape=record,label=\"{_Dependencies|Typography.OpenFont}\"];\"Typography.TextBreak\"[shape=record,label=\"{_Dependencies|Typography.TextBreak}\"];CSharpMath[shape=record,label=\"{_Core|CSharpMath}\"];\"CSharpMath.Apple\"[shape=record,label=\"{iOS|CSharpMath.Apple}\"];\"CSharpMath.Avalonia\"[shape=record,label=\"{Avalonia|CSharpMath.Avalonia}\"];\"CSharpMath.SkiaSharp\"[shape=record,label=\"{SkiaSharp|CSharpMath.SkiaSharp}\"];\"CSharpMath.Forms\"[shape=record,label=\"{Xamarin.Forms|CSharpMath.Forms}\"];\"Typography.OpenFont\"--\"Typography.GlyphLayout\";\"Typography.TextBreak\"--\"TextBreakTests\";CSharpMath--\"CSharpMath.CoreTests\";CSharpMath--\"CSharpMath.Apple\"--\"CSharpMath.Ios\"--{\"CSharpMath.Ios.Example\";\"CSharpMath.Ios.Tests\"};CSharpMath--\"CSharpMath.Editor\"--\"CSharpMath.Editor.Tests\"--\"CSharpMath.Editor.Tests.Visualizer\";\"CSharpMath.Editor\"--\"CSharpMath.Editor.Tests.FSharp\";CSharpMath--\"CSharpMath.Evaluation\"--{\"CSharpMath.Evaluation.Tests\";\"CSharpMath.Forms.Example\"};{\"CSharpMath.Editor\";\"Typography.GlyphLayout\";\"Typography.TextBreak\"}--\"CSharpMath.Rendering\"--\"CSharpMath.Rendering.Text.Tests\";\"CSharpMath.Rendering\"--\"CSharpMath.Avalonia\"--\"CSharpMath.Avalonia.Example\";\"CSharpMath.Rendering\"--\"CSharpMath.SkiaSharp\"--\"CSharpMath.Forms\"--\"CSharpMath.Forms.Example\";\"CSharpMath.Forms.Example\"--{\"CSharpMath.Forms.Example.Android\";\"CSharpMath.Forms.Example.iOS\";\"CSharpMath.Forms.Example.UWP\";\"CSharpMath.Forms.Example.WPF\"};{\"CSharpMath.Avalonia\";\"CSharpMath.SkiaSharp\"}--\"CSharpMath.Rendering.Tests\";\"CSharpMath.Xaml\"--{\"CSharpMath.Avalonia\";\"CSharpMath.Forms\"}--\"CSharpMath.Xaml.Tests\"})\n\n## Major processes of drawing LaTeX\n\u003c!--For some reason taillabel is the only way to position a label to the left--\u003e\n![Major processes of drawing LaTeX](https://quickchart.io/chart?cht=gv\u0026chl=digraph{edge[label=\"%20\"];{rank=same;\"string%20(LaTeX%20math)\";\"string%20(LaTeX%20text)\"};\"string%20(LaTeX%20math)\"-\u003e\"CSharpMath.Atom.MathList\"[taillabel=\"CSharpMath.Atom.LaTeXParser.MathListFromLaTeX%20\"];\"CSharpMath.Atom.MathList\"-\u003e\"string%20(LaTeX%20math)\"[label=\"CSharpMath.Atom.LaTeXParser.MathListToLaTeX\"];\"CSharpMath.Atom.MathList\"-\u003e\"CSharpMath.Evaluation.MathItem\"[label=\"CSharpMath.Evaluation.Evaluate\"];\"CSharpMath.Evaluation.MathItem\"-\u003e\"CSharpMath.Atom.MathList\"[taillabel=\"CSharpMath.Evaluation.Visualize%20%20\"];\"CSharpMath.Atom.MathList\"-\u003e\"CSharpMath.Display.IDisplay%3CTFont,%20TGlyph\u003e\"[label=\"CSharpMath.Display.Typesetter.CreateLine\"];\"string%20(LaTeX%20text)\"-\u003e\"CSharpMath.Rendering.Text.TextAtom\"[label=\"CSharpMath.Rendering.Text.TextLaTeXParser.TextAtomFromLaTeX\"];\"CSharpMath.Rendering.Text.TextAtom\"-\u003e\"string%20(LaTeX%20text)\"[taillabel=\"CSharpMath.Rendering.Text.TextLaTeXParser.TextAtomToLaTeX%20\"];\"CSharpMath.Rendering.Text.TextAtom\"-\u003e\"CSharpMath.Display.IDisplay%3CTFont,%20TGlyph\u003e\"[label=\"CSharpMath.Rendering.Text.TextTypesetter.Layout\"];\"CSharpMath.Display.IDisplay%3CTFont,%20TGlyph\u003e\"-\u003e\"(Rendered%20output)\"[label=\"CSharpMath.Display.IDisplay%3CTFont,%20TGlyph\u003e.Draw\"];\"(Platform%20canvas)\"-\u003e\"CSharpMath.Rendering.FrontEnd.ICanvas\"[label=\"%20CSharpMath.Rendering.FrontEnd.Painter%3CTCanvas,%20TContent,%20TColor\u003e.WrapCanvas\"];\"CSharpMath.Rendering.FrontEnd.ICanvas\"-\u003e\"CSharpMath.Rendering.BackEnd.GraphicsContext\"[label=\"%20new%20CSharpMath.Rendering.BackEnd.GraphicsContext\"];\"CSharpMath.Rendering.BackEnd.GraphicsContext\"-\u003e\"(Rendered%20output)\"})\n\n# Extending to more platforms\n\nThere are a few ways to extend this to more platforms:\n(Hopefully, you would not need to touch the core typesetting engine. If you do, we would consider that a bug.)\n\n### 1. Branching off from CSharpMath.Rendering (recommended)\n\nAs CSharpMath.Rendering provides font lookup through [the Typography library](https://github.com/LayoutFarm/Typography), you would only need to write adapter classes to connect this library to your chosen graphics library.\n\nYou would have to implement [ICanvas](CSharpMath.Rendering/FrontEnd/ICanvas.cs) and feed it into the Draw method of [MathPainter](CSharpMath.Rendering/FrontEnd/MathPainter.cs).\n\n### 2. Forking from CSharpMath the project\n\nThis path would require the most effort to implement, but allows you to plug in any font library and graphics library.\n\nYou would have to define your own [TypesettingContext](CSharpMath/Display/FrontEnd/TypesettingContext.cs) and write an implementation of [IGraphicsContext](CSharpMath/Display/FrontEnd/IGraphicsContext.cs).\n\nThe TypesettingContext in turn has several components, including choosing a font.\n\n### 3. Building on top of CSharpMath.SkiaSharp\n\nYou can extend this library to other SkiaSharp-supported platforms by feeding the SKCanvas given in the OnPaintSurface override of a SkiaSharp view into the Draw method of [MathPainter](CSharpMath.SkiaSharp/MathPainter.cs).\n      \n# Project needs\n\nWe need more contributors! Maybe you can contribute something to this repository. Whether they are bug reports, feature proposals or pull requests, you are welcome to send them to us. We are sure that we will take a look at them!\n\nHere is an idea list if you cannot think of anything right now:\n- A new example for the Example projects (please open pull requests straight away)\n- A new LaTeX command (please link documentation of it)\n- A new front end (please describe what it is and why should it be supported)\n- A new math syntax (please describe what it is and why should it be supported)\n\n# License\n\nCSharpMath is licensed by [the MIT license](LICENSE).\n\nDependency|Used by|License\n-|-|-\n[Typography project](https://github.com/LayoutFarm/Typography)|CSharpMath.Rendering|[MIT](https://github.com/LayoutFarm/Typography/blob/master/LICENSE.md)\n[AngouriMath project](https://github.com/asc-community/AngouriMath)|CSharpMath.Evaluation|[MIT](https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md)\n[Latin Modern Math font](http://www.gust.org.pl/projects/e-foundry/lm-math)|CSharpMath.Ios, CSharpMath.Rendering|[GUST Font License](http://www.gust.org.pl/projects/e-foundry/licenses/GUST-FONT-LICENSE.txt/view)\n[Cyrillic Modern font](https://sourceforge.net/projects/cyrillic-modern/)|CSharpMath.Rendering|[SIL Open Font License](https://ctan.org/license/ofl)\n[AMS Capital Blackboard Bold font](https://github.com/Happypig375/AMSFonts-Ttf-Otf) (extracted by @Happypig375 from [the amsfonts package](https://ctan.org/pkg/amsfonts))|CSharpMath.Rendering|[SIL Open Font License](https://ctan.org/license/ofl)\n[ComicNeue font](http://comicneue.com)|CSharpMath.Rendering.Tests, CSharpMath.Xaml.Tests|[SIL Open Font License](http://scripts.sil.org/OFL)\n\n# Authors\n\n[@verybadcat](https://github.com/verybadcat)\n\n[@Happypig375](https://github.com/Happypig375)\n\n[@charlesroddie](https://github.com/charlesroddie)\n\n[@FoggyFinder](https://github.com/FoggyFinder)\n\nThanks for reading.\n\u003c!--\nThe roadmap isn't happening bois\n\n\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\nYou can take a look at the code now.\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\nReally, there is nothing here.\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\nI bet you scrolled past and came back to read me.\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\nWill you stop scrolling?\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\nOk, fine... I give up.\n\n###### A sneak peek at the future?\n\nShhh... Don't tell anybody!\n\n![Future?](https://github.com/Happypig375/CSharpMath/blob/master/Roadmap.png)\n0.2.0: MathML?\n0.3.0: AsciiMath?\n0.4.0: Infix?\n\n0.4.0: Math evaluation??\n0.5.0: Handwritten math recognition???\n--\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverybadcat%2Fcsharpmath","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fverybadcat%2Fcsharpmath","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverybadcat%2Fcsharpmath/lists"}