ConTeXt中文标点支持插件,支持常用的标点压缩/标点挤压方案,行端标点对齐,以及其他一些功能补强;兼容竖排vtypeset插件。
zhpunc项目是对zhfonts项目的重构,而二者都基于liyanrui/zhfonts项目,谨致谢忱。
- 两种安装方法:
- 按ConTeXt官方指南安装模块文件:
t-zhpunc.mkiv
(入口)和t-zhpunc.lua
,然后使用context --generate
命令更新文件索引 - 将上述文件直接放在编译时的当前路径(通常即排版脚本所在的目录,在vscode环境中即项目根目录);直接使用lua模块时不限定存放位置,但需要自行确保导入位置正确
- 按ConTeXt官方指南安装模块文件:
- 使用时在排版脚本前言中设置如下:
%%%%%%%%%%%%% 使用模块(保持顺序) %%%%%%%%%%%%%
% 竖排
\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{夹注}
可参考test文件夹下样例脚本中的设置(可能使用了夹注jiazhu、竖排vtypeset、标点挤压zhpunc三个模块)。
- 仅在ConTeXt LMTX环境测试。ConTeXt LMTX是与LuaMetaTeX(LuaTeX的后继者)配合使用的、最新的ConTeXt版本。调整后当可用于LuaTeX。可以使用
context --version && luametatex --version
命令查看你的环境版本。 - 如下编译排版脚本:
> context 大学章句.lmtx
- 如果控制台显示中文时有乱码,可用命令临时改变代码页:
> chcp 65001
- 全部缓存、使用实测的标点字模数据,而不是使用预设的比例,以适应不同字体的实际;
- 缓存标点数据
- 用于标点压缩
- 用于行首尾对齐版心(原用预制数据设置字体凸排属性)
- 用于盒子/夹注首尾对齐版心(待定,对窄盒子不利)
- 变“全角标点压缩/挤压”为“半角标点加空”,预制常见的标点加空规则:
- 全角(默认)
- 半角
- 开明
- 原样
- 用户可自定加空宽度(默认0.5角)
- 可收缩一半(待定)
- 支持直排模块
- 模块化
- 行间标点
- 支持
、,。.:!;?
- 支持
- 优化行间书名号和专名号
- 相对字号
- 间断问题
- 自制metapost,头尾留空
- 检查标点压缩与夹注两个模块的加载顺序
- 标题夹注中的标点挤压有误(竖排逗号后的收缩胶未正确调整)
- 新制分行算法,替代官方的
hanzi
- 据条件确定两侧拉伸胶的幅度
- 拓展、校正或覆盖系统的
hanzi
脚本的行为(待定)- 修正两侧收缩胶收缩幅度为实有空白,以防重叠
- 允许用户扩展符号类别(待定),如:
- ☆★○●◎◇◆□
- ㈠㈡㈢⑴⑵⑶⒈⒉⒊ⅠⅡⅢ……
《标点符号用法》 | 重定义 | 配置加空 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
分类 | 独用占位(角) | 形式 | 补充符号 | 语义单元中的位置 | 禁排 | 备注 | 开明(默认) | 全角(国标) | 半角 | 原样^**^ | 行间 |
句末点号 | 1 | 。?! | . | 后 | 行首禁排 | 忽略?! 双用占一,三用占二 的规定,重制统一的标点组占位规则 |
后0.5 | 后0.5 | |||
句内点号 | 1 | ,、;: | 后 | 行首禁排 | 后0.5 | ||||||
后半标号 | 1 | ”’)]〕】》〉 | 」』〗} | 后 | 行首禁排 | 后0.5 | |||||
前半标号 | 1 | “‘([〔【《〈 | 「『〖{ | 前 | 行尾禁排 | 前0.5 | |||||
省略号 | 2 | …… |
中^*^ | 作为整体 | |||||||
破折号(中后标号) | 2 | —— |
中^*^ | 作为整体 | |||||||
全角连接号(中标号) | 1 | —~ | 中 | 行首禁排 | |||||||
半角连间分(中标号)^***^ | 0.5 | ·-/ | / | 中 | 行首禁排 | / 由首尾禁排 改为行首禁排 |
^^ 实际上,省略号、破折号可出现在语义单元的前、中、后各处,但字模占位已经足够宽,两侧不再加空,与“连间分”地位相当。
^^ 原样:仅处理不合规的标点(不处理字体本身的问题),如破折号不连续。
^^ 暂不处理-/
(通常不影响使用)
- 标点字模的占位
- 所有字模均预先调小占位,且居中放置。 除横势标点(
……
——
—
~
-
)按《标点符号用法》规定占位,其余标点一律占0.5角(quad,下同)。 原因是:- 字模占位窄对断行算法、行尾标点对齐有利;
- 居中可简化连用时的定位;
- 所有字模均预先调小占位,且居中放置。 除横势标点(
- 标点组与加空
- 各类标点加空配置见上表中的“配置加空”列;
- 语义位置相同的相邻几个标点为一个标点组。如
”〉》
为一个后标点组; - 前标点组,根据最前一个标点,在组前加空。如:
- 全角配置:
囗囗␣《〈“囗囗
- 开明配置:
囗囗《〈“囗囗
- 全角配置:
- 后标点组,根据最后一个标点,在组后加空。如
- 全角配置:
囗囗”〉》␣囗囗
囗囗!〉》␣囗囗
囗囗〉》!␣囗囗
囗囗?!␣囗
囗囗?!!␣囗
- 开明配置:
囗囗”〉》囗囗
囗囗!〉》囗囗
囗囗〉》!␣囗囗
囗囗?!␣囗
囗囗?!!␣囗
- 全角配置:
- 中标点组(通常是单个),根据最前一个标点,在组前加空;根据最后一个标点,在组后加空。如:
- 全角配置:
囗囗·囗囗
囗囗/囗囗
囗囗~囗囗
囗囗——囗囗
- 开明配置:
囗囗·囗囗
囗囗/囗囗
囗囗~囗囗
囗囗——囗囗
- 全角配置:
- 同一个位置(如前标点组与后标点组之间)只加空一次(取最大值)。如:
- 全角配置:
囗囗”〉》␣《〈“囗囗
囗囗”〉》!␣《〈“囗囗
囗囗”〉》,␣《〈“囗囗
- 开明设置:
囗囗”〉》《〈“囗囗
囗囗”〉》!␣《〈“囗囗
囗囗”〉》,《〈“囗囗
- 全角配置:
- 中标点组,前后有标点组时,直接附着与前后的标点组,其间不加空。如:
- 全角配置:
囗囗”·“囗囗
囗囗”·囗囗
囗囗·“囗囗
- 开明设置:
囗囗”·“囗囗
囗囗”·囗囗
囗囗·“囗囗
- 全角配置:
- 默认标准空(固定宽度的胶)占位0.5,可通过设置比例统一调整实际宽度。
- 标点前后加扩展胶,与系统给汉字后加扩展胶的规则一致。
只有行首禁排(禁止符号前断行)、行尾禁排(禁止符号后断行)、不禁排三种(前后可断行)。见上表“禁排”列。 尽量通过官方的scrp-cjk.lua实现。
一律对齐字母实际边界与预设文字边界(盒子边界再刨除缩进)。 尽量通过官方模块实现。
尽量通过官方的scrp-cjk.lua实现。