我正在徒劳地寻找一个控件或 DLL,它允许我在 C# winforms 项目中呈现 Latex 代码。
(大多数搜索词似乎都假设我正在尝试在 Latex 中呈现 C# 代码......)
我计划构建表达式并转换为 Latex 代码,然后动态地在屏幕上渲染。
有什么建议么?
答案1
以下内容可能对您有所帮助。请随意编辑我的代码以适应所有已知的最佳实践。
步骤 0
确保已安装 LaTeX 发行版(TeX Live 或 MikTeX)和 ImageMagick。将 ImageMagick 的路径注册到系统路径,以便convert
命令在任何地方都可用。
步骤1
用 C# (或 VB) 创建一个新 WinForm 项目。将一个RichTextBox
、一个Button
和一个拖到PictureBox
上Form
。如下编写后台代码。
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)