当您=
在 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
包含 Markdown 的 Haml 布局)它正在缩进并且当您查看页面时会显示空白。请注意第一行是如何紧跟在开始标签之后的,因此没有多余的空格。
有几种方法可以解决这个问题。如果您设置该:ugly
选项,那么 Haml 将不会像这样重新缩进块(抱歉,我不知道您如何在 Nanoc 中设置 Haml 选项)。
您也可以使用find_and_preserve
辅助方法。这会将空格敏感标签中的所有换行符替换为 HTML entity 

,这样它们在缩进时不会受到额外空格的影响:
= find_and_preserve(yield)
Haml 提供了一种简单的使用方法find_and_preserve
;~
工作方式与 相同=
,只是它find_and_preserve
在 result 上运行,因此您可以执行以下操作:
~ yield