列表编号 Jupyter 笔记本的 Markdown

21

我尝试为学生创建一个教程。我想给我问他们的问题编号,但在其中我想添加介绍问题的信息。如何制作一个自动编号列表,在我放置文本时不会重置编号。例如:

This is some info.
1. This is question one.

This is more info.
2. This is question two.

输出结果为:

这是一些信息。

  1. 这是问题一。

这是更多信息。

  1. 这是问题二。
3个回答

20

标准Markdown不支持直接实现此功能,但可以通过“伪造”(见下文)来实现。事实上,规则如下所述:

需要注意的是,用于标记列表的实际数字对Markdown生成的HTML输出没有影响....重点是,如果您愿意,可以在有序Markdown列表中使用序数,使源中的数字与已发布的HTML中的数字相匹配。但如果您懒得这么做,也没关系。

然而,如果您确实使用了懒惰的列表编号,仍应以数字1开始列表。将来,Markdown可能会支持以任意数字开始有序列表。

正式来说,这种未来从未到来。但是一些不同的Markdown实现可能会将此功能作为非默认选项提供。不幸的是,这很少见(我也不记得是哪些实现)。

无论如何,您将遇到另一个问题。我不清楚您期望的输出如何是有效的HTML。本质上,您正在要求在列表项之外嵌套在列表内的段落。这将是无效的HTML:

<ol>
  <p>This is some info.</p>
  <li>This is question one.</li>
  <p>This is more info.</p>
  <li>This is question two.</li>
</ol>

话虽如此,它(几乎)会按照您想要的方式显示(非列表项也缩进)。

    这是一些信息。

  1. 这是问题一。
  2. 这是更多信息。

  3. 这是问题二。

我不建议这样做,但您可以将其用作原始HTML。也许您可以找到其他方法或格式来表示您的数据。

如果您的Markdown实现支持它(虽然非标准,但此功能非常常见且跨实现一致,尽管可能默认情况下未启用),我建议使用嵌套在定义列表中的有序列表。它确实为您提供了正确的嵌套,但非连续数字的问题仍然存在。但是,如果您手动添加数字并转义它们,以使它们不被解释为列表项,则它的效果如下:

This is some info.
: 1\. This is question one.

This is more info.
: 2\. This is question two.

那将呈现为:

<dl>
<dt>This is some info.</dt>
<dd>1. This is question one.</dd>
<dt>This is more info.</dt>
<dd>2. This is question two.</dd>
</dl>

并显示为:

这是一些信息。
    1. 这是第一个问题。
这是更多信息。
    2. 这是第二个问题。

有趣的是,由于SO移除了定义列表上的缩进(通常是默认的),在尝试模拟上面的演示时,我发现有一个更简单的解决方案,可以在所有Markdown实现中使用。只需使用段落、手动编号和不间断空格来强制缩进即可:

This is some info.

&nbsp; &nbsp; 1. This is question one.

This is more info.

&nbsp; &nbsp; 2. This is question two.

请注意,非断行空格会导致Markdown不将这些行视为列表项,从而避免了需要对它们进行转义的必要性。上面的内容呈现为:

Note that the non-breaking spaces cause Markdown to not see those lines as list items negating the need to escape them. The above renders as:

<p>This is some info.</p>
<p>&nbsp; &nbsp; 1. This is question one.</p>
<p>This is more info.</p>
<p>&nbsp; &nbsp; 2. This is question two.</p>

并显示为:

这是一些信息。

    1. 这是第一个问题。

这是更多信息。

    2. 这是第二个问题。


9

在 Jupyter 笔记本的 Markdown 模式中,我们可以通过多种方式创建列表。我自己建议的最简单的方法是:仅需在列表项前附加 * (请确保在星号后包括空格)。例如:

* one
* two
* three

输出:

另外一种方法是,您只需输入任何一个带有数字句点的内容,如1.,然后再输入列表项。

1. one
2. two
3. three

那么我们将看到以下输出:

如果你想改变列表格式,比如将点转换成数字或数字转换成点,只需要更改相应格式的一个元素,整个列表就会转换。

例如:

 1. one
 * two
 * three

输出将会是:

* one
2. two
3. three

输出:


4

与期望的不完全相同,但是当我写下1)2)3)等时,Jupyter停止了重新编号。

在Jupyter的markdown中,")"似乎禁用了重新编号。至少对于运行python 3.5.2的Jupyter版本5.0.0而言。


这对我也有效,但是每个列表元素之间必须有一个空行,否则所有编号的点都会显示在同一行上。即使在列表元素之间使用空行,使用句点 . 的相同方法仍然不起作用。 - n1k31t4

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