C# 工具在 Winforms 或 PNG/BMP/等中渲染乳胶?

C# 工具在 Winforms 或 PNG/BMP/等中渲染乳胶?

我正在徒劳地寻找一个控件或 DLL,它允许我在 C# winforms 项目中呈现 Latex 代码。

(大多数搜索词似乎都假设我正在尝试在 Latex 中呈现 C# 代码......)

我计划构建表达式并转换为 Latex 代码,然后动态地在屏幕上渲染。

有什么建议么?

答案1

以下内容可能对您有所帮助。请随意编辑我的代码以适应所有已知的最佳实践。

步骤 0

确保已安装 LaTeX 发行版(TeX Live 或 MikTeX)和 ImageMagick。将 ImageMagick 的路径注册到系统路径,以便convert命令在任何地方都可用。

步骤1

用 C# (或 VB) 创建一个新 WinForm 项目。将一个RichTextBox、一个Button和一个拖到PictureBoxForm。如下编写后台代码。

using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
namespace LaTeXEditor
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            File.WriteAllText("input.tex", richTextBox1.Text);

            Process p1 = new Process();
            p1.StartInfo.FileName = "batch.bat";
            p1.StartInfo.Arguments = "input";
            p1.StartInfo.UseShellExecute = false;

            p1.Start();
            p1.WaitForExit();

            pictureBox1.ImageLocation = "output.png";    
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            richTextBox1.Text = 
@"\documentclass[preview,border=12pt]{standalone}
\usepackage{amsmath}
\usepackage{tikz}

\begin{document}
PSTricks is more powerful than this one\\ \tikz\draw[red] (0,0) circle (1);
\end{document}
";
        }
    }
}

第2步

向项目添加一个新文件batch.bat。如有必要,应通过为批处理文件定义附加参数来避免使用硬编码文字。

rem batch.bat
rem %1 represents the file name with no extension.
pdflatex -jobname=output %1
convert -density 200 -alpha on output.pdf output.png

修改后构建事件如下,将其复制batch.bat到项目输出目录。

在此处输入图片描述

步骤3

按照如下方法编译并尝试。

在此处输入图片描述

答案2

步骤1创建一个新的Wpf-app,链接Wpf-math,使用Nuget Browser

在此处输入图片描述

第2步。...并按如下方式修改 MainWindow()

using WpfMath.Converters;

namespace WpfMathExample
{
    public partial class MainWindow : Window
    {
     const string latex = @"\frac{2+2}{2}";
     const string fileName = @"formula.png";

     public MainWindow()
     {
        InitializeComponent();

        // modification starts here..
    
        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);
        }
    }
  }
}

运行后,您的调试目录中的 .exe 旁边会有一个 .png 文件,其内容如下:

在此处输入图片描述

(于 2022 年 2 月 5 日测试 VS2019,WPF .Net5)

相关内容