Markdown:在列表内进行连续列表的正确方法是什么?

时间:2019-01-08 23:41:50

标签: markdown github-flavored-markdown

在GFM中的列表内执行连续列表的正确方法是什么?

目标:

  1. 一个
    1. 一个
    2. 两个
  2. 两个
    1. 三个
    2. 四个

我查看了有关continued number listsrelevant issues的常见信息,但还没有看到有人问这个问题。

1 个答案:

答案 0 :(得分:2)

从技术上讲,您不能这样做。 Markdown是HTML的子集,而HTML不提供这种功能。但是,您可以使用<ol start="3">之类的东西在HTML中进行伪造,该伪造实际上是告诉列表以3而不是默认的1开始编号。

当然,您总是可以退回到原始HTML,但是让我们继续仅在Markdown中实现这一目标。是否可以在Markdown中执行此操作取决于所使用的Markdown实现。

传统的Markdown rules状态:

  

请务必注意,您用来标记   列表对Markdown产生的HTML输出没有影响。

     

...

     

但是,如果您确实使用了惰性列表编号,则仍应启动   列出数字1。在将来的某个时候,Markdown可能会   支持以任意数字开头的有序列表。

由此可见,当前尚无法实现所需的行为。但是,如果暗示的更改要发生,事情可能会有所不同...

事实证明,Github扩展的Commonmark确实支持以任意数字开头的有序列表。正如spec所述:

  

有序列表的开始号由列表号决定   其初始列表项。后续列表项的数量为   忽略。

鉴于上述情况,似乎以下内容会产生所需的输出:

1. One
    1. one
    2. two
2. Two
    3. three
    4. four 

但是,正如Babelmark所演示的那样,这仅适用于一些实现(请注意输出中包含<ol start="3">的实现)。

部分问题是父列表在嵌套列表的紧前一行包含一个段落(内容为Two)。因此,如果您在不同的块级元素之间添加空白行,就像这样:

1. One

    1. one
    2. two

2. Two

    3. three
    4. four

然后更多的实现可以正确地看到嵌套列表。具体来说,如Babelmark所示,这使Commonmark可以根据需要解析列表。实际上,您得到以下输出(请注意<ol start="3">):

<ol>
    <li>
        <p>One</p>
        <ol>
            <li>one</li>
            <li>two</li>
        </ol>
    </li>
    <li>
        <p>Two</p>
        <ol start="3">
            <li>three</li>
            <li>four</li>
        </ol>
    </li>
</ol>

事实上,我检查了一下,并在GitHub上正常运行。