V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
inflationaaron
V2EX  ›  分享创造

写了一个 Jekyll 插件来加空格

  •  
  •   inflationaaron · 2018-02-27 22:52:22 +08:00 via iPhone · 2521 次点击
    这是一个创建于 2469 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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

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

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

    手加空格只能算是对于排版引擎的妥协,我更愿意让程序完成这些操作。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3271 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:45 · PVG 08:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.