在應用中的數學公式是不能直接以文本顯示和輸入的,包括在一些學習類網站上看到的公式,他們都是以gif圖片的形式展示出來的。而怎么樣生成各種各樣的gif圖片形式的數學公式呢,此處未作深入研究,我所知道的是
輸入一些具有一定的規則的latex文本,然后再通過圖片生成工具去解析latex字串並生成一個對應的gif公式文件。
本次Demo用到的轉換服務的網站就是 http://www.codecogs.com/latex/about.php, 如果你膠轉換圖片的源代碼(C++),那你就可以在本地完成這一工作了。
可以通過這個網站上提供的公式編輯器進行公式編輯獲取到gif公式圖片, 也可以通過http請求的方式去獲取gif圖片.
1、網站上的公式編輯 地址 http://latex.codecogs.com/eqneditor/editor-api.php, 就像這樣
左邊框框里的是latex文本, 右邊會同時生成的gif圖片,這個編輯器能讓你很快的知道公式對應的latex文本寫法,比較好用啊。
也可以去latex公式庫里查找,根據各個字符的latex文本再拼接出來,這里給出一個鏈接,http://www.mohu.org/info/symbols/symbols.htm,在里面基本上可以找到你想要的公式的latex寫法。
2、現在來開始我們的demo, 讓android 客戶端從服務器上取gif圖片。
公式圖片轉換的請求很簡單, 只要在http://latex.codecogs.com/gif.latex?后面跟上latex文本就可以了。比如 http://latex.codecogs.com/gif.latex?\tfrac{a} {ab}就能得到上述a/ab的圖片了
在寫url的時候一定要注意,RFC3986文檔規定,Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符。因此url不允許\{}空格等字符出現,只要出現肯定報錯,而在網頁里
可以出現這些字符,那是因為瀏覽器自動將它們進行了編碼,相信你們之前也應該注意到了瀏覽器地址欄里出現一些類似於%20%7d這樣的符號吧,那就是編碼后的16進制碼。所以上述url必須要進行本地編碼了。
demo的關鍵代碼如下,像xml, activity那些平常的代碼就不貼出來了,這個Demo也不復雜。
private final String host = "http://latex.codecogs.com/gif.latex?";
//此處進行16進制編碼,這里只做了\ {}這4個符號編碼 private String encode(String url){ url = url.replace("\\", "%5c").replace(" ", "%20") .replace("{", "%7b").replace("}", "%7d"); return url; }
// 加載圖片 //etLatex是輸入latex文本的edittext String latexstr = etLatex.getText().toString().trim(); String url = host + latexstr; //http請求用的是xutils3, ivMath是顯示公式圖片的imageview x.image().bind(ivMath, encode(url), options, new RequestDataCallback<Drawable>() { @Override protected void success(Drawable drawable) { LogUtil.e("下載成功"); } @Override protected void fail() { LogUtil.e("下載出錯," ); } @Override protected void finish() { LogUtil.e("下載完成"); } @Override public void onCancelled(CancelledException arg0) { LogUtil.e("下載取消"); } });
最后來看看效果