SkillAgentSearch skills...

CSharpMath

LaTeX. in C#. (ported from the wonderful iosMath project).

Install / Use

/learn @verybadcat/CSharpMath
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<h3 align="center">Cross-platform LaTeX rendering!</h3> <p align="center"> <br/><img src="Icon.png" width="300px" alt="CSharpMath icon"><br/><br/> CSharpMath is a C# port of the wonderful <a href="https://github.com/kostub/iosMath">iosMath LaTeX engine</a>.<br/> <i>The icon is a product of this library.</i> </p>

Current release|NuGet release shield GitHub release shield GitHub release date shield GitHub commits since last release shield -|- Current prerelease|NuGet pre-release shield GitHub pre-release shield GitHub pre-release date shield GitHub commits since last prerelease shield

<!-- The "Current nightly" badge is blocked on https://github.com/badges/shields/pull/4184 -->

NuGet downloads shield GitHub contributors shield GitHub license shield GitHub last commit shield [GitHub Build workflow shield [GitHub Test workflow shield codecov.io badge

Average time to resolve an issue Percentage of issues still open Issues welcome Pull Requests welcome ❤

<!-- ## Choose your platform Really, any one you like! [//]: # (Primary platforms) [SkiaSharp](CSharpMath.Wiki/@GettingStarted~SkiaSharp.md) [Xamarin.Forms](CSharpMath.Wiki/@GettingStarted~Forms.md) [//]: # (Through SkiaSharp) iOS tvOS watchOS [Xamarin.Android](CSharpMath.Wiki/@GettingStarted~Android.md) Mac [.NET Core](CSharpMath.Wiki/@GettingStarted~NetCore.md) [Windows Forms](CSharpMath.Wiki/@GettingStarted~WinForms.md) [Windows Presentation Framework](CSharpMath.Wiki/@GettingStarted~WPF.md) [Universal Windows Platform](CSharpMath.Wiki/@GettingStarted~UWP.md) [Gtk#](CSharpMath.Wiki/@GettingStarted~Gtk.md) [Tizen](CSharpMath.Wiki/@GettingStarted~Tizen.md) [//]: # (Future) [Unity](CSharpMath.Wiki/@GettingStarted~Unity.md) [ASP.NET](CSharpMath.Wiki/@GettingStarted~ASP.md) -->

Platform support

Xamarin.Forms (CSharpMath.Forms) support via SkiaSharp (CSharpMath.SkiaSharp) was added in v0.1.

Avalonia (CSharpMath.Avalonia) support was also added in v0.4.

For Windows platforms, use https://github.com/ForNeVeR/wpf-math.

For Unity3D, use https://assetstore.unity.com/packages/tools/gui/texdraw-51426. (paid: USD$50)

The above projects are independent of CSharpMath.

Usage and Examples

To get started, do something like this:

1. CSharpMath.SkiaSharp

var painter = CSharpMath.SkiaSharp.MathPainter();
painter.LaTeX = @"\frac\sqrt23";
paiinter.Draw(someCanvas);

This is used by CSharpMath.Forms below.

2. CSharpMath.Forms

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:math="clr-namespace:CSharpMath.Forms;assembly=CSharpMath.Forms"
             x:Class="Namespace.Class">
    <math:MathView x:Name="View" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
        \frac\sqrt23
    </math:MathView>
</ContentPage>

or:

var view = new CSharpMath.Forms.MathView();
view.HorizontalOptions = view.VerticalOptions = LayoutOptions.FillAndExpand;
view.LaTeX = @"\frac\sqrt23";
someLayout.Children.Add(view);

See an example project

Android | Windows UWP --------|------------ 1+1 | Panning a view Colors!

3. CSharpMath.Avalonia

<UserControl xmlns="https://github.com/avaloniaui"
             xmlns:math="clr-namespace:CSharpMath.Avalonia;assembly=CSharpMath.Avalonia"
             x:Class="Namespace.Class">
    <math:MathView LaTeX="x + 2 \sqrt{x} + 1 = (\sqrt x+1)^2" />
</UserControl>

or:

var view = new CSharpMath.Avalonia.MathView();
view.LaTeX = @"\frac\sqrt23";
somePanel.Children.Add(view);

See an example project

MathViewPage

But I want a button instead!

For 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.

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:math="clr-namespace:CSharpMath.Forms;assembly=CSharpMath.Forms"
             x:Class="Namespace.Class">
    <math:MathButton x:Name="MathButton">
        <math:MathView x:Name="MathView">
            \frac\sqrt23
        </math:MathView>
    </math:MathButton>
</ContentPage>

For Avalonia, Avalonia.Controls.Button already supports arbitrary content. Use it instead.

<UserControl xmlns="https://github.com/avaloniaui"
             xmlns:math="clr-namespace:CSharpMath.Avalonia;assembly=CSharpMath.Avalonia"
             x:Class="Namespace.Class">
    <Button x:Name="MathButton">
        <math:MathView x:Name="MathView">
            \frac\sqrt23
        </math:MathView>
    </Button>
</UserControl>

But I want to display a majority of normal text with a minority of math!

CSharpMath also provides a TextView exactly for this purpose. You can use $, \( and \) to delimit inline math and $$, \[ and \] to delimit display math. There is also a TextButton for the Xamarin.Forms equivalent of MathButton. Xamarin.Forms:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:math="clr-namespace:CSharpMath.Forms;assembly=CSharpMath.Forms"
             x:Class="Namespace.Class">
    <math:TextView LaTeX="Text text text text text \( \frac{\sqrt a}{b} \) text text text text text" />
</ContentPage>

Avalonia:

<UserControl xmlns="https://github.com/avaloniaui"
             xmlns:math="clr-namespace:CSharpMath.Avalonia;assembly=CSharpMath.Avalonia"
             x:Class="Namespace.Class">
    <math:TextView LaTeX="Text text text text text \( \frac{\sqrt a}{b} \) text text text text text" />
</UserControl>

Xamarin.Forms|Avalonia -|- Xamarin.Forms|Avalonia

What about rendering to an image instead of displaying in a view?

Warning: There are still some rough edges on image rendering to be resolved, such as this and this. However, it is already usable for the majority of cases.

For SkiaSharp:

using CSharpMath.SkiaSharp;
var painter = new MathPainter { LaTeX = @"\frac23" }; // or TextPainter
using var png = painter.DrawAsStream();
// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Jpeg) for JPEG
// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Gif) for GIF
// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Bmp) for BMP
// or... you get it.

For Xamarin.Forms:

using CSharpMath.SkiaSharp;
var painter = someMathView.Painter; // or someTextView.Painter
using var png = painter.DrawAsStream();
// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Jpeg) for JPEG
// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Gif) for GIF
// or painter.DrawAsStream(format: SkiaSharp.SKEncodedImageFormat.Bmp) for BMP
// or... you get it.

For Avalonia:

using CSharpMath.Avalonia;
var painter = someMathView.Painter; // or someTextView.Pai
View on GitHub
GitHub Stars437
CategoryDevelopment
Updated2d ago
Forks71

Languages

C#

Security Score

100/100

Audited on Mar 30, 2026

No findings