GitHub恶作剧般地搞乱Markdown - 把666改成DCLXVI

780

我的 GitHub 存储库 里只有一个 readme 文件。在这个 readme 文件中,我本地写了这个:

Factoids:
 - There are about six different ways to do everything in Forked.
 - There are actually six different ways to enter loops.
 - There are six directionals and six I/O commands.
 - 666. ha.

重点在最后一行。

Github决定展示的是不是666

dclxvi

DCLXVI是罗马数字中666的表示方式。

这真的让我很害怕。 我的本地文件和原始文件都显示为666

Github到底在做什么,为什么无序列表的缩进混乱? 这是复活节彩蛋,还是一些撒旦教的bug?


15
你尝试过-5.whatever吗?如果我没看错的话,它应该会变成·V whatever - Hans Koch
8
刚刚测试了一下,所有数字都转换成了罗马数字:https://github.com/NoahCristino/Forked/tree/48a2fd5bbbec551ab3fa67c06e3debd8071e9955 - Noah Cristino
27
使用连字符作为项目符号在标准的 Markdown 中是常见做法,对吧? - ESR
16
嵌套列表符号不也是标准 Markdown 吗? - user253751
4
不要担心实际的拉丁数字,那个数字可能根本不意味着常见理解,因为有翻译错误。 - user1531971
显示剩余11条评论
3个回答

495
这似乎被Github/Markup issue 991所跟随,其中在有序子列表中,十进制数字会自动转换为罗马数字。

I have found the cause of problem. It is CSS

This is the expected way for nested ordered lists to render in HTML.

This is not expected in HTML. https://jsfiddle.net/tf5jtv8s

We don't make any modifications to the default HTML behavior.

ol ol,ul ol{list-style-type:lower-roman}

I don't know CSS but my understanding is that this is the cause of problem. I can get expected result by disabling CSS. (I am from my mobile so I can't use browser inspector)

如 "GitHub Flavored Markdown的正式规范" 中所述,GitHub markdown规范GFM:GitHub Flavored Markdown规范是建立在CommonMark规范之上的。

正如Tommi Kaikkonen他的回答中提到的那样,有序列表是因为666后面跟着一个点。请参见GFM规范第5.2节

第6.1节所述,任何ASCII标点符号字符都可以使用反斜杠进行转义,以避免出现问题。
也就是说:

- 666\. ha.

(正如ForNeVeR答案中明确展示的那样)

这就是为什么GitHub的README markdown中将666这个数字改为罗马数字的原因。


Mike Lippert 评论道:

那个列表中的第一个元素应该显示为i而不是dclxvi
Markdown有序列表忽略实际使用的数字,按顺序编号,我没有看到可以改变这一点的方法。

然而,不:它显示为dclxvi,因为生成的HTML代码为<ol start="666">,这与GFM规范一致:

如果列表项是有序的,则还会分配起始号码,基于有序列表标记

(这里,“666”是有序列表标记)

Mike补充道:

@VonC对于在此处的其他任何人,以下是来自VonC文档链接的另一个有用摘录:

“有序列表的起始数字由其初始列表项的列表号确定。后续列表项的数字将被忽略。”


同样的,为什么间距混乱了?在你的回答中我没有注意到这一点。
你在无序列表项
  • 中使用了有序列表

      <ul>
        <li>
          <ol start="666">
            <li>ha.</li>
          </ol>
        </li>
      </ul>
      

      GitHub CSS 规则包括:

      .markdown-body ol {
          padding-left: 2em;
      }
      

      如果你输入3em,你将得到
      正确的填充
      而不是
      错误的填充


  • 10
    我猜测是因为带有小数点的数字转化成有序列表后,会与无序列表项(减号)一样被放在同一行上。通常情况下,<li> 和 <ol> 不应该在同一行呈现... - VonC
    @MDXF 我已编辑答案,提供了导致不正确间距的确切 CSS 规则。 - VonC
    2
    实际上我认为输出结果或者是我从未听说过的markdown增强功能,或者是一个bug。是的,_- .666_ 是一个有序子列表,但是,它是该列表中的第一个元素,因此应该显示为_i_而不是_dclxvi_。Markdown有序列表忽略实际使用的数字并按顺序编号,我还没有看到改变这一点的方法。 - Mike Lippert
    2
    @MikeLippert 不是的,它显示为dclxvi,因为生成的HTML代码是<ol start="666">,这与https://github.github.com/gfm/#list-items一致:“如果列表项是有序的,则还会分配一个起始数字,基于有序列表标记”(这里,“666”是有序列表标记)。 - VonC
    @user13267 或 CMXCI - Pharap
    2
    @VonC 谢谢,我之前不知道 github-flavored markdown 的这个增强功能,并且在评论之前没有通过快速搜索找到它。对于其他人来说,这里是 VonC 文档链接中的另一个有用摘录:“有序列表的起始编号由其初始列表项的列表编号确定。后续列表项的编号将被忽略。” - Mike Lippert

    388

    666后面加一个句点会使它成为有序列表标记

    GitHub声明使用罗马数字呈现有序列表标记的CSS:

    ol ol,ul ol {
        list-style-type: lower-roman
    }
    

    使用反斜杠转义句点,即可看到正确的输出。


    89

    虽然其他答案很好地解释了问题的原因,但它们没有给出确切的示例来解决问题。

    而且看起来你已经以一种不完美的方式解决了它,将你的文本替换掉了

    - `666`. ha.
    

    有一个常见的技巧可以避免数字后面的点号被解释成有序列表标记,使其看起来像普通文本:

    - 666\. ha. (this will render as you probably want)
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接