markdown中的多行代码块会添加不需要的选项卡

时间:2013-05-17 09:34:19

标签: haml markdown codeblocks pre nanoc

今天我正在用nanoc(haml模板)实现我的页面,我想在markdown中写一些帖子,但是当它转向多行代码块时会发生一些奇怪的事情 - 代码块中的第二行还有其他标签。我尝试过多种降价语法,例如:

//double tab wrapping
    line 1 is fine
    line 2 is wrapping (don't know why!)

~~~
//tilde code wrapping
line 1 is fine
line 2 is wrapping
~~~

两种解决方案都给我这样的结果:

line 1 is fine
    line 2 is wrapping

通过浏览器检查元素显示没有额外的填充 - 这个空格是用标签确定的。
有人可以帮我弄这个吗?也许我做错了什么?

1 个答案:

答案 0 :(得分:5)

当你在Haml中使用=来包含脚本的结果时,Haml将重新缩进插入的文本,使其与包含它的位置的缩进相匹配。例如,如果您的Haml看起来像这样:

%html
  %body
    .foo
      = insert_something

insert_something会返回一些HTML:

<p>
This is possily generated from Markdown.
</p>

然后生成的HTML将如下所示:

<html>
  <body>
    <div class='foo'>
      <p>
      This is possily generated from Markdown.
      </p>
    </div>
  </body>
</html>

注意p元素如何缩进以匹配其在文档中的位置。 通常这没关系,因为HTML中的空格是折叠的。但是,有空格很重要的HTML元素,尤其是pre

这里发生的事情是你的Markdown正在产生类似

的东西
<pre><code>line 1 is fine
line 2 is wrapping
</code></pre>

当它包含在你的Haml文件中时(我猜你正在使用带有= yield的Haml布局来包含Markdown)它正在缩进,并且当你查看页面时会出现空白。注意第一行是如何在开始标记之后,因此没有额外的空格。

有几种方法可以解决这个问题。如果设置:ugly option,那么Haml不会重新缩进这样的块(抱歉,我不知道你如何在Nanoc中设置Haml选项)。

您也可以使用find_and_preserve helper method。这将使用HTML实体&#x000A;替换空白敏感标记中的所有换行符,以便缩进时它们不会受到额外空格的影响:

= find_and_preserve(yield)

Haml提供了一种使用find_and_preserve的简便方法; ~ works the same as =, except that it runs find_and_preserve on the result,所以你可以这样做:

~ yield