V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zxgngl
V2EX  ›  分享发现

Markdown 的设计是有很多问题的。这里收集一些想要代替或者有可能代替 Markdown 语法的尝试。

  •  2
     
  •   zxgngl · 2016-02-01 16:03:59 +08:00 · 5208 次点击
    这是一个创建于 3216 天前的主题,其中的信息可能已经有所发展或是发生改变。

    收集的目的不是推荐给大家这些新语法,而是收集一些设计灵感,等有一天发布一个比 Markdown 好的,具有 XML 语义的好语法。

    51 条回复    2016-02-03 14:31:13 +08:00
    zxgngl
        1
    zxgngl  
    OP
       2016-02-01 16:05:52 +08:00   ❤️ 1
    Scribble: The Racket Documentation Tool
    http://docs.racket-lang.org/scribble/

    它对直接嵌入 Lisp 代码比较友好:

    (racketblock
    (define (loop x)
    (loop (not x))))
    zxgngl
        2
    zxgngl  
    OP
       2016-02-01 16:09:17 +08:00
    Pandoc
    https://github.com/jgm/pandoc/wiki/Pandoc-vs-Multimarkdown

    在 Markdown 的基础上加了一些特性。
    zxgngl
        3
    zxgngl  
    OP
       2016-02-01 16:10:58 +08:00
    SexpCode - Towards a Better BBCode
    http://cairnarvon.rotahall.org/misc/sexpcode.html
    http://cairnarvon.rotahall.org/2010/05/25/towards-a-better-bbcode/

    例子:

    {b This text is bold. {i This text is italic and bold.}}
    {b.sup*2.i Way to be a dick, {sub*2.u.o dick}.}
    soli
        4
    soli  
       2016-02-01 16:18:38 +08:00   ❤️ 6
    Markdown 是给人看的。你说的这些不是。
    zxgngl
        5
    zxgngl  
    OP
       2016-02-01 16:24:58 +08:00
    NEST -- Notation for Expressing Structured Text
    http://www.trinhhaianh.com/NEST.html

    例子:
    \div [id="main" class="long article"] < ... >

    NEST 与 XML 支持完全一样的语义,并且同时支持依赖空格的 layout 语法和不依赖空格的 <...> 语法。
    zxgngl
        6
    zxgngl  
    OP
       2016-02-01 16:52:52 +08:00
    Common Lisp inspired syntax - simple to read like Markdown, but that has a stricter syntax
    http://lists.suckless.org/dev/1008/5703.html

    (h1
    A heading)
    (p
    This is (strong awfully) nice.)
    (h2
    Another heading)
    zxgngl
        7
    zxgngl  
    OP
       2016-02-01 16:58:45 +08:00
    @soli 其实,能不能给人看是取决于人的。乐谱对于乐师来讲就等于音乐,她们可以看着乐谱头脑里自动播放音乐;对于不懂音乐的人来讲,乐谱就是蝌蚪群:)当然,我们想设计一种简单的语法,尽可能方便人很快读懂,如果复杂成 XML 那样的话倒还不如直接用 XML 好。
    zxgngl
        8
    zxgngl  
    OP
       2016-02-01 17:08:46 +08:00
    Markdown 是有它的问题的,斜体、粗体、标题的语法比较直观,但链接和图片就不那么好了。

    多数情况下,用 Markdown 写的文档是要被“渲染”一下才会被看到的,这也是为什么那么多实时渲染的 Markdown 编辑器那么流行。如果, MD 文档最终是要被渲染的,那就解决了是不是易读的问题。是不是易写,也是 MD 的一个问题。举一个“引用”的例子:

    引用一段话, Markdown 里要这么写:

    > The overriding design goal for Markdown's
    > formatting syntax is to make it as readable
    > as possible. The idea is that a
    > Markdown-formatted document should be
    > publishable as-is, as plain text, without
    > looking like it's been marked up with tags
    > or formatting instructions.

    不如这么写容易:

    (quote
    The overriding design goal for Markdown's
    formatting syntax is to make it as readable
    as possible. The idea is that a
    Markdown-formatted document should be
    publishable as-is, as plain text, without
    looking like it's been marked up with tags
    or formatting instructions.)

    如果需要经常改动的话,用 Markdown 就更头疼了。
    9hills
        9
    9hills  
       2016-02-01 17:54:53 +08:00
    rst 其实不错
    Tink
        10
    Tink  
       2016-02-01 17:55:58 +08:00
    markdown 蛮好用的,现在只需要一个能控制图片大小的参数就完美了
    conansix
        11
    conansix  
       2016-02-01 18:01:38 +08:00
    @zxgngl 在用过的 Markdown 编辑器中,引用都可以只在第一行写一个>,第二行及之后不用写,默认是引用部分,比如:
    > The overriding design goal for Markdown's
    formatting syntax is to make it as readable
    as possible. The idea is that a
    Markdown-formatted document should be
    publishable as-is, as plain text, without
    looking like it's been marked up with tags
    or formatting instructions.
    yangxiongguo
        12
    yangxiongguo  
       2016-02-01 18:14:51 +08:00 via iPhone
    所以有那么多版本的 markdown 。
    jamesxu
        13
    jamesxu  
       2016-02-01 18:36:53 +08:00 via iPhone
    asciidoc
    chloerei
        14
    chloerei  
       2016-02-01 18:45:10 +08:00   ❤️ 1
    zxgngl
        15
    zxgngl  
    OP
       2016-02-01 18:49:43 +08:00
    @Tink Markdown 设计之初就是把自己定位为 HTML 的一个小子集,确实有好多功能都没有考虑进去,现在强加进去只能是各种缝缝补补的 hack ,缺乏设计上的一致性。
    zxgngl
        16
    zxgngl  
    OP
       2016-02-01 18:57:09 +08:00
    zxgngl
        17
    zxgngl  
    OP
       2016-02-01 19:00:09 +08:00
    总结一些 Yin 的文章:

    1 ) Markdown 基于空格的格式化容易产生不易察觉的错误;
    2 )某些特殊字符,如“*”,选择的不合理;
    3 )表达力有限(是 HTML 的小子集);
    4 )引入了太多的语法,不好记,也没有一致性。
    zxgngl
        18
    zxgngl  
    OP
       2016-02-01 19:01:12 +08:00
    另外,有一个需求,可能很多软件工作人员会有,就是在嵌入的代码中着重强调某个 statement (比如把这个 statement 变成斜体),这个需求好像在 Markdown 中是没有办法实现的。
    zxgngl
        19
    zxgngl  
    OP
       2016-02-01 19:13:40 +08:00
    我想我得说明一下。我曾经是 Markdown 的喜爱者,把 Markdown 当作主要记笔记的格式用过好长一段时间,我花钱买过正版的 MultiMarkdown Composer ,后来作者升级了软件需要再付费后我就很少用了。
    sox
        20
    sox  
       2016-02-01 19:17:33 +08:00 via Android
    随便一个人就能说 Markdown 有问题 😂😂😂
    Aaron 不哭
    zxgngl
        21
    zxgngl  
    OP
       2016-02-01 19:27:00 +08:00
    @chloerei @jamesxu 谢谢~ 但我觉得 asciidoc 还是对 Markdown 的补充和更正。

    这是 AsciiDoc 的 cheatsheet ,我觉得还是语法太多,对于新手还是要话半天到一天才能感觉自己“都会了”:
    http://powerman.name/doc/asciidoc
    cnnblike
        22
    cnnblike  
       2016-02-01 19:27:44 +08:00
    Madoko 的设计感觉还好啊?
    zxgngl
        23
    zxgngl  
    OP
       2016-02-01 19:51:31 +08:00
    zxgngl
        24
    zxgngl  
    OP
       2016-02-01 19:56:56 +08:00
    Markdown 还有一个问题,就是由 Markdown 文档到 HTML ( XML )文档的转换是单向的,没有办法可靠地从 HTML 文档生成唯一的 Markdown 文档。

    这个问题对于大多数使用场景来说都不是大问题,但还是先记在这里吧。
    zxgngl
        25
    zxgngl  
    OP
       2016-02-01 20:06:23 +08:00
    @sox 评论里面的每一个建设意见或者推荐的 Markdown 的可替代产品都是对 Markdown 存在的问题的肯定。 Markdown 是 11 年前设计的,有些不好的地方很正常的。难道因为 Aaron Swartz 参与了设计我们就不能挑这个设计的问题了吗?我们不能因为某个可敬的人参与了某个软件的设计就对这个软件全盘接受。
    FrankFang128
        26
    FrankFang128  
       2016-02-01 20:07:18 +08:00
    Markdown 的痛点就两个:表格和图片
    proudzhu
        27
    proudzhu  
       2016-02-01 20:12:55 +08:00 via Android
    为啥不用 cmark ?
    bengol
        28
    bengol  
       2016-02-01 20:36:40 +08:00 via Android
    所以为什么 markdown 会流行起来呢
    Tardis0127
        29
    Tardis0127  
       2016-02-01 21:03:26 +08:00 via iPhone
    一直不喜欢 MD 的设计,打算抽空设计一个自己喜欢的自用
    zxgngl
        30
    zxgngl  
    OP
       2016-02-01 21:05:26 +08:00
    @conansix 谢谢。
    zxgngl
        31
    zxgngl  
    OP
       2016-02-01 21:05:49 +08:00
    @FrankFang128 解决这两个痛点就要引入难看的新语法,或者重新设计一个更好的格式。

    应该不止两个, 10 楼、 17 楼、 18 楼都是痛点。
    zxgngl
        32
    zxgngl  
    OP
       2016-02-01 21:10:52 +08:00
    @bengol 流行的东西并不一定是因为设计的好。 MySQL 比 PostgreSQL 流行,但没有后者设计得好; C#比 Java 设计得好,但没有后者的生态大;天涯论坛用户多,但没有 v 站界面清爽……

    有时候,好东西流行起来是要靠运气和资本做推手的。
    zxgngl
        33
    zxgngl  
    OP
       2016-02-01 21:13:12 +08:00
    @proudzhu 谢谢。


    CommonMark - A strongly defined, highly compatible specification of Markdown
    http://commonmark.org/

    CommonMark 尝试给 Markdown 的众多不兼容的版本做一个统一的标准,有点像 Common Lisp 之于 Lisp 。
    zxgngl
        34
    zxgngl  
    OP
       2016-02-01 21:37:14 +08:00
    Improved commenting with Markdown
    https://github.com/blog/2097-improved-commenting-with-markdown

    “ The new toolbar allows you to do so without learning Markdown syntax.”

    Github 设计一个新的 Toolbar 来帮助人们避免使用 Markdown 语法。
    sox
        35
    sox  
       2016-02-01 22:21:46 +08:00
    @zxgngl 是的,你加一个 IMO 好些。
    matsuijurina
        36
    matsuijurina  
       2016-02-01 22:43:30 +08:00 via Android
    只能说 markdown 对于表格绘制那部分做得太糟糕了。随便想一种简化表格编写的语法,都比 markdown 傻傻用字符画表强。
    k9982874
        37
    k9982874  
       2016-02-01 23:19:28 +08:00 via iPhone
    我觉得 md 的简单就是它最强的地方,简单到让人感觉不到规则的存在,只要专注于文字,这也是这么多人喜爱的原因。
    libook
        38
    libook  
       2016-02-01 23:42:12 +08:00
    我用 HTML ,写 MarkDown 的时候也是。。。
    造轮子最苦恼的一点是如何推广并发展成为通用的标准。。。
    可以看一看 https://www.zybuluo.com/mdeditor 他们都用了哪些 MD 的扩展语法,感觉会对你有帮助。。。或者你会发现轮子已经够用了。。。
    zxgngl
        39
    zxgngl  
    OP
       2016-02-01 23:50:18 +08:00
    @k9982874 虽然表达力远远不如 HTML , Markdown 还是有好多规则的,全记下来可能还要上手好几次才行。新手至少要把这一页都记下来: http://commonmark.org/help/
    zxgngl
        40
    zxgngl  
    OP
       2016-02-01 23:58:36 +08:00
    @libook 谢谢。这个站好漂亮。

    确实,由于 Markdown 表达力欠佳,要想达到丰富的现实效果还是需要像这样在 Markdown 里面插入 HTML 代码:

    ```
    > 请保留此份 Cmd Markdown 的欢迎稿兼使用说明,如需撰写新稿件,点击顶部工具栏右侧的 <i class="icon-file"></i> **新文稿** 或者使用快捷键 `Ctrl+Alt+N`。
    ```
    scarlex
        41
    scarlex  
       2016-02-02 00:14:54 +08:00
    楼主为啥不去 github 搞个 repository 来管理这些资源?
    zxgngl
        42
    zxgngl  
    OP
       2016-02-02 00:17:56 +08:00
    我比较倾向于认为一个人使用的语言会限制她的思维,如果使用一种高度受限的格式可能也会限制使用这种格式所书写的文字的表达力。
    zxgngl
        43
    zxgngl  
    OP
       2016-02-02 00:22:35 +08:00
    @scarlex 因为我们讨论的目的是找出 Markdown 以及相似的文本标记语言的问题,然后激发人们设计一个更好的文本标记语言出来。在这里贴各种资源保存在这里就挺好的,不需要再保存一份了。
    CodingPuppy
        44
    CodingPuppy  
       2016-02-02 08:44:05 +08:00
    图片、链接、表格
    chemzqm
        45
    chemzqm  
       2016-02-02 08:57:19 +08:00   ❤️ 1
    Markdown 只是一个文本到 html 的标准,标准的好处不在于提供多么强大易用的功能,而是不会轻易改变,减少不必要学习的成本。
    事实上只要是人类发明的工具都会存在不可避免的局限,例如:编程语言,操作系统,网络系统,编辑器,等等。
    设计角度上,不同的需求总是导致矛盾的出现,例如你追求功能强大就往往会牺牲自身的简单性,
    至于说谁好谁坏,首先要依据你自己的实际情况,
    shunia
        46
    shunia  
       2016-02-02 10:09:48 +08:00
    列举的语言挺有帮助的,收藏。
    zjuster
        47
    zjuster  
       2016-02-02 10:24:15 +08:00
    @zxgngl Markdown 出现的目的就是将非常不适合人类阅读的 HTML 语法简化,并保留相互转换的可能。你列举的语言都很有用,但是目的和用途和 Markdown 是不一样的。
    Simple is hard.
    soli
        48
    soli  
       2016-02-02 10:43:09 +08:00
    @zxgngl 那我再修正一下:“ Markdown 是给普通人看的。你说的这些不是。”

    作者所说的易读是在渲染前就易读。
    kurtis
        49
    kurtis  
       2016-02-02 11:24:12 +08:00
    @chemzqm 其实就是这个理
    JamesRuan
        50
    JamesRuan  
       2016-02-03 06:20:14 +08:00   ❤️ 1
    Markdown 不是用来渲染的,而是为了不渲染也能看的。

    https://www.zhihu.com/question/39290341/answer/84469450

    我这个答案里面提到的自己造的轮子,就是一种类似 BBCode 或者类似 TeX 的标记语言,用于快速地些一些简单的 HTML ,特点是鼓励完全语义化,语义和样式分离。
    zxgngl
        51
    zxgngl  
    OP
       2016-02-03 14:31:13 +08:00
    @JamesRuan 非常感谢~

    新版标记代码完全手册
    http://jamesruan.github.io/ebony/ml.html

    真漂亮!

    -----------------------

    Markdown 设计的本意确实是想做到不渲染也能看的,并由此导致了它表达力的局限。但在如今的 Web 上,从 Github 到 StackOverflow ,从简书到 V2EX ,所有的用 Markdown 格式写下的文字都是以渲染过的形式展示出来的,几乎很少见到直接把 Markdown 标记过的格式显示出来。毕竟 Markdown 是 10 多年前设计的,现在的 Web 已经大变样了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4313 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 05:34 · PVG 13:34 · LAX 21:34 · JFK 00:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.