Knuth-Plass断行算法
段落书写器(paragraph composer)一次排一整段,比每次排一行的单行书写器(single-line
composer)排版更加美观。此页面加载了WebAssembly版的Knuth-Plass断行算法,支持Unicode中英文混排,中文标点避头避尾和标点悬挂等。参考了W3C《中文排版需求》和Unicode
Standard AnneX 14以正确实现排版禁则。
使用说明
控制命令的说明
以下三个命令可以在格式控制命令(见下节)的大括号中使用。
-
盒子(box):\hbox{}
空的水平盒子,尺寸为0,大括号中不应填入任何内容。
-
间隔(glue):\hskip<glue>
其中<glue> = <number> [plus <number> [minus <number>]]
,<number>
为浮点数,分别是<间隔宽度>plus<间隔伸展量>minus<间隔压缩量>。
-
断行代价(penalty):\penalty<number>
插入断行点,\penalty10000
将禁止断行。
格式控制命令
\everyhbox{<token list>}
将控制命令插入到每个水平盒子(box)前。
\everypar{<token list>}
将控制命令插入到整个段落前,\indent请通过此命令实现。
\spaceskip=<glue>
空格和空白字符对应的间隔(glue)。
\leftskip=<glue>
左边距,插入到新的一行前的间隔(glue)。
\rightskip=<glue>
右边距,插入到一行结尾处的间隔(glue)。
\parfillskip=<glue>
作为段落结尾,插入到段落最后的间隔(glue),一般设置为可伸展至略小于末行长度,以避免末行孤字。如果设置为空,即0plus0minus0,整段文字将排成精确的矩形。
\CJKskip=<glue>
汉字之间的间隔(glue)。
\xCJKskip=<glue>
汉字和西文之间的间隔(glue)。
\everyXA{<token list>}
将控制命令插入到每个避尾的中文标点前。
\XAfillskip=<glue>
避尾中文标点字符后的间隔(glue)。
\everyXB{<token list>}
将控制命令插入到每个避头的中文标点前。
\XBfillskip=<glue>
避头中文标点字符后的间隔(glue)。
\AtBeginXA{<token list>}
将控制命令插入到整组(一个及以上)连续的避尾中文标点前。
\AtEndXB{<token list>}
将控制命令插入到整组(一个及以上)连续的避头中文标点后。