vim+\LaTeX+TtH+Python+MetaWeblog API寫博攻略

來源:互聯網
上載者:User

vim+\LaTeX+TtH+Python+MetaWeblog API寫博攻略

vim+LATEX+TtH+Python+MetaWeblog API寫博攻略mdyang  Chapter 1
準備工作

首先需要安裝LATEX環境,本文使用Ubuntu + tex live,編輯器則使用vim。如果熟悉其他編輯器如emacs也可。

 

有了LATEX環境後,即可使用latex、pdflatex等命令編譯LATEX原始碼,產生對應的DVI或PDF檔案。由於我們要寫博文,需要HTML格式的文檔,因此需要將LATEX轉換為HTML的工具。在此推薦TtH,一個將LATEX編譯為HTML的工具。

 
1.1  TtH: TEXto HTML的轉換工具 

TtH最簡單的用法為:

 
tth input.tex
 

執行該命令將會將input.tex編譯為input.html,注意TtH忽略CJK宏包,因此中文LATEX文檔裡的\usepackage{CJK(utf8)}、\begin{CJK}和\end{CJK}等可以省略。雖然忽略了CJK宏包,但TtH仍然可以正確處理中文,由於TtH產生的HTML檔案是UTF-8編碼的,所以只需保證輸入的LATEX原始碼也是UTF-8編碼的即可。當使用瀏覽器開啟產生的.html檔案時可能會發現中文都是亂碼,這是由於TtH產生的HTML檔案中缺少<head>段中的一個<meta>標籤:

 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
 

這一行告訴瀏覽器頁面編碼是UTF-8,缺少這一行瀏覽器可能會選擇錯誤的編碼集顯示頁面,例如在中文版Windows系統下可能使用GBK編碼顯示該頁面,造成中文亂碼。如果在瀏覽器的查看設定裡將頁面編碼手動設定為UTF-8,就會發現裡面的中文都能夠正確顯示。所以這隻是一個小問題,只需在HTML檔案中插入上述<meta>標籤即可。

  1.2  pyblog: MetaWeblog API的Python實現 

MetaWeblog是RFC的一套規範,MetaWeblog API是一套基於XML-RPC實現的遠程調用API,可以使用這些API進行部落格操作,包括髮布日誌、修改日誌、分類管理等。主流的程式設計語言都有XML-RPC的程式庫。在Python中這個庫是xmlrpclib。不過在自己實現基於Python的MetaWeblog API之前本著避免重複發明車輪的原則去Google Code上搜尋了一下,果然發現了一個MetaWeblog API的Python庫:pyblog。這個庫封裝了MetaWeblog API的一些常用函數,並且還支援Wordpress API(MetaWeblog API的超集)。美中不足的是這個庫似乎有一些錯誤,在我的Windows Server 2008 R2 + Python 2.7.2 AMD64上報錯。經過研究發現第91行的代碼有錯誤:

 
r = getattr(self.server, methodname)(args)
 

應該是:

 
r = getattr(self.server, methodname)(*args)
 

另外一個對我個人來說美中不足的地方是pyblog庫沒有提供對HTTPProxy 伺服器的支援,所以我參照這篇日誌中介紹的為xmlrpc添加HTTPProxy 伺服器支援的方法,對pyblog的代碼進行了一點改進。需要注意的是這篇日誌中實現的UrllibTransport類的建構函式裡缺了這麼一句:

 
self._use_datetime = True
 

我加了這麼一句是因為原日誌中UrllibTransport類的代碼在應用到pyblog中時報了一個錯,說UrllibTransport類沒有_use_datetime這個屬性。我根據命名猜測這個屬性應該是個布爾型,所以添加了上面那一句。添加以後代碼工作正確。

 

至此兩個最重要的問題已經解決了:

 
  • 將LATEX代碼轉換為HTML(使用TtH)

     
  • 通過MetaWeblog API將HTML代碼的日誌發布到部落格(使用pyblog) 
 

接下來要做的是將這兩個步驟串連起來。考慮pyblog是用Python寫的,因此這裡使用Python作為膠水語言串連這兩步。

  Chapter 2
pyposter: 串連LATEX與MetaWeblog API的Python指令碼 
2.1  設計目標 

相比於WYSIWYG編輯器,使用LATEX寫博最大的不便在於無法做到所見即所得 (WYSIWYG)。對於寫好的博文,如果想要檢查完稿,需要進行編譯,並使用瀏覽器查看才行。所以使用LaTeX進行博文撰寫主要分為以下幾個階段:

 
  1. 編寫LATEX源碼

     
  2. 編譯LATEX源碼為HTML並在瀏覽器中預覽,如無問題進入下一步,否則返回1.修改 
  3. 將寫好的博文發送至部落格 
 

基於以上考慮,我為pyposter設計了兩個功能:build和post。其中build將LATEX源碼編譯為HTML,並啟動一個HTTP伺服器方便預覽,post使用MetaWeblog API將HTML源碼發布至部落格。下面分兩個小節分別講述功能細節。

 
2.2  build: LATEX源碼編譯、博文預覽 

pyposter是一個Python指令碼,其檔案名稱就叫pyposter。該指令碼具備build和post兩項功能。本節介紹build功能。

 

對於LATEX源碼編譯,只需調用TtH即可。Python中可以通過os.system()執行命令。

 

編譯完畢後需要預覽,首先需要在TtH產生的HTML中加入那個缺失的<meta>標籤,聲明檔案的編碼,這樣無需手動修改瀏覽器的顯示編碼頁面就可以正常顯示。這可以通過簡單的文本處理實現,可參見pyposter中的build()實現。

 

至於預覽,Python內建了一個簡單的HTTP伺服器SimpleHTTPServer,可以通過如下命令啟動:

 
python -m SimpleHTTPServer
 

啟動後的HTTP伺服器在8000連接埠偵聽(也可以設定為其他連接埠),HTTP地址的根目錄對應執行該命令的目前的目錄,如果目前的目錄下有index.html則預設首頁為該檔案,否則會顯示檔案清單。

 

編譯、預覽都搞定了以後,就需要對pyposter進行一些處理,使其在系統的任意位置都可以使用。通過以下三個設定,可以在任意位置執行pyposter Python指令碼:

 
  • 在pyposter的首行添加#!/usr/bin/python(告訴系統該檔案由Python執行)

     
  • 為檔案pyposter添加執行許可權(chmod +x pyposter) 
  • 將pyposter所在的路徑加入環境變數$PATH 
 

設定完畢後,可使用以下命令編譯、預覽使用LATEX編寫的博文:

 
pyposter build
 

以上命令使用TtH編譯目前的目錄下的main.tex,產生main.html,漸進式掃描main.html,為其添加如下編碼資訊:

 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
 

經過修改的HTML代碼被輸出至index.html,然後一個HTTP伺服器在目前的目錄下啟動,在瀏覽器中訪問http://HOST:8000即可預覽(注意:將HOST替換為具體的主機名稱或IP)。預覽完畢後按CTRL+C即可結束pyposter build進程。如果需要修改則返回vim進行修改,修改完畢後再編譯、預覽,如果文章已完成則可以進入下一步。

  2.3  post: 發布博文 

發布博文需要解決的一個小問題是調用MetaWeblog API的new_post方法時需要單獨指定博文標題。因此需要HTML檔案中提取文章標題。只需將<title>標籤中的文字提取出來即可,簡單的文本處理,在此不再詳述,可參見pyposter的post()函數。

 

發佈動作的實現則簡單得多,直接調用pyblog中封裝好的MetaWeblog API即可。我對pyblog的代碼進行了一些小修改,使其能夠使用HTTPProxy 伺服器。

 

執行以下命令可以將目前的目錄下的index.html發布為博文:

 
pyposter post
  Chapter 3
小結 

我已經把pyposter放到Google Code上:pyposter at Google Code。通過修改設定檔conf.py可使pyposter應用於其他部落格。

 

pyposter現在已經可以做到:

 
  • 一條命令編譯LATEX源碼並預覽HTML(通過pyposter build)

     
  • 一條命令發布HTML博文至部落格(通過pyposter post) 
 

pyposter已經具有了基本的功能。但仍然有很多功能需要完善:

 
  • 雖然已經可以正確擷取所有類別(通過pyblog的MetaWeblog.get_categories()),但仍然無法為博文添加類別標籤

     
  • 無法管理類別標籤(添加、刪除類別標籤) 
  • 暫時不支援設定博文的entryName 
  • 未考慮博文包含圖片時的情況 
  • 暫時不支援編輯博文(更改發行博文的內容) 
 

這些都是留待以後完善的功能。並且限於目前的應用情景,pyposter還只能用於部落格園的MetaWeblog API,其他的部落格系統暫時還沒有進行驗證。除MetaWeblog API外,pyblog中還實現了Wordpress API,其功能也有待驗證。

 

歡迎有興趣試用的各位朋友指正。

 

File translated from
TEX
by
TTH,
version 4.01.
On 15 May 2012, 09:32.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.