2014年3月9日 星期日

排版象棋棋譜

前幾天看到維基百科介紹 LaTeX 可以做些什麼,突然看到一個「排版象棋棋譜」的套件,讓我覺得非常有趣!

我知道 LaTeX 可以排西洋棋棋譜,但我不知道還可以排象棋棋譜,當下就決定來試試看!

維基百科說需要用到 cchess 套件,查看了一下這個套件:
 http://www.ctan.org/tex-archive/macros/latex/contrib/cchess


結果...殘念啊..TeXLive 沒有收錄,所以 Linux 下不能輕易就使用這套件。但是 MikTeX 有收錄這個套件,所以如果是 Windows 下安裝 MikTeX 的話,就可以直接使用 cchess  這個套件。

不過看起來這個套件檔案不多,我決定自己擴充一下。方法類似於前一篇提的,這裡就直接寫在 Linux 中我做了哪些步驟。

套件庫中顯示有 5 個檔案:

$ mkdir -p ~/texmf/tex/latex/cchess
$ cp cchess.sty cchessboard.tex ~/texmf/tex/latex/cchess/
$ mkdir -p ~/texmf/fonts/tfm/cchess
$ cp cchess46.tfm ~/texmf/fonts/tfm/cchess/
$ mkdir -p ~/texmf/fonts/source/cchess
$ cp *.mf ~/texmf/fonts/source/cchess/
$ texhash ~/texmf

完成之後,重新配置一次 LyX, 關掉再重開 LyX,就安裝好了!

接著按照 cchessboard.tex 內的解說,試著自己畫一次,用 ps2pdf 的方式編譯,就可以看到排版結果了!:D
真的是太有趣了!

LyX 原始檔: cchess_board.lyx


不過 cchess 套件比較適合畫出「靜態」的棋盤,不太適合畫出下棋的「動態」流程。
因此,我發現還有另外一個 xq 套件,比較適合畫出動態的棋盤。而且 xq 套件都有收入在 TeXLive 和 MikTeX 中,直接使用就可以了。

我稍微測試了一下,覺得也很有趣!
LyX 原始檔: xq.lyx

 

我只有稍微試驗一下,有興趣的人再參考 xq 套件的範例 .tex 檔。

2014年2月19日 星期三

自行加入文件類別 & 寫 ACM SIGGRAPH 格式的論文

LyX 提供了許多 .layout 檔給使用者使用,但是 .layout 檔只是定義了 LyX 界面要如何呈現, 以及如何對應成 LaTeX  Code. 若是缺少了 Class 檔案 (.cls),就算有了 .layout 檔案也沒用,LyX 還是無法排版出正確的文章。如下圖,一堆「無法使用」的文件類別,幾乎都是 LyX 提供了 .layout 檔, 但是系統找不到 Class 檔。

「無法使用」的文件類別,幾乎都是缺少了 Class file (.cls)  造成的。

我之前一直搞不太懂該如何加入自己的 class file,以及 BibTeX 格式檔,最近終於試驗成功,在此紀錄一下步驟。

我以 ACM SIGGRAPH 格式論文為範例。ACM SIGGRAPH 是一個關於電腦圖學的組織, 如果要投稿論文時,需要以它們規範的格式提供論文。最方便的當然是用官網提供的 acmsiggraph 的 LaTeX 類別檔(.cls) 及 BibTeX 檔(.bst) 撰寫。ACM SIGGRAPH 官方網站: http://www.siggraph.org/learn/instructions-authors

從官網下載 acmsiggraph.zip 檔案後,解壓縮後可以看到有很多檔案。其中的 icons, .cls 和 .bst  是最主要的檔案,其他的都是 範例+說明。

紅框中的檔案跟樣式定義有關,其他是範例資料。

安裝 .cls 檔案 及 .bst 檔

在家目錄下,自己建立一個 texmf 的資料夾(如果已經有了,就不用再建立)。[註1]
接著用 mkdir 命令建立以下兩個目錄 [註2]:
$ mkdir -p ~/texmf/tex/latex/acmsiggraph
$ mkdir -p ~/texmf/bibtex/bst/acmsiggraph
接著將 .cls 檔案, icons 資料夾 和 .bst 分別複製到這兩個目錄下:
$ cp -r acmsiggraph.cls icons/ ~/texmf/tex/latex/acmsiggraph/
$ cp acmsiggraph.bst ~/texmf/bibtex/bst/acmsiggraph/
再執行 texhash ,在 ~/texmf 下,建立一個 ls-R 檔案(資料庫)
$ texhash ~/texmf

接下來再開啟 LyX, 重新配置一次,再重開 LyX, 就完成了!

[註1]: 這個是 Linux 預設的 user's texmf 目錄,如果是 Mac 的,則可能是 ~/Library/texmf。因此最保險的作法,應該是先用 tlmgr conf texmf TEXMFHOME 命令,看看預設值為何 (也就是 TEXMFHOME 設定值),再於預設路徑下建立目錄。如果想用別的目錄名稱,需手動加入 TEXMFHOME  變數中。可參考 網站1,網站2 的說明。

[註2]: TeX 的檔案結構名稱是固定的,因此這邊的路徑名稱不能亂取。如果亂取, TeX Live 可能就會找不到該檔案了。詳細的命名規則,請參考 TDS, http://tug.org/tds 的文件。

用 LyX 寫 ACM SIGGRAPH 論文

如果上述步驟都很順利的話,那麼在 LyX 的選單 「文件→設定值→文件類別」裡面,就可以看到 ACM SIGGRAPH 的選項可用了。如下圖。
ACM SIGGRAPH 類別不再是「無法使用:」了。
選好文件類別後,第一個要注意的是「語言」的選項。由於這種投稿文件一定是「英文」的,所以要確定語言選項為「英語」, 而且語言套件的部份,可以直接選擇「無」,避免 LyX 自動載入 Babel 等套件。

接下來,可以對照官網提供的範例檔 template.tex 的內容,自行在 LyX 照著做一次看看,就可以知道在 LyX 中該如何使用了。

讓我卡住一下,不知道該如何輸入的,有以下幾個地方:
  1. 兩位以上的作者該如何並排?
    • 解決方法:  在兩位作者中,加入 TeX Code: \and
  2. 文件沒有自動把 Title 等資料排版出來。
    • 解決方法: 加入 TeX Code: \maketitle
  3. 範例檔中的 \CRcat{}{}{}{} 命令,需要輸入 4 個參數, 在 LyX 中不知道該如何輸入?
    • 從選單「插入」中,可以找到相對應的格式。如下圖。


用 LyX 做一遍,很容易就做出與官網提供的範例 PDF 一樣的結果。這樣要用 LyX 撰寫自己的 ACM SIGGRAPH 論文,就很容易了 :-) 。

附件:  我的練習檔.


2014年2月13日 星期四

LyX 使用者界面的中文翻譯經驗談

長久以來我用 LyX 都是用英文環境的界面,後來看到 LyX 官方網站提供的各語言翻譯進度,我就驚覺繁體中文版的翻譯進度好像太落後了,最「新」進度竟然是 2007 年...

有一天,想說「好吧!既然我自己都覺得 LyX 這麼好用,以後若要介紹其他人用,總不能都請他們用英文的界面吧!」我就決定來改善一下 LyX 中文界面的翻譯進度。因此從去年年底開始,我就開始研究該如何進行使用者界面的翻譯工作。

首先當然要先下載原始碼,當時最新的版本是 2.0.6,因此我就先以 2.0.6 版為主。下載程式原始碼後,找到裡面的 po 資料夾,裡面有個 zh_TW.po 這個純文字檔,這個檔案就放著所有的翻譯資料。不過翻譯之前,必須先閱讀一下 README.localization 的指引,看一下該如何進行翻譯。

一開始,我是採用 poedit 這個工具來協助我翻譯,但是翻沒幾個項目之後,我就沒力了。因為這個工具雖然方便,但很難看到翻譯項目的上下文,看不到上下文就很難猜目前這個翻譯項目,最後會出現在程式界面中的什麼地方?如果不知道翻譯的項目最後出現的位置,就很有可能會翻譯出不恰當的詞句。
後來,我改用最陽春的 vim 來編輯,感覺就好用多了。因為 vim 可以清楚的看到文件上下文,而且搜尋功能很好用,我可以很方便的尋找到其他翻譯過的類似詞彙,直接複製過來用就好。

改完 zh_TW.po 之後,若要測試翻譯結果,就必須做編譯動作後,再進行安裝。
我使用 Ubuntu 12.04,LyX 是直接從原始碼安裝的。因此,LyX 安裝的路徑為 /usr/local/  在安裝 LyX 的時候,純文字檔 zh_TW.po 會先編譯成 zh_TW.gmo 的二進位檔,再 搬移&改名 到 /usr/local/share/locale/zh_TW/LC_MESSAGES/lyx.mo。

因此若不想每次改完 zh_TW.po 檔之後,還要重新用命令 make install 安裝整個 LyX 的話,可以自己手動編譯成 zh_TW.gmo, 再自行複製取代原本的 lyx.mo 檔案,就可以看到翻譯的結果了。

因此,我先將原始檔的 zh_TW.po 複製到一個新資料夾, 建立一個 Makefile, 內容如下:
all:
    msgfmt -c -v -o zh_TW.mo zh_TW.po
    sudo mv zh_TW.mo /usr/local/share/locale/zh_TW/LC_MESSAGES/lyx.mo
    lyx

我一個畫面用 vim 編輯完存檔後,另外一個畫面立刻輸入 make 指令之後,就會自動編譯、複製後,開啟 LyX。這樣就很方便立刻檢查翻譯的結果適不適當。

為 LyX 做翻譯,最大的好處就是又搞懂了許多 LyX 提供的功能,了解文件語系與界面語系的不同處,  而且也發現到了原始碼中錯誤的地方,自行微調之後,我終於覺得 LyX 用中文界面也很好用了!

以下紀錄一下我微調的項目:

  1. 我已將翻譯好的 zh_TW.po 提交給 LyX 團隊, 但我不知道它們何時會放入套件庫中。因此有興趣的人,可以直接下載我編譯好的二進位翻譯檔 lyx.mo,下載後根據您的作業系統,放入 LyX 程式的路經內。這個二進位檔應該適用所有 2.0.x 版本的 LyX。
    (建議先把舊的 lyx.mo 備份出來,如果新檔不能用,還可以把舊檔還原回去)
    下載二進位繁體中文翻譯檔 lyx.mo
    • Windows
      • C:\Program Files\LyX 2.0\Resources\locale\zh_TW\LC_MESSAGES\LyX2.0.mo
      • 需要將 lyx.mo 改名成 LyX2.0.mo
    • Mac
      • /Applications/LyX.app/Contents/Resources/locale/zh_TW/LC_MESSAGES/LyX-2.0.mo
      • 需要將 lyx.mo 改名成 LyX-2.0.mo
    • Linux 作業系統
      • 可能在:
        /usr/local/share/locale/zh_TW/LC_MESSAGES/lyx.mo
        /usr/share/locale/zh_TW/LC_MESSAGES/lyx.mo
      • 如果上述路徑找不到,可以開啟終端機視窗,輸入 locate lyx.mo,檢查看看舊版的 lyx.mo 放在哪裡?
  2. 修改 languages 檔案中,關於繁體中文的編碼。(這個是一個 bug, 從 2.0 版都是這樣, 我也已回報 LyX 團隊希望他們能修正, 從 2.0.8 版後應該都會修正了)。各作業系統該檔的路徑為:
    • Windows
      • C:\Program Files\LyX 2.0\Resources\languages
    • Mac
      • /Applications/LyX.app/Contents/Resources/languages
    • Linux 作業系統
      • 可能在:
        /usr/local/share/lyx/languages
        /usr/share/lyx/languages
  3. 用純文字編輯器開啟 languages 檔案後,搜尋 zh_CN, 您會發現如下的項目。將其中的 zh_CN 改為 zh_TW。這樣使用者界面語言的選項、以及選擇「繁體中文」後,工作區顯示的文字才會是正確的。
# uses CJK package
Language chinese-traditional
 GuiName         "Chinese (traditional)"
 Encoding        utf8-cjk
 LangCode        zh_CN
End

微調後,就可以開啟 LyX 看看了!
首先先將使用者界面的語言換成「中文(正體)」,儲存,重新啟動之後,就可以看到中文界面了。如下圖。
選擇程式界面語言

CJK 字體設定的部份,也有 pop up 提示了。

模組部份的說明,也盡量翻譯成中文

最後要說,其實在翻譯「模組」這部份的時候,發現「模組」真的是好用的工具呀!之前我說我可能都不會用到,實在大錯特錯。現在要說,熟悉之後,以後會常常用到了。:-D

2013年12月13日 星期五

LyX 模組功能

LyX 雖然功能還滿多的,但是也只能涵蓋整個 LaTeX 的一小部份。像前一篇在練習 csvsimple 的時候,我會用到 tcolorbox 套件,需要將內容放在一個 tcolorbox 的時候,我就必須插入 TeX Code 環境,自己輸入
\begin{tcolorbox}
  ...內容...
\end{tcolorbox} 
當需要放很多這種環境時,一直複製、貼上,也是很煩人的。
研究了一下,終於大概知道該如何簡化這種煩人的動作,關鍵就在於 LyX 的模組功能(Module)。

LyX 的「模組」,就類似於 LaTeX 的 styles/packages。一份文件只能指定一種 document class, 但卻可以添加許多的樣式或套件以美化文件。在 LaTeX 中需要自己手動引用這些樣式或套件;在 LyX 中,可以自己在 LaTeX Preamble 撰寫引用命令,然後在 LyX 中插入 TeX Code 完成所需功能。

但如果在 LyX 中一直插入 TeX Code,這樣也不需要 LyX 了。因此 LyX 設計了「模組」功能,讓一些功能,能夠透過增加模組,就自動增加了某些 LaTeX 的功能,而且可以透過 LyX 的圖形介面使用 LaTeX 。加入模組後,模組會自動在 Preamble 區輸入相關設定,因此有的時候就算不知道想要使用的套件名稱,看到模組裡面有,直接增加模組,馬上就可以用了。
而且,使用者可以自己添加模組設定,加入自己常用的功能。以後如果需要某個功能時,直接加入模組,不用每次都在 LaTeX Preamble 自己手動輸入程式碼。

2013年12月6日 星期五

LaTeX 的「合併列印」--- csvsimple 套件

幾個禮拜前,我需要列印一份 Excel 的資料(這只是泛稱,不代表真的 Microsoft Office 的 Excel 檔案),但是希望格式可以工整一點,因此我想到利用 Word 的合併列印功能。但因為現在都用 LibreOffice, 所以我自然希望用 LibreOffice 裡面的「合併列印」功能,完成這個表單。試了一陣子,發現 LibreOffice 的合併列印功能實在太陽春了,似乎只能印標籤、信件等等,實在不是很好用。

後來我突然想到,不知道能否用 LaTeX 來做?搜尋一下,果然發現有好幾個套件都支援從 CSV (逗點分隔值格式) 抓取資料,稍微瀏覽一下各個套件的範例檔,我覺得 csvsimple 似乎比較好用一點,我就決定來試試看這個套件。

當然一邊看說明文件,一邊照著練習,看完說明文件也剛好做完一個小紀錄文件。

在看說明文件的時候,突然發現 csvsimple 套件的說明文件做的好精緻呀!後來查看說明文件的原始碼,才知道它另外用了 tcolorbox 的套件,所以我也如法炮製試試看。也順便發現了另外一個好用的套件 tcolorbox 。

csvsimple 套件在 LyX 中使用的時候,需要輸入很多 TeX Code,雖然我一開始很排斥看到一大堆 TeX Code 出現在文件中,但習慣之後就覺得,csvsimple 這麼多種功能變化,要做成圖形介面也是很不容易的,所以稍微辛苦,查看一下說明文件再輸入 code,也是可以接受的。

另外說明一下,LyX 原始檔使用 xeCJK 排中文(會用到 5 種 cwTeX TTF 字型),電腦內如果沒有這 5 套字體,會無法排版。可以參考前幾篇介紹 xeCJK 的部份安裝字體。改用 xeCJK, 是因為我原先用 CJK 排的時候,程式碼內只要有中文字的時候,都會出錯,讓我很沮喪。後來轉用 xeCJK 時,輕輕鬆鬆就處理完,也讓我慢慢愛上用 xeCJK 排中文文件了。

下載原始檔 test_csvsimple.zip

2013年12月4日 星期三

使用 CJK 放入含有中文字的程式碼的詭異問題

最近又需要寫個有放入程式碼的文件,程式碼中含有中文。依照之前的經驗,我只需要在 Document > Settings... > Listings 的空白處設定 extendedchars=false, 輸入的程式檔案內有中文都可以正常顯示出來。

但是最近發現,如果我放入一個 .csv 格式的檔案,中文字就會亂跑了。
嘗試著使用 listingsutf8, inputenc 等套件,加入 inputencoding=utf8  命令,都沒用。

百試不得其解下,最後只好改用 xeCJK 套件試試看。一排版...完全正常!
這真的是個詭異的問題! 研究了半天,也找不到原因所在。
我也只能暫下一個結論:「如果用 CJK 排版含有中文的程式碼有問題時,可以改用 xeCJK 試試看。」

使用 xeCJK 套件處理中文,CSV 檔案正常顯示內容。

使用 CJK 套件處理中文,CSV 檔案內容出錯。

文件檔下載

2013年9月28日 星期六

在 LyX 中設定 xeCJK 使用正體中文字型

這篇可以算是前一篇「在 LyX 中使用本機的中文字型」的進階版。因為我發現前一篇用的實在太簡陋了,沒有善用 xeCJK 的功能,所以排列中英文都有的文件時,也不是非常方便。

因此,最近仔細研究了一下 xeCJK 的功能,發現真的是好用!尤其參考了炎龍老師的部落格,更是學到許多。

以下就是我邊研究 xeCJK, 一邊寫的筆記。

下載原始檔: xeCJK-Example.lyx