ConTeXt简介和中文排版效果
欢迎加入本人建的"LuaTeX ConTeXt 学习互助"群:431714622,互助学习LuaTeX ConTeXt LaTeX相关技术,以及通过Lua、Python实现格式化文本、数据的自动排版。
ConTeXt是什么#
ConTeXt是一种TeX排版格式和宏包。TeX及其衍生的排版格式/宏包通常用于排制可能包含数学公式的高质量出版物,很多科学期刊指定了投稿的TeX模板。很多人使用纯TeX,但最流行的是LaTeX格式/宏包;LaTeX有相当完善的中文支持。
ConTeXt继承了TeX的很多传统,兼容纯TeX格式,但它的目标是排制高质量的通用文档。
ConTeXt目前通常使用LuaTeX(目前的后继者叫LuaMetaTeX,简称LMTX)作为引擎,ConTeXt和LuaTeX是同一个团队开发的,有活跃的社区。
你可以在排版文档中使用ConTeXt、TeX和第三方宏包控提供的命令,以及自己定制的命令,来控制文档的排版效果;这样的排版文档也叫排版脚本。你还可以在排版脚本中插入Lua代码,处理数据,干预引擎的行为。
需要重复使用、分享的自制命令和Lua代码,可以制成模板和模块。(下文会说到的,本人所做的ConTeXt中文支持,即是模块的形式。)
你也可以在Lua脚本中通过LuaTeX接口使用ConTeXt和TeX命令(实际上是在后台生成包含ConTeXt和TeX命令的排版脚本)完成排版,这叫ConTeXt Lua文档(CLD,ConTeXt Lua Document)。这就是说,你既可以使用熟悉的TeX系命令和资源,还可以使用灵活的Lua语言,实现自动排版。
最后,你几乎可以完全抛开ConTeXt和TeX命令,而在Lua端直接使用LuaTeX,比如生成引擎需要的结点列表数据等,完成排版。这样,你就可以在LuaTeX的基础上改造出一个特定用途的排版应用。本主题参考TeX_without_TeX。
ConTeXt适合用来做什么#
就排版内容来说,ConTeXt+LMTX特别适合:
- 排制结构化文档(structured document),如产品目录、数据表、图表、辞书、试卷/练习题、格式规范的图书(尤其是丛书/套书)、卡片……
- 自动化排版,比如自动替换内容,随时根据内容变动更新排版,构建自动排版/网站后台排版流水线……
- 精细排版,比如根据实时数据控制特定字符的格式
- 多语言排版
所谓“结构化文档”“格式规范的图书”跟复杂程度无关,而重点在于文档结构对应的排版格式,是否都可以转述为数量有限的、可重复使用的排版命令,就是说,重复利用率越高越有价值,即越接近“自动化排版”。
ConTeXt难学吗#
ConTeXt用户
- 需要学习ConTeXt格式、命令,可以通过官网学习,教程可以看not-so-short-introduction-to-context(本人有汉译计划)。对技术有一些好爱的图书编辑可以做到
- 如果要精细排版,可能要学一些TeX知识
- 如果要实现自动化排版、通过Lua控制排版引擎,则需要学习Lua、CLD,以及LuaTeX/LuaMetaTeX
中文支持怎么样#
我做了三个支持ConTeXt+LMTX中文排版的模块(链接为GitHub库):
- 中文标点支持模块zhpunc,支持全角、半角、开明等常见标点样式,行端标点凸排/悬挂,以及竖排时可能用到的行间标点。此模块最初基于liyanrui/zhfonts,谨致谢忱!
- 竖排模块vertical-typesetting
- 双行夹注模块jiazhu
下面是三个模块的设置选项,可以大体看出支持哪些功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
大体而言,目前已经实现中文排版的常见功能(包括竖排),可以尝试用于生产性的中文排版。如有问题和新需求,本人愿意支持。请注意,以上并非保证!
已知问题:
- 较短的双行夹注有时过于稀疏;
- 官方支持字符间断行和拉伸的脚本
hanzi
有个别错误,我可以提供修正后的版本(日后会提交官方)。