在没有启动<div> </div>的情况下,Jekyll中的Pygments语法突出显示

时间:2012-09-15 20:47:01

标签: clojure jekyll pygments

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

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

生成包含该行的<div>,根据Clojure语法突出显示语法。但有没有办法在段落中间突出语法?我希望能够写

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

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

有没有办法让Jekyll / Pygments像这样做“内联”语法高亮?

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

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

如果您定义这样的CSS条目:

.inlined { display:inline; }

然后,您可以将此类添加到生成的<div>中:

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

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

测试时,请查看输出HTML。然后,您会发现<div>现在已设置class=inlined属性。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我的快速解决方法是让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>