GitHub 与 Markdown 搞混了 - 将 666 更改为 DCLXVI

Posted

技术标签:

【中文标题】GitHub 与 Markdown 搞混了 - 将 666 更改为 DCLXVI【英文标题】:GitHub satanically messing with Markdown - changes 666 to DCLXVI 【发布时间】:2017-11-20 23:55:49 【问题描述】:

My GitHub repository 里面只有一个自述文件。在这个自述文件中,我在本地写了这个:

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 是666 的罗马数字。

这真的让我毛骨悚然。我的本地文件和the raw file 都显示666

GitHub 在做什么,为什么未编号列表上的缩进搞砸了?这是复活节彩蛋,还是恶魔?

【问题讨论】:

你试过- 5. whatever 如果我没看错应该变成·V whatever 刚刚测试了自己,所有数字都转换为罗马数字:github.com/NoahCristino/Forked/tree/… @immibis 使用连字符作为项目符号是标准降价不是吗? @EdmundReed 嵌套列表表示法不也是标准降价吗? 也不用担心实际的拉丁数字。由于翻译错误,这个数字可能根本不代表普遍的理解。 【参考方案1】:

后面好像是github/markup issue 991,在有序子列表中,十进制数字自动变成罗马数字。

我找到了问题的原因。是 CSS

这是嵌套有序列表在 html 中呈现的预期方式。

这在 HTML 中是不应该的。 https://jsfiddle.net/tf5jtv8s

我们不对默认的 HTML 行为进行任何修改。

ol ol,ul ollist-style-type:lower-roman

我不知道 CSS,但我的理解是这是问题的原因。我可以通过禁用 CSS 来获得预期的结果。 (我是手机,所以不能使用浏览器检查器)

如“A formal spec for GitHub Flavored Markdown”中所述,GitHub 降价规范 GFM: GitHub Flavored Markdown Spec 构建在 CommonMark Spec 之上。

正如his answer 中提到的Tommi Kaikkonen,排序列表是因为666 后面的点。参见GFM Spec section 5.2。

如section 6.1 中所述,任何 ASCII 标点字符都可以反斜杠转义,以避免此问题。 这意味着:

- 666\. ha.

(如ForNeVeR 的answer 中明确显示的那样)

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


Mike Lippert 评论:

该列表中的第一个元素,因此它应该显示为 i 而不是 dclxvi。 Markdown 有序列表忽略了实际使用的数字和顺序的数字,我还没有看到改变它的方法。

但是没有:显示dclxvi,因为生成的html代码是<ol start="666">,和the GFM specs一致:

如果列表项是有序的,那么它也被分配一个起始编号,基于有序列表标记"

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

迈克补充道:

@VonC 对于其他任何人,这里是 VonC 文档链接的另一个有用摘录:

"有序列表的起始编号由其初始列表项的列表编号确定。后续列表项的编号被忽略。"


另外,为什么间距搞砸了?我没有在你的回答中发现这一点

你在一个无序列表中得到一个有序列表<ol>item<li>

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

GitHub CSS 规则包括:

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

如果你输入3em,你会得到 而不是

【讨论】:

@MDXF 我怀疑是因为数字后跟一个点被转换为一个有序列表在同一行作为无序列表项('-')。通常, 和
    不应该呈现在同一行...
@MDXF 我已经使用导致不正确间距的确切 CSS 规则编辑了答案。 其实我觉得输出要么是我没听说过的markdown增强,要么是bug。是的 - .666 是一个有序的子列表,但是,它是该列表中的第一个元素,因此它应该显示为 i 而不是 dclxvi 。 Markdown 有序列表忽略了实际使用的数量和顺序的数量,我还没有看到改变它的方法。 @MikeLippert 不,它显示在dclxvi,因为生成的html代码是&lt;ol start="666"&gt;,与github.github.com/gfm/#list-items一致:“如果列表项是有序的,那么它也被分配了一个开始编号,基于有序列表标记”(这里,'666' 是有序列表标记) @VonC 谢谢,我不知道 github-flavored markdown 的增强功能,并且在我评论之前没有通过快速谷歌搜索找到它。对于其他任何人,这里是 VonC 文档链接的另一个有用摘录“有序列表的起始编号由其初始列表项的列表编号确定。后续列表项的编号被忽略。”跨度> 【参考方案2】:

虽然其他答案很好地解释了为什么你有这个问题,但他们没有给你一个确切的例子来说明如何解决这个问题。

看来你已经解决了in an imperfect manner,用

替换你的文本
- `666`. ha.

有一个常见的技巧是在数字后面转义点以使其看起来像普通文本(而不是有序列表标签):

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

【讨论】:

【参考方案3】:

666 之后添加句点使其成为an ordered list marker。

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

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

用反斜杠转义句点,您应该会看到正确的输出。

【讨论】:

以上是关于GitHub 与 Markdown 搞混了 - 将 666 更改为 DCLXVI的主要内容,如果未能解决你的问题,请参考以下文章

差一点搞混了Transactional注解

别再搞混了,数据库≠数据仓库

求求你,不要再把ER图和数据库模型图搞混了好嘛?

固态硬盘的PCIE,SATA,M2,NVMe,AHCI分别都指什么?别再搞混了

区块链和分布式账本的概念,韭菜们别再搞混了?6月29日前瞻分析

react.js 元素渲染