睦鄰友好的 ConTeXt Standalone

閱讀本文以前,最好已經讀過『序幕有些長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

相關文章
相關標籤/搜索