WLW是写博客的利器,支持离线、格式排版等,而且拥有众多的插件。博客园推荐了代码插入插件,但是没有提供WLW的公式编译插件。目前我的一般做法是:先在Word下使用MathType编辑好公式,然后将公式复制到WLW的本文中,总感觉有点麻烦。

简单学习了WLW插件的开发,决定自己开发一个WLW代码插入插件。比较简单,按照以下步骤,大家可以开发属于自己的公式插入插件。

首先,开发公式插入插件涉及两方面内容。一方面是公式的编辑,一般采用Latex数学排版,为了解析LaTex函数,我们需要Latex解析链接库,而Google Chart API提供了Latex的在线接口如下:http://chart.apis.google.com/chart?cht=tx&chl={latex},其中{latex}就是要生成的代码,这里使用Google API(这样开发的插件使用中就需要联网了)。另一方面是WLW中插件的开发,介绍如下:

目前为止,Windows Live Writer的扩展功能还不是很强,它提供给我们如下两个方面对其扩展的可能:

a.应用程序级别的API:这部分API让我们能够在外部程序中启动并调用到Windows Live Writer的功能,以COM组件的形式提供。如果你要编写一个Firefox工具条上的小按钮,例如 “Blog It!” 之类,那么显然应该使用这类API。
b.文章内容插件:这部分API允许开发者对正在书写的文章内容进行修饰,实现与Windows Live Writer中自带的“Insert Link...”、“Insert Picture...”等类似的功能。若要编写文章内容插件,则需要从ContentSource或SmartContentSource两个基类中选择其一并继承自它。这两个基类提供了编写文章内容插件所需要的基础设施。ContentSource和SmartContentSource的区别如下:

ContentSource:如果你需要编写的插件将要在内容中插入一段简单的,插入之后不再修改(所谓“单向插入”)的内容片断,例如一个超链接,或是自定义的一段版权信息等,那么应该选择该类型的基类。Windows Live Writer中自带的“Insert Link...”就属于这类插件。
SmartContentSource:如果你需要编写的插件将在内容中插入一段较为复杂的,插入之后还可能要修改(所谓“双向交互”)的内容片杜阿,例如一张图片、一幅地图等,那么则应该选择这个类型的基类。Windows Live Writer中自带的“Insert Picture...”就属于这类插件。

可见,开发公式插件时选择ContentSource就可以了。

然后,编程实现插件的基本功能。

1.使用Visual Studio 2010新建C# Windows窗体应用程序。

2.设计插件的界面,界面如下:

3.实现各按键的功能,包括粘贴、预览、插入、取消,如下:

public partial class MainForm : Form
{
private static readonly string PicUrlPattern = @"http://chart.apis.google.com/chart?cht=tx&chl={0}";
private static readonly string ImgTag = "<img src=\"{0}\" alt=\"{1}\" />";
public MainForm()
{
InitializeComponent();
} private void 粘贴_Click(object sender, EventArgs e)
{
string content = Clipboard.GetText();
textBox_tex.Text = content;
} private void 预览_Click(object sender, EventArgs e)
{
if (check())
{
pictureBox_Preview.ImageLocation = ImgUrl;
}
} private void 插入_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
} private void 取消_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
} public string ImgUrl
{
get { return String.Format(PicUrlPattern, HttpUtility.UrlEncode(textBox_tex.Text)); }
} public string ImgInTag
{
get { return String.Format(ImgTag, ImgUrl, textBox_tex.Text); }
} private bool check()
{
if (textBox_tex.Text.Trim() == "")
{
MessageBox.Show(this, "请填写latex");
return false;
}
return true;
}
}

注意:HttpUtility在System.Web库中,需要添加引用System.Web.dll,并在文件头部添加using System.Web。如果没有找到System.Web.dll,把项目属性中的目标框架修改为.NET Framework 2.0即可,推荐使用2.0,发现.net 4.0开发的插件和我的WLW版本不兼容

调试程序,直至窗口可以正常运行。

创建接口类,将上述窗口转化为WLW插件。

a.添加对WindowsLive.Writer.Api的引用(WLW的安装目录下WindowsLive.Writer.Api.dll),并添加using WindowsLive.Writer.Api;。

b.将项目属性中输出类型修改为类库,删除Program.cs文件。

c.新建一个类,继承自ContentSource,并覆盖相应方法。

[WriterPlugin("adf1e416-b2e9-44e1-8612-c405bbcf1359",
"插入Latex",
PublisherUrl = "http://www.cnblogs.com/houkai/",
ImagePath = "tex.png",
Description = "插入公式")
]
[InsertableContentSource("插入公式")]
public class LiveWriterLatexPlugin : ContentSource
{
public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content)
{
using (MainForm form = new MainForm())
{
DialogResult result = form.ShowDialog();
content = form.ImgInTag;
return result;
}
}
}

注意我们为该类添加了WriterPlugin属性:

第一个参数为一个Guid,可以通过Guid生成器得到即可,如http://www.guidgenerator.com/online-guid-generator.aspx,起标识的作用。

第二个参数为该插件的名称,将在Windows Live Writer的插件管理器中看到。

第三个参数PublisherUrl为发布者的网站地址。

第四个参数ImagePath为插件的图标文件路径,下载或自己制作一个好看的png图片(png格式透明,比较好看),添加到项目中,修改图片的”生成操作”为“嵌入的资源”即可。

第五个参数Description为插件的一小段描述介绍,表示插入选项中该插件的详细信息。

该类还应用了InsertableContentSource属性,此属性本用于定义插件在WLW的“Insert”菜单和“Insert”快捷面板的名称,但新版的WLW已经去除了插入菜单与侧边栏,因此应用此属性只是为了保持向前兼容。

注意CreateContent()方法的第二个参数为ref string newContent,这个ref string就表示由该插件生成的HTML代码。

最后编译Release生成DLL文件,将DLL文件放到WLW安装目录的Plugins下,重启WLW即可。

我的Latex公式插件可下载。有很多博客中介绍了WLW插件的开发,大家有兴趣可以学习插件开发的详细内容。剩下的内容就是Latex下如何进行数学公式的编辑了,下节再介绍吧。

维护版本(由于google chart api地址修改,原插件已失效)

最新的Latex插件可以下载

实例:

为WLW开发Latex公式插件的更多相关文章

  1. LaTex公式语法教程及手册(附emlogpro公式显示插件katex说明)

    目录 第一列 第二列 第三列 效果 求和(使用\sum标签) 文本效果 本插件简介 积分(使用\int标签) 文本大小 LaTex是什么 空格 特殊符号 LaTex公式使用教程及手册 定界符 LaTe ...

  2. TexFormula2Word: 将Latex公式转换为MathML的Chrome扩展

    前言 因为学校要求对毕业论文进行格式检查,而格式检查又必须上传Word文件,这就导致只能使用Word写毕业论文.但Word公式输入实在是太难用,加之我在小论文中已经用Latex写过大部分公式,所以就希 ...

  3. 在word 2013中输入latex公式

    注意:版权所有,转载请注明出处 向word输入LaTeX公式,插件有很多,前面在使用的是一个叫做Aurora的插件,结果不是免费的,用了一段时间就要收费是,所以就不用了,从网上找到别人的介绍,可以使用 ...

  4. 百度编辑器UEditor与UEditor 公式插件完整Demo

    1.下载UEditor(我的是.net项目) 2.下载UEditor公式插件 3.新建解决方案和项目 4.在浏览器中预览index.html页面 结果: 5.index.html源码 <!DOC ...

  5. 我利用网上特效开发的Jquery插件

    我利用网上特效开发的Jquery插件 代码如下 (function($){ $.fn.Dialogx = function(options) { var defaults={ Width:" ...

  6. 使用 WordPress 插件模板开发高质量插件

    WordPress 插件样板是标准化的,有组织的,面向对象的基础,用于构建高品质的 WordPress 插件.样板遵循编码标准和文件标准,所以你不必自己学习这些,根据注释编写代码即可. 官方网站    ...

  7. Sublime Text 3前端开发常用优秀插件介绍

    . 首页 博客园 联系我 前言:关于Sublime Text 3. Package Control插件管理. Package Control使用方法/安装Emmet插件. Emmet插件. JsFor ...

  8. 用GO语言开发editplus编辑器插件(附源码)

    我要开发的插件功能极为简单,就是对用户选中的内容进行base64编码或解密工作. 其中所涉及的技术部分主要是GO语言程序开发和editplus插件配置的部分,首先我们来看一下GO语言代码的写法,如下: ...

  9. 如何开发ecshop支付插件

    如何开发ecshop支付插件 ecshop模板网 / 2014-06-03 目标一:搞懂ecshop的支付流程 选完商品,进入购物车页面,点击“结算中心”,页面跳转到flow.php?step=che ...

随机推荐

  1. web全栈开发之网站开发二(弹出式登录注册框前端实现-类腾讯)

    这次给大家分享的是目前很多网站中流行的弹出式登录框,如下面的腾讯网登录界面,采用弹出式登录的好处是大大提升了网站的用户体验和交互性,用户不用重新跳转到指定的页面就能登录,非常方便 先来个演示地址 要实 ...

  2. Python-Jenkins API使用 —— 在后端代码中操控Jenkins

    最近在工作中需要用到在后台代码中触发Jenkins任务的构建,于是想到Jenkins是否有一些已经封装好的API类库提供,用于处理跟Jenkins相关的操作.下面就简单介绍下我的发现. Linux C ...

  3. SQL必备知识点

    经典SQL语句大全 基础 1.说明:创建数据库.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 device.说明:创建新表crea ...

  4. 了不起的 nodejs-TwitterWeb 案例 bug 解决

    了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...

  5. JavaScript实现常用的排序算法

    ▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...

  6. 为IEnumerable<T>添加RemoveAll<IEnumerable<T>>扩展方法--高性能篇

    最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerab ...

  7. zookeeper源码分析之二客户端启动

    ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...

  8. 【NLP】Python NLTK获取文本语料和词汇资源

    Python NLTK 获取文本语料和词汇资源 作者:白宁超 2016年11月7日13:15:24 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集 ...

  9. android计算每个目录剩余空间丶总空间以及SD卡剩余空间

    ublic class MemorySpaceCheck { /** * 计算剩余空间 * @param path * @return */ public static String getAvail ...

  10. 服务治理要先于SOA

      讲在前面的话: 若企业缺乏对服务变更的控制和规则,那么一个服务在经过几个项目之后,就很有可能被随意更改成多个版本,将来变成什么样更是无法预测.久而久之,降低了服务重用的可能性,提高了服务利用的成本 ...