情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

C#+LaTeXで数式の画像化

LaTeXで数式を組版して画像化するプログラムを作りました。適切な場所に適切なプログラムがインストールされていないと動作しません。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public int index = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                string latex = @"\documentclass[a4j,12pt]{jarticle}\usepackage{latexsym}\usepackage{amsmath}\usepackage{amssymb}\usepackage{bm}\usepackage{graphicx}\usepackage{wrapfig}\usepackage{fancybox}\pagestyle{empty}\begin{document}";

                latex += "$ "+ textBox1.Text + " $";
                latex += @"\end{document}";

                string body = "latex";

                File.WriteAllText(body + ".tex", latex);

                ProcessStartInfo platex = new ProcessStartInfo()
                {
                    FileName = @"C:\w32tex\bin\platex.exe",
                    Arguments = body + ".tex",
                    CreateNoWindow = true,
                    UseShellExecute = false
                };

                ProcessStartInfo dvips = new ProcessStartInfo()
                {
                    FileName = @"C:\w32tex\bin\dvips.exe",
                    Arguments = body + ".dvi " + "-o " + body + ".eps",
                    CreateNoWindow = true,
                    UseShellExecute = false
                };

                ProcessStartInfo gswin32c = new ProcessStartInfo()
                {
                    FileName = @"C:\gs\gs9.04\bin\gswin32c.exe",
                    Arguments = "-dSAFER -q -dBATCH -dNOPAUSE -sDEVICE=epswrite -dEPSCrop -r9600 -sOutputFile=" + body + "2.eps " + body + ".eps",
                    CreateNoWindow = true,
                    UseShellExecute = false
                };

                ProcessStartInfo convert = new ProcessStartInfo()
                {
                    FileName = @"C:\Program Files (x86)\ImageMagick-6.7.6-Q16\convert.exe",
                    Arguments = "-density 300x300 " + body + "2.eps " + body + ".png",
                    CreateNoWindow = true,
                    UseShellExecute = false
                };

                Process.Start(platex).WaitForExit();
                Process.Start(dvips).WaitForExit();
                Process.Start(gswin32c).WaitForExit();
                Process.Start(convert).WaitForExit();

                FileStream fs = new FileStream(body + ".png", FileMode.Open, FileAccess.Read);
                pictureBox1.Image = Image.FromStream(fs);
                fs.Close();
            }
        }
    }
}
pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-C#, LaTeX