在 Jekyll 中突出显示 Pygments 语法,无需启动 <div>

Posted

技术标签:

【中文标题】在 Jekyll 中突出显示 Pygments 语法,无需启动 <div>【英文标题】:Pygments syntax highlighting in Jekyll without starting a <div> 【发布时间】:2012-09-15 20:47:00 【问题描述】:

如果你将 Jekyll 与 Pygments 语法高亮包一起使用,则可以编写

% highlight clojure %
(def something :foobar)
% endhighlight %

它产生一个包含该行的&lt;div&gt;,根据 Clojure 语法高亮显示。但是有没有办法在段落中间突出显示语法?我希望能够写作

In Clojure, keywords like % highlight clojure %:foobar% endhighlight %
are prepended by colons.

此处所需的行为是 Clojure 关键字将使用与第一个示例中的关键字相同的样式突出显示。但是,当我尝试这样做时,它只会像以前一样产生&lt;div&gt;。 (也许这是我使用的 Kramdown 降价引擎特有的,但 div 标签本身是 html 转义的,因此您可以在生成的文本中看到“

”。)

有没有办法让 Jekyll/Pygments 像这样进行“内联”语法高亮显示?

【问题讨论】:

【参考方案1】:

两年后,我继续创建自己的 Jekyll 插件来提供内联语法高亮。它被称为inline_highlight,可以这样使用:

In Clojure, keywords like % ihighlight clojure %:foobar% endihighlight %
are prepended by colons.

【讨论】:

【参考方案2】:

您可以将 CSS 类添加到您在帖子中放置的任何对象。

如果你像这样定义一个 CSS 条目:

.inlined  display:inline; 

然后您可以将此类添加到生成的&lt;div&gt; 中:

In Clojure, keywords like 
% highlight clojure %:foobar% endhighlight %: .inlined  
are prepended by colons.

这适用于所有类型的对象(表格、图像等)。我现在无法测试它,但我认为这会解决问题。

当你测试它时,看看输出的 HTML。然后您会发现您的&lt;div&gt; 现在具有class=inlined 属性集。

【讨论】:

【参考方案3】:

我认为您可以使用nowrap 选项来防止Pygments 将代码包装在div 标记中。所以你的例子会变成:

In Clojure, keywords like 
<span class='highlight'><code class='closure'>
% highlight clojure nowrap %:foobar% endhighlight %
</code></span>
are prepended by colons.

【讨论】:

这对我不起作用……添加 nowrap 根本不会改变输出。您是从哪里得知此选项的? 我想我是在source code找到的【参考方案4】:

我的快速解决方法是让 Jekyll 预处理代码:

<div class="highlight">
    <code class="language-css" data-lang="css">…</code>
</div>

在用 span 替换 div 后将其粘贴到需要的位置:

<span class="highlight">
    <code class="language-css" data-lang="css">…</code>
</span>    

【讨论】:

以上是关于在 Jekyll 中突出显示 Pygments 语法,无需启动 <div>的主要内容,如果未能解决你的问题,请参考以下文章

在 Jekyll/Liquid 和 pygments 的 html 问题中突出显示

在 Jekyll 中突出显示 Pygments 语法,无需启动 <div>

Jekyll 博客中突出显示的 pygments 的奇怪背景色调

Jekyll - 如何更改突出显示字体系列的 pygments 语法?

在 Jekyll 中使用 Pygments 代码高亮显示文件名

为啥 pygments 突出显示有背景颜色?