爲WLW開發Latex公式插件

WLW是寫博客的利器,支持離線、格式排版等,並且擁有衆多的插件。博客園推薦了代碼插入插件,可是沒有提供WLW的公式編譯插件。目前個人通常作法是:先在Word下使用MathType編輯好公式,而後將公式複製到WLW的本文中,總感受有點麻煩。html

簡單學習了WLW插件的開發,決定本身開發一個WLW代碼插入插件。比較簡單,按照如下步驟,你們能夠開發屬於本身的公式插入插件。編程

首先,開發公式插入插件涉及兩方面內容。一方面是公式的編輯,通常採用Latex數學排版,爲了解析LaTex函數,咱們須要Latex解析連接庫,而Google Chart API提供了Latex的在線接口以下:http://chart.apis.google.com/chart?cht=tx&chl={latex},其中{latex}就是要生成的代碼,這裏使用Google API(這樣開發的插件使用中就須要聯網了)。另外一方面是WLW中插件的開發,介紹以下:api

目前爲止,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的區別以下:ide

ContentSource:若是你須要編寫的插件將要在內容中插入一段簡單的,插入以後再也不修改(所謂「單向插入」)的內容片段,例如一個超連接,或是自定義的一段版權信息等,那麼應該選擇該類型的基類。Windows Live Writer中自帶的「Insert Link...」就屬於這類插件。
SmartContentSource:若是你須要編寫的插件將在內容中插入一段較爲複雜的,插入以後還可能要修改(所謂「雙向交互」)的內容片杜阿,例如一張圖片、一幅地圖等,那麼則應該選擇這個類型的基類。Windows Live Writer中自帶的「Insert Picture...」就屬於這類插件。函數

可見,開發公式插件時選擇ContentSource就能夠了。工具

而後,編程實現插件的基本功能。學習

1.使用Visual Studio 2010新建C# Windows窗體應用程序。網站

2.設計插件的界面,界面以下:ui

image

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的插件管理器中看到。image

第三個參數PublisherUrl爲發佈者的網站地址。

第四個參數ImagePath爲插件的圖標文件路徑,下載或本身製做一個好看的png圖片(png格式透明,比較好看),添加到項目中,修改圖片的」生成操做」爲「嵌入的資源」便可。

image

第五個參數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插件能夠下載

實例:

相關文章
相關標籤/搜索