9

我正在使用带有 Liquid 标签的 Markdown 来标记 Jekyll 生成的网站的一些代码,并希望包含一些内联(在段落中)和具有彩色语法(使用 Pygments)的代码,但它没有似乎工作。

标记

Lorem ipsum dolor {% highlight javascript %} var sit = "amet"; {% endhighlight %} consectetur adipiscing elit.

结果是

<p>Lorem ipsum dolor <div class='highlight'><pre><code class='javascript'> <span class='kd'>var</span> <span class='nx'>sit</span> <span class='o'>=</span> <span class='s2'>&quot;amet&quot;</span><span class='p'>;</span></code></pre></div> consectetur adipiscing elit.</p>

我非常希望突出显示的文本不包含在 中<div class='highlight'>,或者至少是<span class='highlight'>.

正如其他地方所建议的那样,使用{% highlight javascript nowrap %}不起作用。(也许这是我的设置的问题——Ruby 2.0、Jekyll 0.12.1、pygments.rb 0.3.7?)

我想在 GitHub 上托管这个页面,这意味着我不能依赖插件。无赖,对吧?

附录:行号(即{% highlight javascript linenos %})似乎也不起作用。男人。

4

4 回答 4

5

最简单的方法是使用 Github Flavored Markdown 并使用它们的默认内联代码。

在您的_config.yml文件中,将您的降价更改为 redcarpet。您现在已准备好使用 GFM。

markdown: redcarpet

现在你可以关注所有的GitHub Markdown了。内联代码如下:

Here is some `inline code` in the middle of sencence
于 2014-12-14T03:37:11.563 回答
2

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

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

.inlined { display:inline; }

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

Lorem ipsum dolor 
{% highlight javascript %}var sit="amet"; {% endhighlight %}{: .inlined } 
consectetur adipiscing elit.

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

测试时,请查看输出 HTML。然后你会发现你的<div>now 已经class=inlined设置了属性。

于 2013-11-10T18:44:06.720 回答
0

If you include the following two functions (and call them):

var inlineElements = function() {
    var inlinedElements = document.getElementsByClassName('inlined');
    inlinedElements = Array.prototype.concat.apply([], inlinedElements); // copy
    for (var i = 0; i < inlinedElements.length; i++) {
        var div = inlinedElements[i];
        var span = document.createElement('span');
        span.innerHTML = div.children[0].innerHTML;
        var previous = div.previousElementSibling;
        var paragraph;
        if (previous.tagName.toLowerCase() === 'p') {
            paragraph = previous;
        } else {
            paragraph = document.createElement('p');
            div.parentNode.insertBefore(paragraph, div);
        }
        div.remove();
        paragraph.innerHTML += ' ' + span.innerHTML + ' ';
        paragraph.classList.add('highlight');
        paragraph.classList.add('inlined');
        if (div.classList.contains('connectNext')) {
            paragraph.classList.add('connectNext');
        }
    }
}

var connectElements = function() {
    while (true) {
        var connectNextElements = document.getElementsByClassName('connectNext');
        if (connectNextElements.length == 0) break;
        var prefix = connectNextElements[0];
        var next = prefix.nextElementSibling;
        prefix.innerHTML += ' ' + next.innerHTML;
        next.remove();
        if (!next.classList.contains('connectNext')) {
            prefix.classList.remove('connectNext');
        }
    }
}

inlineElements();
connectElements();

You can use .inline and .connectNext in your Markdown:

{% highlight objective-c %}
[[NSObject alloc] init];
{% endhighlight %} {: .inlined .connectNext }
vs.
{% highlight java %}
new Object();
{% endhighlight %} {: .inlined }

.connectNext will make ensure that the text following the code block is also inlined in the same <p>.

于 2015-02-10T05:13:56.100 回答
0

.highlight div 有什么问题?它放在那里是为了使语法突出显示易于主题化。要将包装器更改为跨度,我敢打赌您必须更改 Jekyll 配置。

仅当您有多行代码段时才会出现行号。

于 2013-07-13T08:42:07.787 回答