我想知道是否存在一个本地的.NET渲染器用于TeX/LaTeX。我找到的最接近的匹配是Java实现的JMathTeX。虽然我很想将其移植到C#,但在此之前,我只想检查一下是否有人了解是否存在.NET实现。
我的当前想法是使用MiKTeX和dvipng
编译TeX源代码,并将生成的DVI呈现为PNG,但我仍然担心这可能会产生不可接受的开销,更不用说需要将MiKTeX捆绑到给定程序中。
我想知道是否存在一个本地的.NET渲染器用于TeX/LaTeX。我找到的最接近的匹配是Java实现的JMathTeX。虽然我很想将其移植到C#,但在此之前,我只想检查一下是否有人了解是否存在.NET实现。
我的当前想法是使用MiKTeX和dvipng
编译TeX源代码,并将生成的DVI呈现为PNG,但我仍然担心这可能会产生不可接受的开销,更不用说需要将MiKTeX捆绑到给定程序中。
一个纯C#实现的LaTex引擎,由verybadcat开发。
这是一个基于iosMath LaTeX引擎的C#移植版。
它现在在大多数情况下都可以工作。以下是一些示例。具有讽刺意味的是,第一个前端是iOS。但是,如果您想添加前端(如Xamarin.Forms或Windows环境),应该也是可能的。您需要定义自己的TypesettingContext并编写IGraphicsContext的实现。TypesettingContext又包含多个组件,包括选择字体。希望您不需要接触核心排版引擎。(如果您需要,那我认为那是一个bug。)
如果我没记错的话,TeX是用Pascal方言编写的,当今它通常首先被编译成标准C,然后再使用C编译器编译为最终二进制文件。也许将原始的Pascal代码编译成C#,并在C#中编写一个包装器来使用它作为库可能是可行的。
当然,这是一个相当庞大的项目,可能对你手头的问题来说有些过度。
使用这段代码!!!
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);