## 第?29?章?ConTeXt 入門指南
**目錄**
[](ch29.html#id3138032)
[TeX 簡介](ch29s02.html)
[為什么要用 TeX](ch29s02.html#id3137416)
[順流、逆流](ch29s02.html#id3137440)
[LaTeX](ch29s03.html)
[部署 LaTeX](ch29s03.html#id3138143)
[安裝宏包](ch29s03.html#id3138323)
[學習 LaTeX](ch29s03.html#id3138482)
[Latex 結構化寫作](ch29s04.html)
[ConTeXt 簡介](ch29s05.html)
[部署 ConTeXt](ch29s06.html)
[安裝](ch29s06.html#id3138931)
[快速通道](ch29s06.html#id3139072)
[字體設置](ch29s06.html#context-font)
[](ch29s07.html)
[Windows 下安裝](ch29s07.html#id3139709)
[項目管理](ch29s08.html)
[語法簡介](ch29s09.html)
[空白距離](ch29s09.html#id3140461)
[特殊字符](ch29s09.html#id3140535)
[命令](ch29s09.html#id3140679)
[標題](ch29s10.html)
[列表](ch29s11.html)
[數學公式](ch29s12.html)
[運算符](ch29s12.html#id3141181)
[上標、下標](ch29s12.html#id3141349)
[打印字體配置文件](ch29s13.html)
## TeX 簡介
古來圣賢皆寂寞,唯有飲者留其名
滄海桑田,UNIX 的世界在風雨飄搖中悄悄變換了容顏
從傳統工具到 GNU 工具,從 4.4BSD-Lite 到 FreeBSD,從 Minix 到 Linux,從 VI 到 VIM……往日的 UNIX 已經不復存在
唯一歷久彌新的,只有 UNIX 的風骨;或者還有,TeX?
### 為什么要用 TeX
TeX 足夠強大,可以滿足使用者的絕大多數要求。尤其在排版質量、數學公式、圖形生成、結構化控制等方面,幾乎無出其右者
盡管學習 TeX 相對困難,但是學習的收益比成本要大得多
TeX 尤其適合需要打印的文檔。恐怕你不能夠在辦公室里使用諸如 DocBook、reStructuredText 之類的格式寫一份文件,然后把它拿給你的老板
### 順流、逆流
現代文檔工具,傾向于分離內容與樣式。而內容部分,則用結構化的方式進行梳理,對于規模比較大的文檔,這是最佳的方案。
Knuth 的 TeX 本身沒什么結構控制,它就像一套排版領域的"匯編語言",大約 300 多個標記。TeX 在處理一份文檔時,就是把整篇文檔當作一個很長很長的字符串一口吞下去,然后消化掉,最后排出 dvi 文件(現代的 TEX 輸出的是 PDF)。
由于 TeX 支持宏擴展,為了方便排版,Knuth 做了一個 Plain TeX,對 TeX 標記進行了一些功能邏輯上的封裝。不過,還是很不結構化。
LaTeX 是較早嘗試對 TeX 進行結構化封裝的宏包,它可以明確地實現樣式與內容的分離。不過,LaTeX 本身對排版方面的內建支持太少,需要許多其它宏包的支持,而那些宏包不是統一開發的,它們之間經常出現沖突。
ConTeXt 是對 TeX 進行結構化封裝的新嘗試,比 LaTeX 更加結構化,對排版方面的內建支持很好。而且 ConTeXt 對 XML 的支持相對完善,甚至可以直接用 ConTeXt 的 XML 語法來寫文檔[[63](ch29s02.html#ftn.id3138107)]。
總體說來,LaTex 是科技論文事實上的標準,如果要排論文,就用 LaTeX;而作個人的文檔、非正式散布的文檔、演示文檔,推薦用 ConTeXt
* * *
> [[63](ch29s02.html#id3138107)] DocBook與ConTeXt之間可以無縫轉換
## LaTeX
### 部署 LaTeX
安裝 texlive-core
新建 `a.tex` 文件,內容如下:
```
\documentclass[11pt,a4paper]{article}
%加入了一些針對XeTeX的改進并且加入了 \XeTeX 命令來輸入漂亮的XeTeX logo
\usepackage{xltxtra}
%啟用一些LaTeX中的功能
\usepackage{xunicode}
%%%% fontspec 宏包 %%%%
\usepackage{fontspec}
% 指定字體
\setmainfont[BoldFont=Adobe Heiti Std]{Adobe Song Std}
\setsansfont[BoldFont=Adobe Heiti Std]{Adobe Kaiti Std}
%\setmonofont{Bitstream Vera Sans Mono}
%%%% 版面 %%%%
\usepackage[top=1in,bottom=1in,left=1.25in,right=1in]{geometry}
% 設置行距
\linespread{1.3}
%%%% 縮進 %%%%
% 自動首行縮進
\usepackage{indentfirst}
% 設置首行縮進的距離
\setlength{\parindent}{2.22em}
%連字符
\defaultfontfeatures{Mapping=tex-text}
%中文斷行
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt
%以下為正文部分
\begin{document}
% 生成目錄
\tableofcontents
% 章節
\section{\XeLaTeX}
XeTeX 可以使用系統自帶的字體,而不需要再另外生成
% 章節
\section{……}
\end{document}
```
使用 `fc-list` 命令查看可用字體,根據實際情況修改 % 指定字體 下面的幾行
使用以下命令生成 PDF
```
xelatex a.tex
```
### 安裝宏包
LaTeX 只是一個基本框架,通過宏包擴展其功能。例如:
fontspec
指定字體
geometry
設置版面
color
使用色彩
hyperref
設置鏈接
listings
代碼引用環境
titlesec
設置標題樣式
titletoc
設置目錄樣式
indentfirst
首行縮進(這是中文的排版習慣)
xltxtra
XeTeX 擴展功能
到 [CTAN](http://www.ctan.org/) 下載宏包,解壓后移動到 LaTeX 能找到的目錄,使用以下命令刷新:
```
sudo texhash
```
### 學習 LaTeX
推薦兩本 LaTeX 的書:
* [lshort-zh-cn 4.20](http://bbs.ctex.org/viewthread.php?tid=40736&extra=page%3D1)
* [lnotes](http://bbs.ctex.org/viewthread.php?tid=43774&extra=page%3D1)
## Latex 結構化寫作
對于規模比較大的文檔項目,要用結構化方法寫作
首先樣式要與內容分離,將 LaTeX 的導言部分寫在一個文件里,例如 `style.tex`:
```
%\documentclass[11pt,a4paper,twoside]{article}
\documentclass[11pt,a4paper,twoside]{book}
%加入了一些針對XeTeX的改進并且加入了 \XeTeX 命令來輸入漂亮的XeTeX logo
\usepackage{xltxtra}
%啟用一些LaTeX中的功能
\usepackage{xunicode}
%%%% fontspec 宏包 %%%%
\usepackage{fontspec}
% 指定字體
\setmainfont[BoldFont=Adobe Heiti Std]{Adobe Song Std}
\setsansfont[BoldFont=Adobe Heiti Std]{Adobe Kaiti Std}
%\setmonofont{Bitstream Vera Sans Mono}
%%%% 版面 %%%%
\usepackage[top=1in,bottom=1in,left=1.25in,right=1in]{geometry}
% 設置行距
\linespread{1.3}
%%%% 縮進 %%%%
% 自動首行縮進
\usepackage{indentfirst}
% 設置首行縮進的距離
\setlength{\parindent}{2.22em}
%連字符
\defaultfontfeatures{Mapping=tex-text}
%中文斷行
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt
%%%% color %%%%
\usepackage{color}
\definecolor{gray}{rgb}{0.9,0.9,0.9}
\definecolor{blue}{rgb}{0,0,1}
%%%% 章節標題 %%%%
\usepackage[center,pagestyles]{titlesec}
\titleformat{\section}{\centering\Large\bfseries}{\thesection}{1em}{}
\titleformat{\subsection}{\large\bfseries}{\thesubsection}{1em}{}
\newpagestyle{main}{
\sethead{\small\thesection\quad\sectiontitle}{}{$\cdot$~\thepage~$\cdot$}
\setfoot{}{}{}\headrule}
\pagestyle{main}
%%%% 目錄樣式 %%%%
\usepackage{titletoc}
\titlecontents{chapter}
[0.0em]
{} %\song
{\thecontentslabel\hspace{1em}}
{}
{\normalfont\dotfill\textrm{\contentspage[{\bfseries\thecontentspage}]}}
\titlecontents{section}
[0.0em]
{} %\song
{\thecontentslabel\hspace{1em}}
{}
{\normalfont\dotfill\textrm{\contentspage[{\bfseries\thecontentspage}]}}
%%%% hyperref %%%%
\usepackage[
pdfstartview=FitH, CJKbookmarks=true, bookmarksnumbered=true,
bookmarksopen=true,
linkcolor=true, %注釋掉此項則交叉引用為彩色邊框(將colorlinks和pdfborder同時注釋掉)
colorlinks=blue,
pdfborder=001, %注釋掉此項則交叉引用為彩色邊框
citecolor=blue ]{hyperref}
\usepackage{listings}
\lstset{
numbers=none,
numberstyle=\scriptsize,
frame=single,framerule=0.1pt,
backgroundcolor=\color{gray},
fontadjust=false,
flexiblecolumns=true,
language=[LaTeX]TeX,
basicstyle=\ttfamily\small,
commentstyle=\color{orange},
keywordstyle=\color{blue}
escapebegin=\begin{esc},escapeend=\end{esc},texcl=true
}
\graphicspath{{img/}}
%其它
%\usepackage[marginal,perpage,symbol]{footmisc}
```
將所有會用的到詞匯在一個文件中定義,例如 `glossary.tex`
```
\def\xxx{The five boxing wizards jump quickly.\\}
```
* 使用命令 **\xxx** 插入定義的詞匯
使用 **\input** 命令將這兩個文件插入到主文檔中:
```
%插入樣式定義文件的內容
\input{style}
%插入詞匯定義文件的內容
\input{glossary}
%正文內容
\begin{document}
%將前言放到 `info.tex` 文件中
%使用 \include 命令載入
\include{info}
%插入目錄
\tableofcontents
%將每章的內容放在單獨的文件中 (1st.tex)
%使用 \include 命令載入
% `1st.tex` 文件中應包含 **\chapter** 等命令
\include{1st}
% \include 命令會在新的一頁上排版載入的文本
%如果不想分頁,可以使用 \input 命令,它只是簡單的載入文本 (2nd.tex)
\input{2nd}
\end{document}
```
## ConTeXt 簡介
LaTeX 是一個基本框架,主要依靠宏包擴展功能,這樣在保持自身精干的同時,可以擁有強大的功能,不失為一個靈活的方案
這種方案初衷是好的,但是在漫長的進化中,零零散散開發的宏包缺乏組織,多個宏包可能同時提供某一功能,這就可能引發沖突……而 ConTeXt 則不存在這一問題,因為它是的各種功能是統一開發的,而且開發進程相當活躍。
ConTeXt 制作的 PDF 文檔,可以擁有強大的交互特性,使用 ConTeXt 作出的 PDF 文檔,甚至可以作為計算器
當然,ConTeXt 并不是很容易掌握的,千里之行,始于足下,我們先搭建 ConTeXt 的工作環境
## 部署 ConTeXt
### 安裝
目前,只有 ConTeXt Minimals (ConTEXt最小包)提供了最新的 ConTeXt 版本,而且可以與系統內其它 TeX 發行版和睦相處
ConTeXt Minimals 通過腳本安裝,安裝腳本會下載安裝文件到當前目錄。為了避免混亂,有必要手動為 ConTeXt Minimals 創建目錄
```
export CTXDIR=/opt/context
mkdir -p $CTXDIR
cd $CTXDIR
```
> [](ch29s06.html#context-s-1) 這是推薦的目錄
使用 rsync 下載 ConTeXt Minimals 的安裝腳本:
```
rsync -ptv rsync://contextgarden.net/minimals/setup/linux/first-setup.sh .
```
* 同樣,安裝腳本也使用 rsync 下載安裝文件。這種方式只下載升級過的文件,便于增量更新;也能夠最大程度的降低網絡不穩定所帶來的影響
執行安裝腳本[[64](ch29s06.html#ftn.id3139012)](第一次安裝可能會等待較長時間)
```
./first-setup.sh
```
* 升級到最新版本,也使用這個腳本
下載完所有文件后,安裝腳本會自動配置 ConTeXt Minimals [[65](ch29s06.html#ftn.id3139043)]
### 快速通道
新建一個 `ctx` 文件,內容如下:
```
export CTEXDIR=/opt/context
source $CTEXDIR/tex/setuptex $CTEXDIR/tex
export OSFONTDIR="/usr/share/fonts/adobe"
```
> [](ch29s06.html#context-e-1) 這里的目錄為 ConTeXt Minimals 安裝目錄
> [](ch29s06.html#context-e-2) ConTeXt 需要設置一些環境變量才能正常工作,使用 `setuptex` 腳本
> [](ch29s06.html#context-e-3) `OSFONTDIR` 為字體路徑變量,設置為系統中字體的實際路徑,見[“字體設置”一節](ch29s06.html#context-font "字體設置")
執行 `source ctx` 命令,設置好需要的環境變量,ConTeXt 工作環境便準備就緒
新建一個 `a.tex` 文件,內容如下:
```
% a.tex %這里是注釋
\starttext %正文開始
Hello World. %正文內容
\stoptext %正文結束
```
執行 `context a.tex` 命令,會得到 `a.pdf` 文件
> 提示:執行 `context --purge` 命令清除中間文件。但保留中間文件可以提高編譯速度
### 字體設置
下面是一個包含中文的 `chinese.tex` 文件
```
\usetypescriptfile[zhfonts] %加載打印字體配置文件(typescript) `zhfonts.tex`
\usetypescript[myscript] %使用打印字體配置文件中定義打印字體的腳本 `myscript`
\setupbodyfont[myfont,rm,11pt] %設置正文字體
\setupindenting[always,2em,first] %設置中文縮進格式(首行縮進兩字)
\setupheads[indentnext=yes] %每節的首段也要縮進
\setupinterlinespace[big] %設置行距(big=1.5倍)
\setupwhitespace[medium] %設置段間距[small, medium, big]
\definepapersize[SCREEN][width=21cm,height=29.7cm] %設置頁面尺寸
\setuppapersize[SCREEN][SCREEN] %紙張尺寸,通常和頁面尺寸相同。(除非在印刷用紙上實現多頁排版)
\starttext
世界,你好!
\stoptext
```
`打印字體配置文件`(typescript) 文件是一個 TeX 文件,要求與 `chinese.tex` 文件在同一目錄,或者位于 ConTeXt Minimals 可以檢索到的某個目錄中[[66](ch29s06.html#ftn.id3139372)]
新建一個`打印字體配置文件`(typescript),名為 `zhfonts.tex`,內容如下:
```
% engine=luatex
% \ctxlua{fonts.collections.trace = true}
\let\synchronizetext\relax
\synchronizemathfontsfalse
\spaceskip .25em plus .25em \relax
\definefontfeature[zh][mode=node,script=hang,lang=zhs]
\starttypescript [serif] [zhfont]
\definefontsynonym
[ZhSerif][name:AdobeSongStd-Light][features=zh]
\definefontsynonym
[ZhSerifBold][name:AdobeHeitiStd-Regular][features=zh]
\definefontsynonym
[ZhSerifItalic][name:AdobeKaitiStd-Regular][features=zh]
\definefontsynonym
[ZhSerifBoldItalic][name:AdobeHeitiStd-Regular][features=zh]
\definefontfallback
[WesternSerif][name:TeXGyrePagella-Regular][0x0000-0x0400][force=yes]
\definefontfallback
[WesternSerifBold][name:TeXGyrePagella-Bold][0x0000-0x0400][force=yes]
\definefontfallback
[WesternSerifItalic][name:TeXGyrePagella-Italic][0x0000-0x0400][force=yes]
\definefontfallback
[WesternSerifBoldItalic][name:TeXGyrePagella-BoldItalic][0x0000-0x0400][force=yes]
\definefontsynonym
[Serif][ZhSerif][fallbacks=WesternSerif]
\definefontsynonym
[SerifBold][ZhSerifBold][fallbacks=WesternSerifBold]
\definefontsynonym
[SerifItalic][ZhSerifItalic][fallbacks=WesternSerifItalic]
\definefontsynonym
[SerifBoldItalic][ZhSerifBoldItalic][fallbacks=WesternSerifBoldItalic]
\stoptypescript
\starttypescript [sans][zhfont]
\definefontsynonym
[ZhSans][name:AdobeKaitiStd-Regular][features=zh]
\definefontsynonym
[ZhSansBold][name:AdobeHeitiStd-Regular][features=zh]
\definefontsynonym
[ZhSansItalic][name:AdobeKaitiStd-Regular][features=zh]
\definefontsynonym
[ZhSansBoldItalic][name:AdobeHeitiStd-Regular][features=zh]
\definefontfallback
[WesternSans][name:TeXGyreAdventor-Regular][0x0000-0x0400][force=yes]
\definefontfallback
[WesternSansBold][name:TeXGyreAdventor-Bold][0x0000-0x0400][force=yes]
\definefontfallback
[WesternSansItalic][name:TeXGyreAdventor-Italic][0x0000-0x0400][force=yes]
\definefontfallback
[WesternSansBoldItalic][name:TeXGyreAdventor-BoldItalic][0x0000-0x0400][force=yes]
\definefontsynonym
[Sans][ZhSans][fallbacks=WesternSans]
\definefontsynonym
[SansBold][ZhSansBold][fallbacks=WesternSansBold]
\definefontsynonym
[SansItalic][ZhSansItalic][fallbacks=WesternSansItalic]
\definefontsynonym
[SansBoldItalic][ZhSansBoldItalic][fallbacks=WesternSansBoldItalic]
\stoptypescript
\starttypescript [mono][zhfont]
\definefontsynonym
[ZhMono][name:AdobeFangsongStd-Regular][features=zh]
\definefontsynonym
[ZhMonoBold][name:AdobeHeitiStd-Regular][features=zh]
\definefontsynonym
[ZhMonoItalic][name:AdobeFangsongStd-Regular][features=zh]
\definefontsynonym
[ZhMonoBoldItalic][name:AdobeHeitiStd-Regular][features=zh]
\definefontfallback
[WesternMono][name:TeXGyreCursor-Regular][0x0000-0x0400][force=yes]
\definefontfallback
[WesternMonoBold][name:TeXGyreCursor-Bold][0x0000-0x0400][force=yes]
\definefontfallback
[WesternMonoItalic][name:TeXGyreCursor-Italic][0x0000-0x0400][force=yes]
\definefontfallback
[WesternMonoBoldItalic][name:TeXGyreCursor-BoldItalic][0x0000-0x0400][force=yes]
\definefontsynonym
[Mono][ZhMono][fallbacks=WesternMono]
\definefontsynonym
[MonoBold][ZhMonoBold][fallbacks=WesternMonoBold]
\definefontsynonym
[MonoItalic][ZhMonoItalic][fallbacks=WesternMonoItalic]
\definefontsynonym
[MonoBoldItalic][ZhMonoBoldItalic][fallbacks=WesternMonoBoldItalic]
\stoptypescript
\starttypescript[myscript]
\definetypeface[myfont][rm][serif][zhfont]
\definetypeface[myfont][ss][sans][zhfont]
\definetypeface[myfont][tt][mono][zhfont]
\stoptypescript
```
* 如何定制字體參閱[“打印字體配置文件”一節](ch29s13.html "打印字體配置文件")
下載中文字體[[67](ch29s06.html#ftn.id3139613)],安裝,并設置 `OSFONTDIR` 變量:
```
export OSFONTDIR="/usr/share/fonts/adobe"
```
> [](ch29s06.html#context-e-31) 中文字體的安裝路徑,建議寫入 `ctx` 文件[[68](ch29s06.html#ftn.id3139659)]
執行以下命令刷新文檔數據庫:
```
context --generate
```
最后,使用 `chinese.tex` 文件生成 PDF
```
context chinese.tex
```
* * *
> [[64](ch29s06.html#id3139012)] 需要 ruby 支持
> [[65](ch29s06.html#id3139043)] 期間可能會出現幾次如下> 提示:
```
! I can't find file `core-swd'.
```
鍵入`core-swd.mkii`即可
> [[66](ch29s06.html#id3139372)] 如 `$TEXMFLOCAL``/tex/context/third`
```
mkdir -p $TEXMFLOCAL/tex/context/third
mv zhfonts.tex $TEXMFLOCAL/tex/context/third
context --generate
```
> [](ch29s06.html#context-e-21) 在 `$TEXMFLOCAL` 目錄下新建第三方目錄
> [](ch29s06.html#context-e-22) 將 `zhfonts.tex` 文件移動到該目錄
> [](ch29s06.html#context-e-23) 刷新一下文檔數據庫,就可以使用該字體配置文件了
> [[67](ch29s06.html#id3139613)] 這個配置文件使用 Adobe Creative Suite 4 中附帶的四種字體
> [[68](ch29s06.html#id3139659)] 前面給出的 `ctx` 文件已設置此變量
### Windows 下安裝
首先下載 [context-setup-mswin](http://minimals.contextgarden.net/setup/context-setup-mswin.zip) 和 [ruby](http://rubyinstaller.rubyforge.org/wiki/wiki.pl)
安裝 ruby ;解壓 context-setup-mswin ,運行 `first-setup.bat`[[69](ch29s07.html#ftn.id3139739)]
假設 conTeXt 安裝在 `D:\context` 目錄下,設置環境變量[[70](ch29s07.html#ftn.id3139753)],在 `PATH` 項中添加路徑:
```
;D:\context\tex\texmf-mswin\bin
```
將以下內容保存為 `environment.reg` ,雙擊導入注冊表
```
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Environment]
"CYGWIN"="nontsec"
"OSFONTDIR"="C:\\WINDOWS\\Fonts"
"TEXMF"="{$TEXPATH\\texmf,$TEXPATH\\texmf-local,$TEXPATH\\texmf-context,$TEXPATH\\texmf-mswin}"
"TEXMFCACHE"="$TEXPATH\\texmf-cache"
"TEXMFCNF"="$TEXPATH\\texmf{-local,-context,}/web2c"
"TEXMFOS"="$TEXPATH\\texmf-mswin"
"TEXPATH"="D:\\context\\tex"
```
將打印字體配置文件復制到 `D:\context\tex\texmf-local\tex\context\third` 目錄下[[71](ch29s07.html#ftn.id3139805)]
使用命令 `context --generate` 刷新文檔數據庫[[72](ch29s07.html#ftn.id3139823)]
最后,使用命令 `context a.tex` 或者 `texexec a.tex` 生成 PDF 文檔
* * *
> [[69](ch29s07.html#id3139739)] 這是一個自動下載、升級的腳本
> [[70](ch29s07.html#id3139753)] 我的電腦:右鍵→屬性→高級→環境變量
> [[71](ch29s07.html#id3139805)] 默認的配置文件需要4個 Adobe 的字體,如果沒有這四個字體,可以將配置文件中使用到的 Adobe 字體改為系統中的字體
> [[72](ch29s07.html#id3139823)] 需要在 Windows 命令行中執行
## 項目管理
為了養成良好的習慣,我們把 ConTeXt 文檔拆分到幾個單獨的 `.tex` 文件中,這樣維護起來比較方便。
首先是主文檔 `product.tex`[[73](ch29s08.html#ftn.id3139875)],生成 PDF 只要編譯此文件即可
```
%%%%%此文件使用 product 環境,起始聲明
\startproduct{}
%%%導言區使用 \environment 載入文件
%載入樣式文件 style.tex
\environment style
%載入詞匯定義文件 gloss.tex
\environment gloss
%%%正文起始
\starttext
%%%正文區使用 \component 載入文件
%封面 cover.tex
\component cover
%目錄
\title{目錄}
\placecontent
%%正文內容
%載入章節 1.tex 2.tex 3.tex
\component 1
\component 2
\component 3
%%%正文結束
\stoptext
%%%%% product 環境結束聲明
\stopproduct
```
在導言區載入的文件,要使用 `environment` 環境,例如樣式定義文件 `style.tex`
```
\startenvironment{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 中文設置 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usetypescriptfile[zhfonts] %加載打印字體配置文件(typescript) zhfonts.tex
\usetypescript[myscript] %使用打印字體配置文件中定義打印字體的腳本 myscript
\setupbodyfont[myfont,rm,11pt] %設置正文字體
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 正文 標題 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 啟用顏色模式, 設置鏈接文本顏色
\setupcolors[state=start]
\definecolor[linktext][darkred]
\setupinteraction[state=start,color=linktext]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%正文
\setupindenting[always,2em,first] %設置中文縮進格式(首行縮進兩字)
\setupheads[indentnext=yes] %每節的首段也要縮進
\setupinterlinespace[big] %設置行距(big=1.5倍)
\setupwhitespace[small] %設置段間距[small, medium, big]
%標題
\setupheads[indentnext=yes]
\setuphead
[chapter]
[style=\bfc,header=empty,footer=empty]
\setuphead
[section]
[style=\bfa]
\setuphead
[title]
[style=\bfb,header=empty,foote=empty]
\setuphead
[subsubject]
[style=\bf]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 頁面設置 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%定義頁面尺寸為 SCREEN
\definepapersize[mySCREEN][width=21cm,height=29.7cm]
%紙張尺寸,通常和頁面尺寸相同。(除非在印刷用紙上實現多頁排版)
\setuppapersize[SCREEN][mySCREEN]
%布局
\setuplayout
[width=fit,
height=middle,
leftmargin=3cm,
rightmargin=3cm,
backspace=4cm,
topspace=.5cm,
headerdistance=.4cm,
footerdistance=.4cm,
header=1cm,
footer=1cm]
%去掉頁眉正中 自動添加的頁碼
\setuppagenumbering
[style=\tfx,location=]
%頁眉
\def\CurrentChapter{%
第 \headnumber[chapter]\ 章%
\hbox to 2em{}%
\getmarking[chapter]%
}
\def\CurrentSection{%
\headnumber[section]%
\hbox to 2em{}%
\getmarking[section]%
}
\setupheadertexts
[\CurrentChapter][pagenumber]
[pagenumber][\CurrentSection]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%邊注
\setupinmargin[left,right][style=\tfx]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%PDF 閱讀器中自適應頁寬
\setupinteraction[state=start,openaction=FitWidth]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 目錄 書簽 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 啟用書簽功能
\setupinteraction[state=start]
\setupinteractionscreen[option=bookmark]
\placebookmarks[chapter,section,subsection][chapter]
%%%經典目錄樣式
%% turn off numbering of some levels
%\setuphead[subsection][number=no]
%\setuphead[subsubsection][number=no]
%% TOC
%% level=4, \subsubsubsections are not listed in TOC
%% alternative=c, space to the page number is filled with dots
%\setupcombinedlist[content][level=4,alternative=c]
%%\setuplist[chapter][width=5mm,style=bold]
%\setuplist[section][width=10mm,style=bold]
%\setuplist[subsection][width=20mm]
%% pagestyle=normal for changing the appearance of pagenumber
%\setuplist[subsubsection][width=20mm,style=slanted,pagestyle=normal]
%目錄樣式
\def\ChapterNumber#1{\doiftext{#1}{第\;#1\;章\quad}}
\setuplist
[chapter]
[alternative=a,
before={\page[preference]\blank},
after=\blank,
style=bold,
width=fit,
pagestyle=boldslanted,
pagenumber=no,
numbercommand=\ChapterNumber]
\def\PageNumber#1{\color[darkgray]{#1}.}
\setuplist
[section]
[alternative=d,
style=small,
pagecommand=\PageNumber,
pagestyle=\itx]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\stopenvironment
```
詞匯定義文件 `gloss.tex`
```
\startenvironment{}
%使用命令 \hello{mom}
%得到 Good morning mom
\define[1]\hello{Good morning, #1}
%使用命令 \lxsc
%得到 《開源世界旅行手冊》
\define\lxsc{《開源世界旅行手冊》}
\stopenvironment
```
章節放在單獨的文件中,例如 `1.tex`
```
\startcomponent{}
\chapter{第一章}
ConTeXt 組件文檔
\stopcomponent
```
* * *
> [[73](ch29s08.html#id3139875)] 文件名任意
## 語法簡介
### 空白距離
TEX 將空格和制表符等空白字符視為相同的空白距離(space),多個連續的 空白字符 等同為一個空白字符, 每行開始的空白字符將被忽略, 而單個的 換行符 被視為一空格。
TEX 使用空行(兩個或以上換行符)來分隔段落。如同空格一樣,多個空行所起的作用和一個空行是相同的。
以下為示例代碼:
```
TEX 將空格和制表符等空白字符視為相同的空白距離(space),
多個連續的 空白字符 等同為一個空白字符,
每行開始的空白字符將被忽略,
而單個的 換行符
被視為一空格。
TEX 使用空行(兩個或以上換行符)來分隔段落。如同空格一樣,多個空行所起的作用和一個空行是相同的。
以下為示例代碼:
```
可以使用 `\blank` [[74](ch29s09.html#ftn.id3140512)]命令插入空行,使用 `\\` 插入空格
### 特殊字符
以下為 TeX 的保留字符:
| 保留字符 | 禁止解析 | 說明 |
| --- | --- | --- |
| \ | \type{\} | 命令引導符 |
| % | \% | 注釋 |
| $ | \$ | 數學公式 |
| ^ | \^ | 上標 |
| _ | \_ | 下標 |
| # | \# |
| & | \& |
| ~ | \~ |
| { | \{ | 命令參數 |
| } | \} | 命令參數 |
`\backslash` 可以得到數學符號中的 **\**,而 `\\` 通常在標題、頁眉/頁腳、邊注等環境中作為換行符
### 命令
TEX 命令以反斜線“`\`”引導,以任意非字母字符結束
命令可以使用花括號或方括號作為參數,例如:
```
\command[選項,設置,……]{操作對象}
```
命令分為兩種:普通命令和環境命令。普通命令可以用于行內;環境命令包含起始聲明和結束聲明,用于多行。普通命令和環境命令可以互相嵌套
```
\begin{itemize} %環境命令起始聲明
\item 列表項 %普通命令
\item 列表項
\end{itemize} %環境命令結束聲明
```
* * *
> [[74](ch29s09.html#id3140512)] `\blank[medium*4]` 插入4個中等高度空行
## 標題
conTeXt 中,章節以下列命令開始,并使用 **{}** 指定標題,例如 `\chapter{第一章}`:
| 章節 | 編號 | 不編號 |
| --- | --- | --- |
| 部 | \part |
| 章 | \chapter | \title |
| 節 | \section | \subject |
| 小節 | \subsection | \subsubject |
| | \subsubsection | \subsubsubject |
* 章節無需結束聲明,遇到下一個章節命令,本章節結束
使用方括號給章節定義標記
```
\title[引用]{標題} %定義標記
\at{page}[引用] %使用 `\at` 命令引用
```
## 列表
使用以下命令插入列表:
```
\startitemize[R,packed,broad] %列表起始聲明 [選項]
\item 列表項一 %列表項使用 **\item** 命令
\item 列表項二
\item 列表項三
\stopitemize %列表結束聲明
```
第一個選項為列表項分隔符(前綴):
| 選項 | 樣式 |
| --- | --- |
| 1 | 圓點 |
| 2 | 短劃線 |
| 3 | 星號 |
| 4 | 三角形 |
| 5 | 梅花 |
| 6 | 空心圓 |
| n | 數字 |
| a | 小寫字母 |
| A | 大寫字母 |
| r | 小寫羅馬數字 |
| R | 大寫羅馬數字 |
后兩個為格式選項
| 選項 | 格式 |
| --- | --- |
| standard | 標準 |
| packed | 壓縮列表項垂直間距 |
| serried | 壓縮分隔符和文本的間距 |
| joinedup | 壓縮列表與正文間距 |
| broad | 擴展分隔符和文本的間距 |
| inmargin | 將分隔符放在而邊緣 |
| atmargin |
| stopper |
| columns |
| intro |
| continue |
**columns** 選項需要參數
```
\startitemize[columns,three,broad]
```
## 數學公式
數學環境
```
\placeformula[1] %給數學公式編號[引用標記]
\startformula %數學環境起始聲明
y=x^2
\stopformula %數學環境結束聲明
這是行內的數學環境 $\int_0^1 x^2 dx$
```
### 運算符
可以直接使用的基本運算符有:
```
+ - = < >
```
| 數學符號 | 命令 |
| --- | --- |
| ± | \pm |
| × | \times |
| ÷ | \div |
| * | \ast |
| ★ | \star |
| ● | \bullet |
| ○ | \circ |
| · | \cdot |
| ≤ | \leq |
| 《 | \ll |
| ≥ | \geq |
| 》 | \gg |
| ≡ | \equiv |
| ~ | \sim |
| ≈ | \approx |
| ≠ | \neq |
| ∩ | \cap |
| ∪ | \cup |
| ∈ | \in |
### 上標、下標
使用 `^` 輸入上標
```
勾股定理 $3^2 + 4^2 = 5^2$ %`^2`為指數
二的十次方 $2^{10} = 1024$ %如果指數不止一位,要使用`{}`括起來
```
## 打印字體配置文件
conTeXt 使用以下方式定義字體:
```
\definefont %使用此命令定義字體。這三句可以寫在一行
[Song] %第一個參數為字體別名
[{`name`:Adobe Song Std*zh} at 14pt] %字體定義:使用14號的 Adobe 中文宋體
%`name`使用字體名稱;`file`使用字體文件
\starttext
\Song 我使用的是 Adobe 宋體 %使用字體別名指定該行體樣式
\stoptext
```
使用這種方式指定字體比較繁瑣,推薦建立一個打印字體配置文件(`typescript`),如 `zhfonts.tex` (如何使用 `zhfonts.tex` 參閱[“字體設置”一節](ch29s06.html#context-font "字體設置"))
`.tex` 源文件中使用以下命令定義字體:
```
\usetypescriptfile[zhfonts] %加載打印字體配置文件 `zhfonts.tex`
\usetypescript[myscript] %使用打印字體配置文件中定義打印字體的腳本 `myscript`
\setupbodyfont[myfont,ss,11pt] %使用腳本預定義的 `myfont` 字體: 字型為 `ss` ,大小為 11pt
```
通常有三種字型的字體:襯線、非襯線、等寬,襯線字型筆劃起始和結束的地方有一些修飾,非襯線字體筆劃為無修飾的線條,等寬字體所有的字符寬度相同
而一種字體,無論屬于何種字型,都可能有幾種樣式,例如:普通、粗體、斜體、斜粗體
我們在打印字體配置文件中,首先定義字型,然后為每種字型定義樣式。
在 `zhfonts.tex` 文件中定義打印字體 `myfont` 的字型:
```
\starttypescript[myscript] %定義打印字體的腳本為 `myscritp`
\definetypeface[myfont][ss][sans][zhfont] %將 `myfont` 的字型 `ss` 定義為 `[sans][zhfont]`(非襯線)
\stoptypescript %結束定義
```
`[sans][zhfont]` 為非襯線字型,給它指定各種樣式,在上面定義之前寫入以下配置:
```
\starttypescript [sans][zhfont] %定義字型 `[sans][zhfont]`
\definefontsynonym %此命令定義字體別名
%定義該字型的普通樣式 `[Sans]` 為 `[ZhSans]`,備用字體為 [fallbacks=WesternSans]
[Sans][ZhSans][fallbacks=WesternSans]
\definefontsynonym
%定義該字型的粗體樣式 `[SansBold]` 為 `[ZhSansBold]`,備用字體為 [fallbacks=WesternSansBold]
[SansBold][ZhSansBold][fallbacks=WesternSansBold]
\definefontsynonym
%定義斜體
[SansItalic][ZhSansItalic][fallbacks=WesternSansItalic]
\definefontsynonym
%定義斜粗體
[SansBoldItalic][ZhSansBoldItalic][fallbacks=WesternSansBoldItalic]
\stoptypescript
```
上一步定義使用別名定義別名,寫起來比較麻煩,但是卻可以選擇備用字體。接下來將各種樣式定義為實際的字體:
```
\starttypescript [sans][zhfont]
%定義四種樣式實際使用的字體
%`name`使用字體名稱;`file`使用字體文件
%`[features=zh]` 字體使用 `zh` 屬性,還未定義
\definefontsynonym
[ZhSans][name:AdobeKaitiStd-Regular][features=zh]
\definefontsynonym
[ZhSansBold][name:AdobeHeitiStd-Regular][features=zh]
\definefontsynonym
[ZhSansItalic][name:AdobeKaitiStd-Regular][features=zh]
\definefontsynonym
[ZhSansBoldItalic][name:AdobeHeitiStd-Regular][features=zh]
%定義備用字體的四種樣式
\definefontfallback
[WesternSans][name:TeXGyreAdventor-Regular][0x0000-0x0400][force=yes]
\definefontfallback
[WesternSansBold][name:TeXGyreAdventor-Bold][0x0000-0x0400][force=yes]
\definefontfallback
[WesternSansItalic][name:TeXGyreAdventor-Italic][0x0000-0x0400][force=yes]
\definefontfallback
[WesternSansBoldItalic][name:TeXGyreAdventor-BoldItalic][0x0000-0x0400][force=yes]
\definefontsynonym
[Sans][ZhSans][fallbacks=WesternSans]
\definefontsynonym
[SansBold][ZhSansBold][fallbacks=WesternSansBold]
\definefontsynonym
[SansItalic][ZhSansItalic][fallbacks=WesternSansItalic]
\definefontsynonym
[SansBoldItalic][ZhSansBoldItalic][fallbacks=WesternSansBoldItalic]
\stoptypescript
```
最后,定義字體屬性 `zh`
```
\definefontfeature[zh][mode=node,script=hang,lang=zhs]
```
完整的 `zhfonts.tex` 文件,參閱[“字體設置”一節](ch29s06.html#context-font "字體設置")
- 開源世界旅行手冊
- 授權
- 致謝
- 序言
- 更新紀錄
- 導讀
- 如何寫作科技文檔
- 部分?I.?氣候
- 第?1?章?GUI? CLI?
- 第?2?章?UNIX 縮寫風格
- 第?3?章?版本號的迷霧
- 第?4?章???Vim 還是 Emacs
- 第?5?章???DocBook 還是 TeX
- 第?6?章?完全用 Gnu/Linux 工作
- 第?7?章?病毒
- 第?8?章?磁盤 分區
- 第?9?章?文件系統
- 第?10?章???發行版介紹
- 第?11?章???編程語言
- 第?12?章?無根的根:無名師的 Unix 心傳
- 部分?II.?地理
- 第?13?章?基礎知識
- 第?14?章?命令系統
- 第?15?章?基本系統
- 第?16?章?軟件管理
- 第?17?章?核心工具集
- 第?18?章?編譯工具鏈
- 第?19?章?圖形界面
- 第?20?章?國際化
- 第?21?章???內核
- 第?22?章?Grub
- 第?23?章?服務器
- 第?24?章?Vim 編輯器
- 第?25?章?Emacs 入門
- 第?26?章?正則表達式
- 第?27?章?docbook 指南
- 第?28?章?Git 版本控制系統
- 第?29?章?ConTeXt 入門指南
- 部分?III.?景觀
- 第?30?章?終極 Shell -- ZSH
- 第?31?章?完美工作站 Archlinux
- 第?32?章?組織你的意念:Emacs org mode
- 第?33?章???Zsh+screen
- 第?34?章???gentoo stage3
- 第?35?章???硬件問題
- 第?36?章???網絡設置
- 第?37?章???自制 LiveCD
- 第?38?章?awesome
- 第?39?章?openbox 工作環境
- 第?40?章???Emacs muse
- 第?41?章???寫作工具鏈
- 第?42?章?使用 lftp
- 第?43?章???Firefox 使用技巧
- 第?44?章???FVWM
- 部分?IV.?地質
- 第?45?章?Unix
- 第?46?章???Gnu
- 第?47?章?軟件業自由之神——Richard Stallman
- 第?48?章?Linux
- 第?49?章?GNOME與KDE的戰爭
- 第?50?章???Vim Emacs
- 第?51?章???年代紀
- 第?52?章?我的選擇
- 第?53?章???補遺