LaTeX рендеринга для .NET?
Мне любопытно, существует ли собственный .NET-рендеринг для TeX/LaTeX. Самое близкое совпадение, которое я смог найти, - это реализация Java, JMathTeX. Я испытываю соблазн переносить это на С#, но прежде чем я это сделаю, я просто хотел бы проверить, знает ли кто-нибудь о реализации .NET.
Мои текущие мысли - использовать MiKTeX вместе с dvipng
для компиляции источника TeX и рендеринга сгенерированного DVI как PNG, но я все еще беспокоюсь, что это может привести к недопустимому объему накладных расходов, не говоря уже о необходимости пакет MiKTeX с данной программой.
Ответы
Ответ 1
Если я не ошибаюсь, TeX написан на диалекте Pascal, а когда он скомпилирован сегодня, он сначала сначала компилируется в стандартный C, а затем скомпилирован с компилятором C для создания финального двоичного файла. Возможно было бы скомпилировать исходный код Pascal в С# и, возможно, написать обертку вокруг него на С#, чтобы иметь возможность использовать его в качестве библиотеки.
Конечно, это довольно большой проект, который нужно взять на себя и, вероятно, переполняет вашу проблему.
Ответ 2
Чистая реализация С# Latex by verybadcat.
Это порт С# замечательного движка iosMath LaTeX.
В настоящее время он работает в большинстве случаев. Ниже приведены некоторые примеры. Как ни странно достаточно, первый передний конец iOS. Однако, если вы хотите добавить переднего конца, например, Xamarin.Forms или среды Windows, он должен возможно. Вам нужно будет определить свой собственный TypettingContext и написать реализацию IGraphicsContext. Тип набора текста в turn имеет несколько компонентов, включая выбор шрифта. Надеюсь, вы не нужно было бы трогать основной механизм набора. (Если вы это сделаете, я будет считать, что ошибка.)
![CSharpMath example]()
Ответ 3
Это очень давно, но я решил опубликовать ссылку на возрожденный и расширенный порт проекта WPF-Math, который я начал не слишком долго после этого первоначального вопроса, и все же помогу поддерживать его в незначительном качестве. Первоначально это был порт JMathTex, но с тех пор он расширился и стал включать гораздо больше. На данный момент это процесс получения рендеров кроме WPF.
Ответ 4
используйте этот код !!!
const string latex = @"\frac{2+2}{2}";
const string fileName = @"formula.png";
File.Open(fileName, FileMode.OpenOrCreate).Close();
var parser = new WpfMath.TexFormulaParser();
var formula = parser.Parse(latex);
var renderer = formula.GetRenderer(WpfMath.TexStyle.Display, 20.0, "Arial");
var bitmapSource = renderer.RenderToBitmap(0, 0);
var encoder = new System.Windows.Media.Imaging.PngBitmapEncoder();
encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(bitmapSource));
using (var target = new FileStream(fileName, FileMode.Create))
{
encoder.Save(target);
}
pictureBox2.Image = Image.FromFile(fileName);