返回列表 回复 发帖

[ConTeXt] MkIV 中文字体加载与标点排版微调模块

本帖最后由 LiYanrui 于 2009-12-13 09:14 编辑

模块的名字还是叫做 zhfonts,现在具有以下功能:

  1. 加载中文字体,用法见 http://bbs.ctex.org/viewthread.php?tid=54677
  2. 基于字符边界盒对标点间距进行压缩,不依赖具体的字体,也就是说对于大部分中文字体皆可实现较为相似的压缩效果,详细介绍见:http://bbs.ctex.org/viewthread.php?tid=54841
  3. 可以对出现在行首与行尾的标点进行进行向外“伸出”,达到标点与文本左右边界线对齐的效果,所采用的方法*很土*,是通过对 luatex 断行结果进行“膨胀”,将行首/行尾标点挤到边界处,其中值得注意的地方就是又一次用了字符边界盒,基本做到不依赖具体字体;
  4. 当段落的末行较短时,通过压缩段落文本,将其挤压到上一行,但是也偶尔会失效。

  *声明*:这个模块,目前仅仅是一个试验品或者玩具,它对于我这般非专业的排版用户或许有点用处。

模块下载,点这里:

一份测试示例(tex 源文件 + pdf),点这里:
附件: 您所在的用户组无法下载或查看附件
技术潜水员
有提供 simplefonts 或自己写的 typescript 可以单独调用中文标点间距压缩的接口吗?
和这里的有什么区别?
http://bbs.ctex.org/viewthread.php?tid=54841
3# liangzi

那个是压缩标点的初次尝试,没有实现首贴所说的第 3、4条
本帖最后由 views63 于 2009-12-11 08:37 编辑

单独调用中文标点间距压缩解决了,但发现这次的中文标点间距压缩在文档中
含有长的行内公式的时候公式与汉字会挤在一起,而改变字号后有时是正常的。

附件: 您所在的用户组无法下载或查看附件
是处理段落较短的末行时弄的。你的文本里,公式太多,而这些公式的尺寸不太好压缩,所以那些收缩尺寸都加到汉字两侧的 glue 上了。如果你将 zhcnpuncs.lua 文件里的 my_pre_linebreak_filter 函数中的 process_orphan 函数的调用注释掉,就不会挤一起。这种处理方式,在纯文本中是比较有效的。

看来,如果断行算法不是自己实现的,单纯在外围去解决段落较短的末行压缩很难实现。我还是在 post_linebreak_post 里插入黑色块作为警告好了。

我先试试去判断 math 结点。也许可以解决。
5# views63

替换了首贴那个 zhfonts,再试试,我过滤了 math 结点。
另外,在使用那个 zhfonts 模块时,不需要再去写 \setscript[hanzi] 了,因为我在 zhfonts 里已经写了一次。

另外对于 #2 的问题,等再多一些测试,如果勉强可以应付大部分问题,我可以将它独立出来。现在让它跟 zhfonts 在一起,比较方便测试。
这次正常了,单独调用你之前写的 t-zhcnpuncs.tex 放到 zhfonts 目录下就可以用
  1. \usemodule[zhcnpuncs]
  2. \optzhcnpuncs
复制代码
调用,已经算是独立出来了。
本帖最后由 views63 于 2009-12-11 09:16 编辑

9# views63
这样单独调用遇到 \framed 就不能编译了
  1. error: ...exmf-context/tex/context/third/zhfonts/zhcnpuncs.lua:159: attempt to index field 'spec' (a nil value)
  2. .
  3. <inserted text> \par
  4.                      
  5. <to be read again>
  6.                    \vss
  7. <to be read again> \localendstrut \vss
  8.                                        \egroup
  9. l.142 ...意见发到 \from[yanry] (Li Yanrui)。}
  10.                                                   
  11. ?
复制代码
还是等你独立出来再说了
返回列表