Laden...

MathJax in C# aufrufen

Erstellt von johnnycc vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.619 Views
J
johnnycc Themenstarter:in
9 Beiträge seit 2018
vor 5 Jahren
MathJax in C# aufrufen

Ich bin mit einem standalone Programm in C# beschäftigt, in dem ich MathJax Bibliothek verwenden möchte.
Da MathJax eine auf JavaScript basierende Bibliothek ist, bin ich mir nicht sicher, ob es machbar ist.
Vermutlich muss ich Espresso, Javascript.Net,ClearScript o. Ä verwenden.
Leider unterstützen diese Bibliothek JS nicht vollständig.
Z.B. Javascript.Net unterstützt DOM nicht.
Hat jemand Erfahrung mit JS in C# oder noch besser mit MathJax in C#?

C
2.121 Beiträge seit 2010
vor 5 Jahren

Wie ich das sehe ist diese Bibliothek für Browser gedacht. Wie bzw. welche Funktionalität willst du damit in ein C# Programm einbauen?

J
johnnycc Themenstarter:in
9 Beiträge seit 2018
vor 5 Jahren

Ich möchte mathematische Formeln in LaTeX zu SVG und MathML umwandeln.
Ich könnte für die Umwandlung von LaTeX in SVG wpf-math verwenden aber ich fand keine LaTeX->MathML Konverter für C#. Die Bibliothek sollte auch das amsmath Paket unterstützen.

78 Beiträge seit 2016
vor 5 Jahren

Hallo johnnycc,

so sollte es funktionieren:

  1. Erstelle ein .NET Projekt (.NET Core oder FF - ist egal)
  2. Installiere dir über nuget Edge.js (https://www.nuget.org/packages/Edge.js/).
  3. Installiere auf dem Rechner Node.js
  4. im Projekt-Folder "npm init" und "npm install mathjax-node"
  5. C#-Code (quick and dirty!):

       private static void Main(string[] args)
        {
            string script = @"
                return function (math, callback) {
                    var mjAPI = require('mathjax-node');

                    mjAPI.start();

                    mjAPI.typeset({
                      math: math,

                      mml: true,
                    }, function(data) {
                            callback(null, data.mml);
                        });
                } ";

            var func = Edge.Func(script);

            Console.WriteLine(func("E = mc^2").GetAwaiter().GetResult());
        }

Die Ausgabe sollte dann so aussehen:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block" alttext="E = mc^2">
  <mi>E</mi>
  <mo>=</mo>
  <mi>m</mi>
  <msup>
    <mi>c</mi>
    <mn>2</mn>
  </msup>
</math>


Wird beim starten die node.dll nicht gefunden wurde, dann beachte dieses Issue:
https://github.com/tjanczuk/edge/issues/503

Infos zu edge.js:
https://github.com/tjanczuk/edge/tree/master#scripting-nodejs-from-clr

Infos zumathjax-node:
https://github.com/mathjax/MathJax-node

  • Ich würde den JavaScript/TypeScript-Code natürlich auslagern.
  • Bundle mit Webpack wäre natürlich auch ganz gut.

http://dotnet-paderborn.azurewebsites.net/

J
johnnycc Themenstarter:in
9 Beiträge seit 2018
vor 5 Jahren

Vielen Dank, es hat funktioniert. 👍
Ich kenne mich mit Node.js nicht aus.
Nach dem ich mathjax-node installiert habe, habe ich Node.js deinstalliert und es funktionierte trotzdem.
Anscheinend ist mathjax-node Dateien im Projekt-Folder ausreichend.
Dies ist wichtig da nicht jeder, der das Programm benutzt, Node.js auf dem Rechner hat.

16.834 Beiträge seit 2008
vor 5 Jahren

Node wird benötigt, wenn Du die NPM Befehle ausführen willst.
Ein Benutzer braucht das nicht, aber ein Entwickler. Du musst jedoch natürlich die JavaScript-Dateien mitliefern, die erzeugt werden.