C#开发基于Http的LaTeX数学公式转换器
本文将讲解如何通过codecogs.com和Google.com提供的API接口来将LaTeX数学函数表达式转化为图片形式。具体思路如下:
(1)通过TextBox获取用户输入的LaTeX数学表达式,然后对表达式格式化使之便于网络传输。
(2)将格式化之后的字符串,通过Http请求发送至codecogs.com或者Google.com。
(3)获取网站返回的数据流,将其转化为图片,并显示在PictureBox上。
具体过程为:
首先,我们在这个网站输入LaTeX数学公式然后返回图片时,即“http://latex.codecogs.com/gif.latex?“后面跟上我们输入的公式内容。比如”http://latex.codecogs.com/gif.latex?\alpha”就显示一个希腊字母。所以我们可以在其后加上我们希望转换的公式即可。但是需要注意的是,网络URL中的空格有时候会自动转化为加号”+“。所以,我们在传输的时候需要将空格去掉。或者将其转换为”%20“。
建立如图所示的Form。一个TextBox,六个Button和一个PictureBox。
用例为著名的“薛定谔方程”:
i\hbar\frac{\partial \psi}{\partial {t}} = \frac{-\hbar^2}{2m} \left( \frac{\partial^2}{\partial {x^2}} + \frac{\partial^2}{\partial {y^2}} + \frac{\partial^2}{\partial {z^2}} \right) \psi + V \psi

“粘贴文本”按钮添加如下单击事件。
private void btnPasteText_Click(object sender, EventArgs e)
{
string content = Clipboard.GetText(); // 获取剪切板文本信息
textBox.Text = content; // 将信息显示到TextBox
}
private bool check()
{
if(textBox.Text.Trim() == "") // 如果TextBox为空
{
MessageBox.Show(this, "请填写 LaTeX 函数代码!");
return false;
}
return true;
}
“Google预览”按钮添加如下事件。
private void btnPreviewGoogle_Click(object sender, EventArgs e)
{
if (check())
{
// 首先将文本信息格式化,作为URL信息。
string ImgUrl = String.Format(PicUrlGoogle, HttpUtility.UrlPathEncode(textBox.Text));
pictureBox.ImageLocation = ImgUrl; // 加载网络图片到PictureBox
btnCopyImg.Enabled = true; // 使“复制图像”按钮可用
}
else
btnCopyImg.Enabled = false; // 否则使“复制图像”按钮不可用
}
“Cogs预览”按钮添加如下事件。
private void btnPreviewCogs_Click(object sender, EventArgs e)
{
if (check())
{
// 首先将文本信息格式化,作为URL信息。
string ImgUrl = String.Format(PicUrlCogs, HttpUtility.UrlPathEncode(textBox.Text));
pictureBox.ImageLocation = ImgUrl; // 加载网络图片到PictureBox
btnCopyImg.Enabled = true; // 使“复制图像”按钮可用
}
else
btnCopyImg.Enabled = false; // 否则使“复制图像”按钮不可用
}
“复制图像”按钮添加如下单击事件。
private void btnCopyImg_Click(object sender, EventArgs e)
{
if(pictureBox.Image != null)
Clipboard.SetImage(pictureBox.Image); // 将Picture图片复制到剪切板
}
“显示帮助”按钮添加如下事件。
private void btnHelp_Click(object sender, EventArgs e)
{
textBox.Text = "1、LaTex 公式前后无需 $ 符号;\r\n"
+ "2、需要联网,Google丑,Cogs慢;\r\n"
+ "3、尽量多使用 {} 将字段括起来;\r\n"
+ "4、于 2015年11月13日。";
}
“退出”按钮添加如下事件。
private void btnExit_Click(object sender, EventArgs e)
{
System.Environment.Exit(0); // 退出程序
}
完整代码如下:
using System;
using System.Windows.Forms;
using System.Web; namespace LaTeX_Win
{
public partial class Form1 : Form
{
private static string PicUrlGoogle = @"http://chart.apis.google.com/chart?cht=tx&chl={0}";
private static string PicUrlCogs = @"http://latex.codecogs.com/gif.latex?{0}";
public Form1()
{
InitializeComponent();
} private void btnPasteText_Click(object sender, EventArgs e)
{
string content = Clipboard.GetText();
textBox.Text = content;
} private void btnPreviewGoogle_Click(object sender, EventArgs e)
{
if (check())
{
string ImgUrl = String.Format(PicUrlGoogle, HttpUtility.UrlPathEncode(textBox.Text));
pictureBox.ImageLocation = ImgUrl;
btnCopyImg.Enabled = true;
}
else
btnCopyImg.Enabled = false;
}
private void btnPreviewCogs_Click(object sender, EventArgs e)
{
if (check())
{
string ImgUrl = String.Format(PicUrlCogs, HttpUtility.UrlPathEncode(textBox.Text));
pictureBox.ImageLocation = ImgUrl;
btnCopyImg.Enabled = true;
}
else
btnCopyImg.Enabled = false;
}
private void btnCopyImg_Click(object sender, EventArgs e)
{
if(pictureBox.Image != null)
Clipboard.SetImage(pictureBox.Image);
}
private bool check()
{
if(textBox.Text.Trim() == "")
{
MessageBox.Show(this, "请填写 LaTeX 函数代码!");
return false;
}
return true;
} private void btnExit_Click(object sender, EventArgs e)
{
System.Environment.Exit(0);
} private void btnHelp_Click(object sender, EventArgs e)
{
textBox.Text = "1、LaTex 公式前后无需 $ 符号;\r\n"
+ "2、需要联网,Google丑,Cogs慢;\r\n"
+ "3、尽量多使用 {} 将字段括起来;\r\n"
+ "4、于 2015年11月13日。";
}
}
}
C#开发基于Http的LaTeX数学公式转换器的更多相关文章
- Android开发手记(29) 基于Http的LaTeX数学公式转换器
本文将讲解如何通过codecogs.com和Google.com提供的API接口来将LaTeX数学函数表达式转化为图片形式.具体思路如下: (1)通过EditText获取用户输入的LaTeX数学表达式 ...
- Spring7——开发基于注解形式的spring
开发基于注解形式的spring SpringIOC容器的2种形式: (1)xml配置文件:applicationContext.xml; 存bean:<bean> 取bean: Appli ...
- [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...
- {VS2010C#}{WinForm}{ActiveX}VS2010C#开发基于WinForm的ActiveX控件
在VS2010中使用C#开发基于WinForm的ActiveX控件 常见的一些ActiveX大部分是使用VB.Delphi.C++开发,使用C#开发ActiveX要解决下面三个问题: 使.NET组件可 ...
- markdown下编辑latex数学公式
在利用为知笔记编写笔记的时候,有时需要用的markdown,只要把文件名加上后缀.md,就可以使用markdown语法,以下介绍在markdown下编辑latex数学公式. 使用LaTeX写公式的基本 ...
- Form_Form Builder开发基于视图页面和自动代码生成包(案例)
2014-01-06 Created By BaoXinjian
- 转】Mahout分步式程序开发 基于物品的协同过滤ItemCF
原博文出自于: http://blog.fens.me/hadoop-mahout-mapreduce-itemcf/ 感谢! Posted: Oct 14, 2013 Tags: Hadoopite ...
- Markdown 添加 Latex 数学公式
添加公式的方法 Latex 数学公式语法 添加公式的方法 行内公式 $行内公式$ 行间公式 $$行间公式$$ Latex 数学公式语法 角标(上下标) 上标命令^{} 下标命令_{} 上下标命令用来放 ...
- 最简单的基于FFMPEG的封装格式转换器(无编解码)
本文介绍一个基于FFMPEG的封装格式转换器.所谓的封装格式转换,就是在AVI,FLV,MKV,MP4这些格式之间转换(相应.avi,.flv,.mkv,.mp4文件).须要注意的是,本程序并不进行视 ...
随机推荐
- 【POJ3208】 (DP)
Apocalypse Someday Description The number 666 is considered to be the occult “number of the beast” a ...
- 【HDU3440】House Man (差分约束)
题目: Description In Fuzhou, there is a crazy super man. He can’t fly, but he could jump from housetop ...
- Light OJ 1031 - Easy Game(区间DP)
题目大意: 给你一个n,代表n个数字,现在有两个选手,选手A,B轮流有有一次机会,每个选手一次可以得到一个或者多个数字,从左侧或者右侧,但是不能同时从两边取数字,当所有的数字被取完,那么游戏结束.然后 ...
- 开发备必:WEB前端开发规范文档
为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必 须按本文档规范进行前台页面开发. 本文档如有不对或者不合适的地 ...
- app.config应该放哪?
一:做了一个简单的三层构架的小例子,在主项目里调用工具类的方法实现在数据库里添加一条信息.先看下错误的提示信息是什么样的,如下图一,图二是调用工具类.直接在工具类里写上连接字符串就没问题,如果写到ap ...
- Android项目开发全程(二)--Afinal用法简单介绍
本篇博文接上篇的<Android项目开发全程(一)--创建工程>,主要介绍一下在本项目中用到的一个很重要的框架-Afinal,由于本系列博文重点是项目开发全程,所以在这里就先介绍一下本项目 ...
- poj 1704 Georgia and Bob(阶梯博弈)
Georgia and Bob Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8656 Accepted: 2751 D ...
- 第十七章、程序管理与 SELinux 初探
---恢复内容开始--- 什么是程序 (process) 在 Linux 底下所有的命令与你能够进行的动作都与权限有关, 而系统依据UID/GID以及文件的属性相关性判定你的权限!在 Linux 系统 ...
- 基于TCP的socket通信过程及例子
Socket也叫套接字,用来实现网络通讯,通过调用系统提供的API,可以和远程的机子传输数据.Socket有很多种协议,而这篇文章主要讨论TCP部分的内容,也就是说后面说的内容主要是指TCP Sock ...
- Linux 下DNS服务器主从配置
注意: 关闭防火墙 关闭selinux 在客户端配置vim /etc/resolv.conf的DNS 安装 yum install -y bind bind-chroot bind-utils ...