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轉灰階的方法,供大家參考,需要用到的時候,還真希望能有一鍵轉檔的程式。



Related Posts Plugin for WordPress, Blogger...