写了一个 Jekyll 插件来加空格

2018-02-27 22:52:22 +08:00
 inflationaaron

https://www.infl.moe/programming/2018/02/26/jekyll-pangu/

如果有更好的基于 CSS 的方法,求教。

2541 次点击
所在节点    分享创造
6 条回复
Showfom
2018-02-28 02:48:13 +08:00
geelaw
2018-02-28 03:11:19 +08:00
我个人是倾向于(在已经接受手工加空格的 hack 的前提下)在 `` 两边加空格的——在拉丁文本里显然是要加的,这样可以拉丁文本、中日韩文本保持一致。

好了,解决了空白问题,让我们把目光转移到引号、省略号的正确排版吧!

更好看的 66 99 引号需要:在拉丁文本中使用窄样式,在汉字文本中使用宽样式。

更好看的省略号需要:在拉丁文本中靠下,在汉字文本中纵向居中。

我目前解决这个问题的方法是恰当地加上 lang 并用自定义 font-face 专门显示正确的标点。
geelaw
2018-02-28 03:19:23 +08:00
另外 Markdown 并不能真的帮你做到内容和样式分离。

举例子:在法语文本里复杂的标点空格规则下,你必须手写不同的空格来实现正确的排版,比如 Bonjour !

完整规则:数字里的分隔符无空格;配对标点中,括号内侧无空格,引号内侧有非断开空格;冒号、分号、问号、叹号前面有一个非断开空格;逗号、句号、省略号、冒号、分号、问号、叹号后面有一个空格,除非紧跟着关闭括号或到达段落结尾;由前述规则没有确定为非断开空格的,是可断开空格。

即使是 Word 也只能做到自动插入一个正确的空格(非断开空格)。
geelaw
2018-02-28 03:23:51 +08:00
最后,这类插件有意外插入空白的可能,我觉得更有用的是一个检查器,可以检查出“可能不符合规则的缺少空白”并报告。日积月累,检查算法将能覆盖更多的 corner cases。(如果是自动插入空白,之后没有重新 proofread 的话你可能无法发现意外插入的空白。

我看了一眼,是直接用的 pangu,然而由于我个人总是手加(是的,我就是这么古法)所以无法对效能做出评价。
WildCat
2018-02-28 04:12:32 +08:00
一直手加路过
inflationaaron
2018-02-28 04:24:43 +08:00
@Showfom 我用的就是这个库的 regex,但是默认的标准空格宽度太宽了。

@geelaw 我这个确实是属于一个 hack,理想情况下 Markdown 只承载内容,而样式交给不同的排版引擎来实现。但是现有的浏览器对于中西文间距没有很好的解决方案,text-space 被放到了 level 4,等到猴年马月才可能被实现。

至于标点符号以及更高级的排版需求,我参考过中文排版需求和汉字标准格式这个 CSS + JS 库,它实现了包括首尾标点悬挂、标点挤压等功能。本来是想用一下的,但是跟我现有的格式不太兼容,没仔细调过,等以后有时间了再看一看。

手加空格只能算是对于排版引擎的妥协,我更愿意让程序完成这些操作。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/433304

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX