【问题标题】:Fenced code block not highlighted properly围栏代码块未正确突出显示
【发布时间】:2016-06-16 01:24:25
【问题描述】:

在 Jekyll 中,当我将 Markdown 转换器设置为 kramdown 和 bundle exec jekyll serve 时,这个围栏代码块

```javascript
function hey(name) {
    return 'Hey ' + name;
}

console.log(hey('Brienna'));
```

呈现如下:

无论我做什么,都会发生这种情况。我已经尝试设置input: GFM 选项,但是否包含它并没有什么区别。

但是,当我将 Markdown 转换器设置为 Redcarpet 时,相同的代码块呈现如下:

这就是我想看到的!但我不想使用 Redcarpet。我想使用 kramdown。

从下面呈现的 HTML 中可以看到,代码块被突出显示。我正在为 Pygments 使用 CSS 样式表,Rouge 应该能够使用它。我注意到div 的类在 Markdown 转换器之间发生了变化。对于 kramdown,它的类是 .highlighter-rouge,而对于 Redcarpet,它的类是 highlight。如果在 Markdown 转换器之间切换,是否需要手动修改 CSS?

克拉姆当:

红地毯:

【问题讨论】:

  • 你在 GitHub 页面上托管这个吗?
  • 是的,我是,@approxiblue。我在本地服务时会出现上述问题。

标签: css jekyll syntax-highlighting kramdown rouge


【解决方案1】:

您的 Pygments CSS 文件如下所示:

.highlight { font-size: 13px; }
div.highlight, div.highlight code, div.highlight pre  { background: #29281e; }
div.highlight code { padding: 0; }
div.highlight .c { color: #75715e } /* Comment */

在 Kramdown 输出中,.highlight 块不再是 <div>,因此只需从 CSS 中删除所有“div”实例即可恢复语法突出显示。

奖励:无需专门针对 <div>,您的 CSS 现在可以与两个 Markdown 处理器的输出一起使用。


要让隔离代码块在 Kramdown 中工作,您需要开启 recognition of GitHub Flavored Markdown

kramdown:
  input: GFM

请注意,Jekyll 在执行时只读取一次_config.yml。您需要重新启动 jekyll serve 才能应用进一步的更改。

【讨论】:

  • 您从 CSS 中删除所有“div”实例的建议恢复了语法突出显示。需要做更多工作才能获得相同的边距、填充等。我不知道我必须手动编辑样式表——这是在降价转换器之间切换过程的正常部分吗?
  • 我认为这取决于。 Pygments 样式表是generated by code,这意味着它们在版本之间可能略有不同。 CSS 某人generated and archived here, for example,没有 div 选择器。您的样式表确实如此,而且它来自一个主题,我不确定作者在哪里或如何得到它。
  • 不过,CSS 仍然大部分相似,.kd.nx.p 等选择器应该保持不变,所以在这里和那里进行一些调整就足够了。如果你愿意,你也可以使用 pygmentize 来生成一个新的主题 CSS。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 2014-09-26
  • 2016-11-06
  • 1970-01-01
相关资源
最近更新 更多