Средство рендеринга LaTeX для .NET?
Вопрос
Мне любопытно, существует ли собственный рендерер .NET для TeX / LaTeX.Самое близкое совпадение, которое мне удалось найти, - это реализация Java, JMathTeX.У меня возникает соблазн перенести это на C #, но прежде чем я это сделаю, я просто хотел бы проверить, знает ли кто-нибудь о существующей реализации .NET.
В настоящее время я думаю использовать MiKTeX вместе с dvipng
чтобы скомпилировать исходный текст TeX и отобразить сгенерированный DVI в формате PNG, но я все еще беспокоюсь, что это может повлечь за собой неприемлемое количество накладных расходов, не говоря уже о необходимости связывать MiKTeX с данной программой.
Решение
Если я не ошибаюсь, TeX написан на диалекте Паскаля, и при сегодняшней компиляции он обычно сначала компилируется в стандартный C, а затем компилируется с помощью компилятора C для получения окончательного двоичного файла.Вместо этого было бы целесообразно скомпилировать исходный код Pascal в C# и, возможно, написать оболочку вокруг него на C#, чтобы иметь возможность использовать его в качестве библиотеки.
Конечно, это довольно большой проект, и, вероятно, он будет излишним для вашей проблемы.
Другие советы
Чистая реализация Latex на C # от verybadcat.
Это порт на C # замечательного движка iosMath LaTeX.
Сейчас это работает в большинстве случаев.Ниже приведены некоторые примеры.По иронии судьбы первый интерфейс - это iOS.Однако, если вы хотите добавить интерфейс, такой как Xamarin.Forms или среду Windows, это должно быть возможно.Вам пришлось бы определить свой собственный TypesettingContext и написать реализацию IGraphicsContext.В TypesettingContext в свою очередь, состоит из нескольких компонентов, включая выбор шрифта.Надеюсь, вам не нужно будет прикасаться к основному механизму набора текста.(Если вы это сделаете, я считаю, что баг.)
Это очень запоздало, но я решил опубликовать ссылку на возрожденный и расширенный порт WPF-Математика проект, который я начал вскоре после этого первоначального вопроса и до сих пор поддерживаю в незначительной степени.Первоначально это был порт JMathTex, но с тех пор расширился и включил в себя гораздо больше.На данный момент он находится в процессе получения средств визуализации, отличных от WPF.
используйте этот код!!!
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);