语法高亮的Markdown列表

4
我可以帮助您进行翻译。以下是您需要翻译的内容:

我正在使用Pelican和pygments来为我的MD文档生成语法高亮,但是,我在应用高亮到缩进块时遇到了问题。

例如:

  1. Text 1

  2. Text 2

      Code Here
    
  3. Text 3

使用10个空格的方法可以很好地将代码放置为列表的子元素,但是,我无法像在列表之外那样应用语法高亮

```python

有人能解释一下如何将代码作为列表的子元素并带有语法高亮吗?

更新: 我现在已经弄清楚了。对于将来有困惑的人,这就是我的代码样式。

1. MD List El 1
2. MD List El 2
3. MD List El 3
(blank line)
(2 tabs):::python
        code here
(blank line)
4. MD List El 3

采用这种方法成功地为我生成了列表编号。

2个回答

9

Pelican的文档指出:

For Markdown, include the language identifier just above the code block, indenting both the identifier and code:

A block of text.

    :::identifier
    <code goes here>

The specified identifier (e.g. python, ruby) should be one that appears on the list of available lexers.

当然,需要一个额外的缩进级别来将该代码块嵌套在列表中。Markdown的缩进级别为4个空格,所以在列表中嵌套4个空格加上使其成为代码块的4个空格= 8个空格的缩进。
因此,这应该可以解决问题(用“·”表示空格以进行说明):

1. 第一段文字

2. 第二段文字

········:::python
········#此处为代码

3. 第三段文字

你也可以使用制表符(用“→”表示):

1. 第一段文字

2. 第二段文字

→→:::python
→→#此处为代码

3. 第三段文字

如果您仍未获得语法高亮,请确保您安装了所有的依赖项。代码高亮是由 Pygments完成的,需要额外安装 Python-Markdown
您还需要确保已经创建/复制了适用于Pygments的CSS文件到您的项目中,并从您的HTML模板链接到它们。我不确定Pelican是否默认提供此功能,但即使有高亮也不会可见。

谢谢! :::python 标签解决了问题。我之前尝试过使用 ``` 运算符和 ~~~ 运算符来缩进2个制表符或8个空格,但由于某种原因,它们无法生成正确的列表,然而 ::: 运算符可以。 - asaji
@asaji,我很困惑为什么这个答案有效而我的不行,因为这个答案只是重申了我的第一个建议,而你曾经评论说它不起作用。无论如何,很高兴你解决了问题。 - Chris
很不幸,似乎我需要使用 ::: 运算符和 8 个空格的组合才能使它正常工作,但是你的答案对于得出结论非常重要 :) - asaji
@asaji 使用~~~或```进行的代码块只能在文档的根级别上起作用。换句话说,你不能将它们嵌套在列表中。希望我能尽快纠正这个问题。 - Waylan
@Chris 你的答案没起作用是因为你只提供了部分答案。从问题中很明显可以看出,嵌套不如语言识别重要。实际上,它比语言识别更重要,因为如果未定义语言,Pygments 将尝试猜测语言。因此,如果 asaji 理解了嵌套的正确性,他甚至可以在没有语言标识符的情况下获得语法高亮。如果没有正确的嵌套,他的代码块将不会被解析为代码块,因此根本不会发送到 Pygments。 - Waylan

1
Pelican似乎使用这个库来支持Markdown。根据它的文档,您应该能够像这样做。
:::python
import re
# ...

或者

#!python
import re
# ...

在任何一种情况下,您都应该得到一个渲染的结果。
import re
# ...

没有第一行。

如果这些方法不起作用,您可以尝试使用HTML注释语法,该语法受到许多Markdown解析器的支持,包括用于Stack Overflow的解析器:

* Item 1
* Item 2

<!-- language: lang-python -->

    import re
    # ...

嗨Chris,实际上我之前尝试过 :::python 这个步骤。第一次,我在它之前没有添加任何空格,并将其添加到了代码上方的行中,第二次我在它之前添加了10个空格。两次尝试,它都无法识别为Python。我接着尝试了你的#!python,但还是没有作用。 - asaji
@asaji,#!python 也不起作用吗?我已经更新了我的答案并提出了另一个建议。 - Chris
很不幸,仍然没有运气。这是我为描述这个难题做的一张图片。http://imgur.com/TtSHrZp在第一组图像中,我没有"缩进",因此代码不会显示为列表的子元素,但是语法高亮功能可用。在第二组图像中,我缩进了10个空格,并且它可以工作,但是它不会识别语言。 - asaji
@asaji,请将注释向左缩进到边缘。它不应该是代码块的一部分。 - Chris
也没有运气。我也尝试了很多这里的东西: https://dev59.com/zG025IYBdhLWcg3wEhjr 但还是没有成功。 - asaji

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