0

我在 Python 中使用 pelican 来生成静态页面。使用 Markdown 和 Pygment 突出显示代码块很好,但是当涉及到内联突出显示时,存在显着差异。

请检查我的页面。页面处于深色背景中,但带有反引号 `` 的内联突出显示是白色背景。

降价代码是

To clearify what exactly the command returns, 
one can use `pack('>i', -2500).encode('hex')`{.python}. 
Or I have a more complex solution like, `''.join(r'\x%02X' 
% ord(ch) for ch in src)`{.python}.

那么这里的问题是如何定义内联高亮样式?

我试图更改鹈鹕主题中的 pygments default.css 文件,但没有奏效。

我找到了一些相关链接:

  1. GitHub markdown 中的内联代码语法高亮显示?
  2. reStructuredText 中的内联代码突出显示
4

2 回答 2

1

Pelican 使用带有CodeHilite扩展的Python-Markdown将代码传递给 Pygments。请注意,代码不包括内联代码片段事实上,我不知道任何支持突出显示内联代码的 Markdown 解析器。通常,内联代码片段太短而无法有效突出显示,并且几乎总是太短而无法利用 Pygments 的语言猜测算法。

我看到您已尝试使用属性列表扩展通知 Markdown 该语言。但是,所做的只是将一个类添加到<code>包装代码片段的 HTML 标记中。由于 CodeHilite 扩展只适用于块,它甚至从不查看它,当然也不会将它传递给 Pygments。

您有几个不同的选项可用(每个选项都在增加所需的工作量):

  1. 您可以编写自己的 CSS 来更改背景和文本颜色,以便它们与块匹配。您不会获得语法高亮显示,但内联代码片段至少会匹配您的主题。无需在这里定义语言。

  2. 您可以使用 JavaScript 代码突出显示库来突出显示基于您使用属性列表扩展定义的语言的所有代码片段。但是,这可能需要您重新定义 JS 库的 CSS,使其与 Pygments 的输出相匹配。

  3. 您可以编写自己的 Python-Markdown 扩展(或者可能是 fork CodeHilite),除了块之外,它还突出显示内联代码片段。

就个人而言,我会推荐上面的(1)。实际上,查看您的页面,代码块似乎定义了以下内容:

.highlight pre, .highlighttable pre {
    background: #272822;
    color: #f8f8f2;
}

也就是说,<pre>父元素分配了“highlight”类(或“highlighttable”类)将以这些颜色显示。由于您希望将相同的颜色分配给内联代码,请添加以下规则:

code {
    background: #272822;
    color: #f8f8f2;
}

只需确保在 Pelican 主题定义的样式之后定义它(似乎在http://vfxware.com/theme/css/bootstrap.slate.min.css中)。

当然,您可以更改现有的 CSS,但是如果您以后决定更新到新版本的主题或完全更改主题,您可能必须重新定义自己的规则。因此,我喜欢在一个单独的文件中定义我自己的一组覆盖,我总是确保它是最后一个加载的。

于 2014-12-29T15:57:36.437 回答
0

我经常被这个咬伤。我的问题是我在升级 Pygment 模块时使用了旧模板的旧 pygment.css 文件(CSS 没有赶上 Pygment 插件。

在我的例子中,旧的 Pygment CSS 使用的是 HTML 标记类highlight,而它应该使用codehilite新的 Pygment 代码现在使用的新类名。(感谢Firefox->Windows->Web Developer->Toggle菜单选项指出这个“破损”。

替换pygments.cssCSS 样式文件可以恢复这种急需的代码语法突出显示功能。

要重新生成pygments.css文件,请执行:

pygmentize -S default -f html -a .codehilite > pygments.css

或者对于较暗的主题,使用 Pygmentizemonokai样式,如下所示pygmentize -L

pygmentize -S monokai -f html -a .codehilite > pygments.css

同样,问题是 Pygments 将其 HTTP 标记类codehilite从旧的highlight.

于 2018-11-17T18:31:41.983 回答