跳转至

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
%%%%%%%%%%%%% 使用模块(保持顺序) %%%%%%%%%%%%%
% 竖排
\usemodule[vtypeset]


% 标点压缩与支持
\usemodule[zhpunc][pattern=kaiming, spacequad=0.5, hangjian=false]
% 
% 四种标点压缩方案:全角、开明、半角、原样:
%   pattern: quanjiao(default), kaiming, banjiao, yuanyang
% 行间标点(转换`、,。.:!;?`到行间,pattern建议用banjiao):
%   hangjian: false(default), true
% 加空宽度(角):
%   spacequad: 0.5(default)
% 
% 行间书名号和专名号(\bar实例):
%   \zhuanmh{专名}
%   \shumh{书名}


% 夹注
\usemodule[jiazhu][fontname=tf, fontsize=10.5pt, interlinespace=0.2em]
% default: fontname=tf, fontsize=10.5pt, interlinespace=0.08em(行间标点时约0.2em)
% fontname和fontsize与\switchtobodyfont的对应参数一致
% 夹注命令:
%   \jiazh{夹注}

大体而言,目前已经实现中文排版的常见功能(包括竖排),可以尝试用于生产性的中文排版。如有问题和新需求,本人愿意支持。请注意,以上并非保证!

已知问题:

  • 较短的双行夹注有时过于稀疏;
  • 官方支持字符间断行和拉伸的脚本hanzi有个别错误,我可以提供修正后的版本(日后会提交官方)。

效果图#

竖 开明#

竖开明大学.jpg

竖 半角#

竖半角大学.jpg

竖 半角 行间#

竖半角行间大学.jpg

横 开明#

竖半角行间大学.jpg

耐压测试#

横 原样#

横原样庄子.jpg

横 全角#

横全角庄子.jpg

横 全角 空0.3角(默认0.5)#

横全角庄子0.3.jpg

横 开明#

横开明庄子.jpg

横 半角#

横半角庄子.jpg

评论