Cómo renderizar una fórmula en WPF o WinForms

Necesito tener una forma de dibujar una fórmula matemática en Windows Forms o WPF. Un control de “FormulaTextBox” sería exactamente lo que necesito.

No estoy preguntando sobre la implementación completa de LaTEX, pero al menos algo más allá de las posibilidades de RichTextBox, con líneas de división, raíces cuadradas, etc.

PS C # es tan poderoso. ¡Una forma de dibujar fórmulas con C # (.NET) debería estar con nosotros!

Se han encontrado soluciones:

  1. Esta solución utiliza la biblioteca MathTex (MimeTex en el pasado) para generar archivos gif a partir de cadenas similares a TeX.
    Contras :

    • No hay una versión de Windows de la biblioteca mantenida y probada . El artículo sugiere pérdidas de memoria y otros problemas que podrían aparecer a causa de esto. Uno tiene que ajustar y mantener la versión de Windows por sí mismo.

    • El enfoque general tiene un diseño antinatural para winforms o WPF. Si bien podría adaptarse a la web, parece que no es tan óptimo para las formas de ganar.

    • Hay mucho que hacer desde el ejemplo del artículo hasta un control de trabajo real (siempre hay algo que hacer, pero agradecería una solución más fácil de usar)

Aquí hay una lista de opciones, extraídas de varias páginas web en línea, así como algunas preguntas similares en SO

  • WPF-Math , una biblioteca de WPF para el marcado de TeX relacionado con matemáticas.
  • gNumerator es un control WinForms que representa MathML . Es C # nativo, pero parece ser bastante viejo.
  • Math Expressions , un control comercial WinForms para mostrar y editar ecuaciones matemáticas. Nota: no es gratis
  • Hay un puerto no oficial de JMathTex para un control C # WPF
  • La versión de Windows del editor de LaTex Lyx usa una biblioteca nativa llamada MikTex que puedes ver. Vi mencionar en alguna parte que el paquete tex4ht convierte ecuaciones matemáticas en imágenes
  • MimeTex / MathTex , como ya mencionaste
  • También podría usar un control WebBrowser , e incluir localmente una de las muchas bibliotecas de JavaScript para representar LaTex.
  • Podría peónar el trabajo en Microsoft Word ( Ejemplo : ¡ requiere que los usuarios tengan MS Word instalado! )

Tal vez puedas usar la API de Wolfram Alpha para recuperar las imágenes.

Si quieres algo más allá de las capacidades de RichTextBox para renderizar circulares, divisiones y raíces sqr, etc., puedes usar WebBrowserControl (s) como cuadros de texto. Luego, para procesar fórmulas, puede aprovechar las técnicas que se muestran en esta página web, guardarlas en su escritorio y abrir el archivo html:

http://www.wjagray.co.uk/maths/ASCIIMathTutorial.html

Obviamente necesitarás una syntax especial (o botones especiales de calculadora) para ingresar la fórmula y supongo que al mirar el archivo customisations.js que maneja esa página web también puedes hacer tu propia lista de operadores y funciones.

Esto es lo que haría si ninguna de las soluciones específicas de .NET funciona para usted:

Es un poco hacky, pero funcionará y tus usuarios no sabrán la diferencia. Descargue la biblioteca de Mathjax . Cuando su usuario entra en la ecuación, puede convertir la ecuación en LaTex o MathML. Luego tomaría LaTex o MathML y ​​generaría un archivo HTML que hace referencia a Mathjax y mostrará el archivo en su pequeña ventana de WebBrowser (válido tanto para WinForms como para WPF). Esto no debería requerir una conexión a internet.

Como dije, tus usuarios no serán más sabios.