閱讀本文以前,最好已經讀過『序幕有些長』segmentfault
這個星球上最複雜龐大的軟件可能不是 Unix-like 與 Windows 這些操做系統,像 TeX Live 這種網羅了幾乎全部的 TeX 及其周邊工具的軟件體系(天然也是包括 ConTeXt 的)也差很少擁有一我的一輩子也沒法窮盡其一切的複雜性。這種複雜性也許並不是來自開發者們孜孜不倦的努力,而是來自他們的耐心經營,因而時間就幫助他們慢慢的讓系統膨脹,讓複雜涌現。因而系統就會盡力保持穩定,其結果也就變得審慎與保守。bash
ConTeXt Standalone 僅關注 ConTeXt 自身的完整性,可以爲 ConTeXt 自身的運行提供一個自成一體的最小運行環境——TeX 引擎、宏包、周邊工具、字體以及文檔,這些加起來不過佔據 200 MB 左右的空間,並且只要你願意,可讓它變得更小一點——我曾經制做過一份不到 20 MB 的只支持 Plain TeX 的 LuaTeX 運行環境。因此,這是 ConTeXt Standalone 的前身叫作『ConTeXt Minimals』的緣由。網絡
在 Linux 中經過網絡安裝 ConTeXt Standalone 的過程很是簡單,若是將建立目錄與下載文件也算做安裝步驟,那麼只需三步:編輯器
$ mkdir ~/context ; cd ~/context # 能夠換成你喜歡的目錄 $ wget http://minimals.contextgarden.net/setup/first-setup.sh $ sh ./first-setup.sh --engine=luatex
上述步驟可將 ConTeXt MkIV 安裝到 ~/context
目錄。first-setup.sh 是個 Shell 腳本,它的 --engine=luatex
選項表示只安裝 MkIV,不安裝 MkII 文件。對於 ConTeXt 的新用戶而言,安裝 MkII 的意義不大。工具
first-setup.sh 也能用於 ConTeXt MkIV 的升級。升級步驟只是比安裝步驟省去建立 context
目錄的環節,即:post
$ cd ~/context $ wget http://minimals.contextgarden.net/setup/first-setup.sh $ sh ./first-setup.sh --engine=luatex
接下來,用你喜歡的文本編輯器,在 /tmp 目錄創建一份名爲 hello.tex 的文件,其內容以下:測試
\starttext \title{Hello \ConTeXt} Here I come! \stoptext
而後便可使用 context
命令將 hello.tex 編譯爲 hello.pdf 文件。在調用 context
命令以前,須要開啓 ConTeXt 運行環境,不然 Shell 不知道 context
命令對應的可執行文件位於何處。開啓 ConTeXt 運行環境的命令是:字體
$ source ~/context/tex/setuptex
setuptex 文件是一份 Shell 腳本,其中定義了 PATH
變量,而 Shell 是經過 PATH
變量的值在系統搜尋可執行文件的。上述的 source
命令可以使得這些環境變量在當前 Shell 環境中生效。也就是說,上述命令只需在當前終端中執行一次便可,執行一次便可,執行一次便可……重要的事重複三遍!lua
開啓了 ConTeXt 運行環境以後,便可在當前 Shell 中使用 context
編譯 hello.tex 文件:操作系統
$ context hello # 不須要輸入 hello.tex 的後綴 ".tex"
而後使用 PDF 閱讀器,例如 evince,查看生成的 pdf 文件:
$ evince hello.pdf
一切就這麼簡單!
若是 ConTeXt Standalone 不採用這種運行方式,那麼勢必會形成天無二日,土無二主的局面。由於若是你的系統裝有 TeX Live,那麼它與 ConTeXt 有交集的那部分構件可能會存在版本的不一樣,從而由於同名而發生衝突。例如,TeX Live 中有一個 luatex
,而 ConTeXt MkIV 中也有個 luatex
。因爲 TeX Live 的發行週期是 1 年,而在這一年中 ConTeXt MkIV 中的 luatex
的版本可能已經更新了屢次,所以它們雖然都有 luatex
,可是它們是不一樣的 luatex
。
雖然 ConTeXt 秉持睦鄰友好的原則,僅在運行 context
以前開啓運行環境,但仍是有些繁瑣了一些,能夠利用 Shell 腳本簡化這一過程。在 /usr/local/bin
目錄創建一份名爲 ctx 的 Bash 腳本,內容以下:
#!/bin/bash source /opt/context/tex/setuptex /opt/context/tex context $@
而後使得ctx 具有可執行權限:
$ sudo chmod +x /usr/local/bin/ctx
之後能夠直接使用 ctx
命令去編譯 .tex 文件,例如:
$ ctx hello
ConTeXt Standalone 能夠跨 GNU/Linux、MS Windows 以及 Mac OS X 等平臺運行。關於它的更多的介紹,請參考:http://wiki.contextgarden.net/ConTeXt_Standalone
如今,ConTeXt Standalone 可以初步支持中文排版,前提是須要向它提供中文字體。由於適合排版使用的中文字體,目前幾乎沒有自由或無償使用的字體,因此 ConTeXt Standalone 從法律上沒法將咱們在 MS Word 中習慣使用的那些中文字體打包進來。
如今假設你具備 simsun.ttf 這份字體文件,它就是 MS Word 中用的最多的宋體。要將這個字體安裝到 ConTeXt 中,最簡單的辦法在你的 ConTeXt 安裝目錄中建立字體目錄,專門用於存放中文字體。例如:
$ mkdir -p ~/context/tex/texmf-local/fonts/truetype/non-free $ cp simsun.ttf ~/context/tex/texmf-local/fonts/truetype/non-free
而後刷新一下 ConTeXt 的字體數據信息,至關於將新安裝的字體『註冊』到 ConTeXt 的字體數據表中,以便它可以查找到字體文件。
$ mtxrun --script fonts --reload
而後用下面這份 test-zh-fonts.tex 驗證所添加的 simsun.ttf 是否可用:
\definefontfamily[myfont][serif][nsimsun] \setscript[hanzi] \setupbodyfont[myfont] \starttext 測試是否支持中文字體。 \stoptext
上述第一行代碼便做加載 simsun.ttf 之用。要注意的是,ConTeXt 是使用字體名來加載字體,而非字體文件。要查看所安裝的字體文件對應的字體名,例如 simsun.ttf,可以使用如下命令:
mtxrun --script fonts --list --all
輸出結果相似:
... ... ... kaiti kaiti simkai.ttf kaitinormal kaiti simkai.ttf kaitiregular kaiti simkai.ttf nsimsun nsimsun simsun.ttf nsimsunnormal nsimsun simsun.ttf nsimsunregular nsimsun simsun.ttf ... ... ...
從輸出結果的第一列中找出 simsun.ttf 對應的字體名,而後在 test-zh-fonts.tex 中使用。若是一份字體文件對應多個字體名,隨便取一個字體名用便可。
目前,對於不怎麼講究的中文排版,ConTeXt 目前對中文的支持勉強夠用。若是但願對中文標點符號的排版作一些控制,例如相鄰標點的間距調整與文本左右邊界處標點與邊界對其等,ConTeXt 便無能爲力了。爲了使得 ConTeXt 能對中文支持的更好一些,我寫了一個 zhfonts 模塊,它可以解決一些問題,但並不是所有問題。有關 zhfonts 的安裝與用法請參考:http://garfileo.is-programmer.com/posts/23740