2012年10月13日 星期六

latex也可以追踪修訂--latexdiff+git

相信愛用latex的朋友們,對latex想必是又愛又恨吧,愛的是他強大的排版功能和完善的數學方程式,而恨的則是latex沒有內建追踪修訂功能,無法和其他共同作者編寫同一份文件的時候,追踪彼此所修改的內容,甚至是在revise論文的時候,也不容易追踪自己所修的內容。

的確,latex本身沒有內建追踪修訂,不過大家也不用因此而氣餒,方法總是人想出來的,沒有原生的解決方法,還是有外掛的方式可以達成追踪修訂的目的!

沒錯,latexdiff就是為了此目的而生的script,該script使用perl語言所寫成,在灌好MacTek或是MikTex之後,就內建的一個小程式。

使用的方法很簡單,只要輸入以下指令:

latexdiff old.tex new.tex > diff.tex

其中,old.tex是舊版本的檔案,new.tex是新版本的檔案,而diff.tex則是兩個檔案的差異,也就是追踪修訂的原始檔。接著,我們只要編譯diff.tex,就能得到diff.pdf,該pdf檔就會包含新舊版本的差異啦。

如下圖:

 

螢幕快照 2012 10 13 下午8 04 43

紅色刪除線為前一版本中被刪除的內容,藍色下底線的文字則是新版本中加入的內容,一目了然,跟word的追踪修訂一樣清楚,而且就算是演算法也能呈現前後版本的不同,如下圖:

螢幕快照 2012 10 13 下午8 08 30

此外,要注意的是,文章中的圖檔和所使用到的style檔,都必須和diff.tex放在同一個資料夾中,才能正常編譯成功。因為diff.tex中,只有包含old.tex和new.tex之間文字內容的差異,圖案是不會包含進來的,除非改了圖檔的檔名。

參考文章:

http://www.peteryu.ca/tutorials/publishing/latexdiff

 

Latexdiff+Git

原則上,單單使用latexdiff就已經滿足大部份人的需求了。不過,latexdiff有一個缺點,就是他只能辨識一個檔案的差異。如果,大家跟我一樣,習慣將不同章節寫在不同的檔案中,並且使用\include,將章節引入進主要的tex檔。那文件的變動都在其他檔案中,而主文件中跟本不會有任何異動,這樣latexdiff跟本就無法檢查出新舊內容的差異。這可怎麼辦呢?總不能每個章節產生一個diff檔,然後再自行整合所有的diff檔,聽起來就是一個大工程,勞心又耗時。

沒錯,我的心聲,Google大神都聽進去了,他也知道這是一件麻煩事,所以讓我找到了Yngve's blog,這位物理博士生,遇到了和我一樣的困擾,而且他還用git來維護他的論文,所以,他自己寫了一個shell script (稱作latexbatchdiff),同時可以偵測多個檔案的變動,還可以利用git,在不同的論文版本中,追踪論文的不同點。而且,他還分享了他寫的script,無私地讓大家使用,實在是太佛心來啦。大家可以到他所建立的專案中下載 :

http://gitorious.org/latexbatchdiff/

當然也可以用git直接下載回來用:

git clone git://gitorious.org/latexbatchdiff/latexbatchdiff.git

 下載回來之後,會在latexbatchdiff資料夾下看到兩個.sh檔,其中,install.sh是安裝檔,執行install.sh之後,該script會詢問你一些問題,像是使用何種版本控制軟體,我是用git,所以,回答git,接著會問你:

Want to create new command for difftool.latex This will overwrite the existing command, is this OK? (y/n)

這裡我回答y,因為他只會覆寫git的設定,不會影響整個系統,為什麼我這麼確定呢?因為我也很擔心程式有沒有漏洞在裡面,所以兩個程式我都trace過了,不用擔心,可以安心使用。而且這個install.sh只是根據你系統的設定,將他寫的latexbatchdiff.sh複製到~/.local/bin/,所以並沒有任何問題。

執行完之後,還必須自行編輯~/.profile,加入

export PATH=/Users/hdj/.local/bin:$PATH

安裝流程如下圖:

螢幕快照 2012 10 14 上午12 30 02 2

完成以上設定之後,就大功告成啦。

可以使用以下指令執行:

latexdiff-git ebc3e0 master.tex parts/introduction.tex parts/results.tex

其中,ebc3e0是git中版本的編號,master.tex是主要的tex文件,而後面兩個則是各章節的tex檔,在latexbatchdiff中,如果要檢查每一個章節,就必須列出所有的章節檔名。如果只有一個文件的話,就不用填入後面的章節檔。此外,如果沒有填入版本編號,latexdiff-git會自行和最後一個commit的版本比較。latexdiff-git執行完之後,會自動開啟一個master-diff.pdf,這個檔案就是修訂追踪的檔案啦。

參考資料:

.gitignore http://eothred.wordpress.com/2010/11/07/latexdiff-and-git/

 

Git簡易教學

同場加映一些git的簡易教學,以免過一陣子,連自己都忘了怎麼用><

首先是在論文的資料夾中建立倉儲:

git init

接著發佈一個init版本 

git add .

git commit -a -m "Init"

 

假設我們修改了一些檔案,然後又發佈了一個新的版本,我們可以用git log看看我們各版本的資訊,如下圖:

Git

在這個例子中,假設我要追踪a3c110這個版本和目前版本的差異,我可以下:

latexdiff-git a3c110 master.tex

如果在刪除檔案時,有東西不小心誤刪了,我們可以用以下指令回到最近的版本:

git reset --hard HEAD

 

2012年10月4日 星期四

製作灰階版的eps圖

大概一年多前,為了滿足某篇conference的要求,費了一番心血才將論文輸出成灰階,
當時,我只是將pdf另存成灰階的版本,用這偷吃步的方法,暫時混了過去,有興趣的朋友可以參考使用預覽程式將PDF轉成灰階文件
果然,沒想到最近又有review要求,要把所有圖片都轉成灰階的,之前那招可就不管用啦,
因為這次是將彩色的eps圖轉灰階的eps圖,不像之前只要求pdf檔。

這可怎麼辦呢?不用擔心,辦法是人想出來了,總是有人也遇過同樣的問題吧~~
沒錯,果然有好心人寫好了程式,底下我提供兩種方式給大家參考。

第一種方法 pscol

我們可以使用pscol這個用perl寫的小程式將原本彩色的eps轉成灰階的版本。
首先要到以下網址找到下載連結或是點這裡直接下載:



如果點開來,直接開啟成網頁的話,請自行另存檔案,檔名為pscol。
接著將pscol和要轉的檔案,放置在同一個資料夾。
假設要轉的彩色eps檔案為input.eps,請輸入以下指令:

$ eps2eps input.eps output.eps
$ pscol -0gray output.eps gray.eps

其中,第一步先用eps2eps將input.eps修圖,eps2eps主要的功用是將留白的部份切除,我發現有些圖檔,如果不先用eps2eps先修過一遍的話,pscol是無法正常將eps轉成灰階的。
接著使用pscol將中繼檔output.eps轉成灰階圖,gray.eps即為灰階的eps檔。

原則上,pscol可以在unix-like的作業系統中使用,windows的話,我自己就沒有試用過,因為他是用perl寫的,如果沒有灌perl的話,可能就不能使用了。


參考網址:


第二種方法 轉成pdf

pscol有二個缺點,第一個是因為用eps2eps將留白切除時,很有可能會切掉不是空白的部份,造成圖檔的某個部份不見了,這個問題還滿嚴重,不過也不是每一張圖都會出現這種情況。第二個是有些圖轉成灰階時,圖像完全失真,整個黑黑的一片,無法辨認出原始圖的樣子,如果有遇到以上兩種情況,只能用以下介紹的第二種方法轉。

其實,用第二種方法最為保險,因為他是先將eps輸出成pdf,再將pdf轉為灰階,接著再把pdf轉回eps,基本上,不需要另裝軟體,只需原本Mac電腦中有latex即可,而且還須要參考我之前寫過的文章-- 使用預覽程式將PDF轉成灰階文件。。
步驟如下:

1 開啟eps檔,自動轉成pdf。
2 將pdf另存gray tone的pdf-- g.pdf
3 將g.pdf轉成ps
     $ pdf2ps g.pdf g.ps
4 將g.ps轉成eps
     $ ps2eps g.ps


輸出的g.eps就是灰階化後的檔案。
這個方法我只在Mac上使用過,其他作業系統或許也有相對應的解法。


以上兩種eps轉灰階的方法,供大家參考,需要用到的時候,還真希望能有一鍵轉檔的程式。



2012年9月14日 星期五

OS X 選單列crash的問題

自從我的Air升上Mountain Lion,OSX 選單列就一直Crash,滑鼠滑過去,彩球狂轉,

有時候還會錯亂,害我看錯時間,讓我有幾個早上遟到的不明不白。

我問了好幾天google,才找到解決方法,原來是systemuiserver的問題,

要解決這個問題,其實不難,只要下以下指令,就能重開systemuiserver:

 

killall -KILL SystemUIServer

 

不過,就算重開systemuiserver過不久還是會有可能當掉,

所以,可以透過刪除~/Library/Preferences/com.apple.systemuiserver.plist

檔案可以在以下資料夾看到:

OS X crash

如果找不到資料庫(Library),可以在finder點擊"前往",然後選擇"前往資料夾",如下圖:

 

螢幕快照 2012 09 12 下午12 13 03

接著, 輸入~/Library,如下圖:

螢幕快照 2012 09 12 下午12 13 19

按下"前往"之後,就可以看到資料庫,接下來的步驟就如之前說的一樣啦。

 

參考網址:

https://discussions.apple.com/thread/3882591?start=0&tstart=0

http://forums.macrumors.com/showthread.php?t=1435028

2012年9月10日 星期一

Lion上透過螢幕共享切換遠端的space

以往,我在snow leopard用螢幕共享連線的時候,都會用選單列上的space選項切space,如下圖紅色箭頭所示:

Switch space sl

但是,自從升上了Lion後,space的選項就無法顯示在選單列上,所以每當我用螢幕共享連到Lion的時候,就沒辦法切換Space,

不能切換space,那很多事情都不能做了,所以,這個問題一直困擾著我,後來我終於找個方法切換space。

其實很簡單,就是找到Dock中的Mission Control,點擊Mission Control的icon,如下圖:

Switch space

如此,切換space的畫面就跑出來啦~~

如果Dock上沒有Mission Control的話,請到應用程式中,找到Mission Control,然後把它移到Dock上。

2012年9月3日 星期一

DialNow 網路電話撥法國手機每分鐘只要0.001歐元

最近,閃光人在法國深造,但是宿舍目前還沒提供網路,對外的聯絡的管道,只有從台灣帶過去的手機,因此,所有的大小事只能靠手機溝通,電話費就好像水龍頭開關沒關好,淅瀝花啦地一下就用掉大筆費用。因此,小弟不得不去找尋便宜地通話方案,花了二三天的時間,總算是不負眾望,找到了一家相當便宜的管道,讓我打法國的手機,連續打個一二個小時也不會心疼。
不知道大家有沒有打電話到法國的經驗,基本上,在我個人的印象中,打國際電話必需花上大筆的鈔票,而且還要一堆複雜的轉接手續,有時還可能要跟阿斗仔講要撥的當地號碼為何。 當然,這是我小時候還在用撥接的時代,如今打國際電話已經簡單很多,只要電話直撥當地號碼加國碼,就能撥出去,只是費用還是滿貴的,無法讓在遠方的親友暢所欲言,以表無盡的思念。 如今,隨著科技的進步,各家電信業者提供不少優惠的方案,如中華電信的009和019,費率可以參考中華電信,009每6秒1.6NTD,019每分鐘10.4NTD,感覺只比國內手機貴一點點,似乎是個不錯的方案。
不過,近年來網路voip盛行,相當多的網路電話業提供優質的通話品質和相對低廉的通話費用,例如頗舉盛名的Skype,記得五年前去加拿大開會的時候,我還是用Skype打去訂房的, 算是相當方便,而且打市話的話,費用也是相當便宜,那打去法國的手機費用要多少呢? 相關的費率可以到Skype官方網站查詢,原則上,打法國手機每分鐘6.7533NTD,還要加上接通費3.907NTD,所以,只要打超過一分鐘的電話,就會比中華電信的019還要划算。小弟二話不説,400元就花下去,反正Skype是家大公司,用省的點數還可以留著打其他國家,而且手機上還有Skype的app,隨時想打法國就打。 不過,換來的結果是,400元最多也只能打58分鐘,按照我個人的使用量,一天不到,就用完了,這可怎麼得了,一天400元,一個月就12000元,這樣的通話費用,還是太誇張了,連打三個月,可以燒掉一張去法國的機票。
接著我找到了一位法國留學生的文章,他推薦了幾家voip業者,打法國的費率都比skype還要便宜,還有每個月熱線吃到飽的方案,看起來相當佛心,讓遠距的情侶們可以毫無顧忌地聯繫感情。 我將她推薦的業者列在下方,供大家參考:
ippi
每分鐘0.1254€ (約4.64NTD)
提供包月熱線,每個月24.95€,打法國手機,星期一至五的9am~18pm免費,方案説明可參考ippi官網
vopium 每分鐘0.1€ (約3.7NTD)
nonoh 每分鐘0.06€ (約2.22NTD)
參考來源:
http://8bargain.blogspot.tw/2011/10/skypevoip.html
http://8bargain.blogspot.tw/2011/10/vopium.html
http://8bargain.blogspot.tw/2010/06/voipnonoh.html
就以上的費率來講,nonoh的每分鐘最划算,不過ippi所提供的包月熱線,可以讓我在法國的上班日隨便打,實在是太誘人了,看到這裡我很衝動地去申請了ippi的帳號,信用卡也拿了起來,就在輸入卡號的那個moment,我好奇地查了一下nonoh這家公司,想知道為什麼他可以把價錢壓這麼低,而且甚至可以免費打台灣的市話。
原來,nonoh是由BetaMax所擁的voip業者,BetaMax其實是一家由行銷專才所組成的德國公司,本身並沒有voip技術,不過BetaMax接管了一家瑞士的傳統電話公司--Finarea SA,用很低廉的通話費來吸引不同國家的使用者進來使用voip的服務,就連skype都不得不承認他們開出來的費率相當便宜。
與其説nonoh是voip業者,不如説他是BetaMax底下的一個品牌,BetaMax擁有將近60個不同voip公司,分別在不同的國家用不同的費率推廣,其實骨子裡都是用同一套系統,必須要注意的是,BetaMac旗下的品牌,會不定期修改其費率,像nonoh之前打台灣市話不用錢,但是最近去看,已經變成每分鐘0.025€。看起來有好處也有壞處,好處是,只要能在60個品牌中,找到對自己最有利的通話費用,就可以用接近免費的方法打國際電話,壞處是必須在不同的品牌下,申請不同的帳號,例如Jay這個帳號在nonoh已經申請過了,在easyvoip中,就需要選擇另一個帳號。
BetaMax旗下的品牌可到以下連結找尋:
就在我一個一個點開查看各品牌的費率之後,皇天不負苦心人,總算讓我找到最划算的費率,每分鐘0.001€(約0.037NTD),天啊,比skype便宜了170倍,以後打不到怎麼辦,而且不收接通費用,第一眼看到,我還以為他網頁打錯了,跟之前apple和dell犯的錯一樣。 其實我個人看到這樣的費率,一開始也不是很相信,一度覺得是詐騙集團吧,一直到做了以上這些課功之後,才漸漸相信,這是該公司的策略,或許過幾個月費率就調漲回來,所以好服務不用嗎? 好啦,寫了這麼久,總算進入我們的主題,該品牌就是DialNow -- www.dialnow.com費率可以到這裡查看。 目前我已經用paypal存了10€進去,他會收0.75€的手續費,這樣算起來也差不多是400台幣,剛好是我存到skype的費用,用skype,我只能打58分鐘,用dialnow打法國手機我可以打10000分鐘,這真的是差很大。不過,再次提醒大家,費率還是有可能會變動,打其他的國家也不一定會比較便宜,存錢進去前,最好再次確認,費率是否對自己有利。
2012 09 09 dialnow
或許改天有空再寫一篇dialnow的教學文,或是寫一個簡單的小程式,幫大家找詢各國家最便宜的費率,先不説這麼多了,我要去把我的10000分鐘先用完再説。
參考文章:
http://www.businessweekly.com.tw/webfineprint.php?id=22504
http://itblog-2.osslab.co.cc/index.php?load=read&id=12
http://barlino.blogspot.tw/2006/04/zyxel-ip-phone-voipstuntco_114457691624694124.html
http://markusgoebel.blogspot.tw/2007/09/wtf-is-betamax-voip.html

2012年8月30日 星期四

Textmate 2 成為開源軟體

身為一個Mac使用者,Textmate好像是必備的軟體之一,
不過,一直以來,Textmate高貴的價錢也是其主要門檻之一,
要價39歐元一套的軟體,真的不是普通的貴,而且Mac電腦限定。
所以,以往Mac界有一個笑話: Textmate其實不貴,貴的是你要先買一台Mac電腦。
不過Textmate有一堆好用的bundle是程式開發者所必需的工具,可以加速開發的速度,其實還滿值得購入的。

當然,如果你不想花大錢買Textmate,你現在有另為一個選擇,那就是去下載Textmate 2!!
奇怪,如果Textmate都要39歐了,Textmate 2不是應該要更貴嗎?
不 不 不,Textmate 2現在不用錢!!!
因為Textmate的開發者,這個月很佛心地將Textmate的下一代軟體Textmate 2 釋出,並以開源碼的方式,歡迎大眾下載來修改和試用。
所以,大伙可以安心的去下載Textmate 2來使用,甚至可以將Textmate 2 port到其他的平台。


有興趣開發的朋友,可以到Github下載原始碼
https://github.com/textmate/textmate

當然一般的使用者可以直接下載編輯器執行檔,不用再自己compile,不過檔案不定期更新。
Github 執行檔下載:
https://github.com/textmate/textmate/downloads

個人試用的結果還不錯,可以直接支援中文,不用再像以往一樣,要自行找尋中文字型,還要忍受醜醜的字型。相當推薦大家試用。

2012年8月27日 星期一

Mac上使用Sublime text 2編寫Latex文件

文書編輯器對程式工程師而言,無疑是很重要的吃飯工具,
好的文書編輯器可省下大量coding時間,加速完成工作的時間。
而我個人偏好的編輯器是vim和textmate,
在Server的環境中,Vim無需滑鼠就能發揮強大的效率,相當簡潔又有力。
在個人電腦上,因為我是Mac的使用者,所以Textmate當然是首選編輯器,並且用Textmate撰寫latex文件,也是我購買Mac主要動力之一。

原則上,有以上兩種編輯器,已經可以滿足我coding和撰寫Latex的需求,
不過Textmate有幾個小缺點,就是更新慢,先天上對中文的不支援(另灌字型就可以顯示中文,但還是怪怪的),雖然聽説Textmate 2已經可以正常支援中文並且開放原始碼,
不過,目前還沒看到有人分享心得,有機會再找時間試試看。

有鑑於以上幾個小缺點,我決定試試看另一套軟體--Sublime test 2,
Sublime test是近期相當活躍的軟體,支援Textmate的bundle,直接支援中文輸入,靈活度夠和外掛也多,而且還是跨平台的,可以在Mac、Linux和Windows上運行。
有著這麼多的優點,真的是讓人無法拒絕,一時手癢的我,當然是馬上去下載來試試看啦~~

使用上,沒什麼大問題,不過Sublime text 2原生沒有直接支援latex的編譯,需要另行下載套件latextools,這也是本篇文章誕生的主因,因為安裝latex外掛也是有一點點小撇步的。以下一一為大家說明如何安裝:

Step 1 安裝Sublime text 2

第一步當然是去Sublime text 2官方網站下載軟體:
http://www.sublimetext.com/2
由於我是使用Mac的作業系統,所以我是下載OS X的版本回來安裝。


Step 2 安裝Package control

建議使用Package control來安裝latextools,以方便之後的維護。
要安裝Package control,請先開啟Sublime text 2的console,
開啟方式為  ctrl+`
接著在console中輸入:

import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'

如下圖,輸入完以上指令之後,重啟Sublime text 2,package control就安裝好了。
在console中輸入指令

底下列出一些Package control的參考資料供大家參考:


Package control安裝教學
http://wbond.net/sublime_packages/package_control/installation
http://parseflo.at/post/transfer-textmate-2-to-sublime-text-2/

Package control使用説明:
http://wbond.net/sublime_packages/package_control/usage



Step 3 安裝latextools


接下來,重頭戲來啦,我們要正式安裝latextools。
首先,我們可以透過Preferences中,找到Package control的選項,
點選之後,會在編輯器中出現一個選單。
在選單中,找到install package並點選它。
步驟如下圖:


然後會出現一個package搜尋畫面,在輸入框中打上latextools,找到我們要安裝的軟外掛,並且點選安裝,如下圖所示。


這樣latextools就安裝完成了啦,按下cmd + b 就能編譯latex,編譯完之後就會跳出pdf。

其他細部的使用説明可以參考:
https://github.com/SublimeText/LaTeXTools




其它參考資料:
textmate vs sublime 2
http://tagsoup.github.com/blog/2012/03/04/textmate-vs-sublime-2/

Sublime text 使用教學
Related Posts Plugin for WordPress, Blogger...