今天我正在用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
通过浏览器检查元素显示没有额外的填充 - 这个空格是用标签确定的。
有人可以帮我弄这个吗?也许我做错了什么?
答案 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实体

替换空白敏感标记中的所有换行符,以便缩进时它们不会受到额外空格的影响:
= find_and_preserve(yield)
Haml提供了一种使用find_and_preserve
的简便方法; ~
works the same as =
, except that it runs find_and_preserve
on the result,所以你可以这样做:
~ yield