当您在 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文件中时(我猜您正在使用Haml布局与= yield
来包含Markdown),它会被缩进并且当您查看页面时会显示出空格。请注意,第一行紧跟着开头标签,因此没有多余的空格。
有几种方法可以解决这个问题。如果您设置:ugly
选项,那么Haml将不会重新缩进这些块(很抱歉我不知道您如何在Nanoc中设置Haml选项)。
您也可以使用find_and_preserve
助手方法。这将使用HTML实体

替换所有敏感于空格的标记中的换行符,以便它们不会受到额外空格的影响:
= find_and_preserve(yield)
Haml提供了一种简单的方法来使用find_and_preserve
;~
与=
相同,只是在结果上运行find_and_preserve
,因此您可以这样做:
~ yield
~ yield
替代= find_and_preserve(yield)
。 - Denis Defreyne~
和= find_and_preserve
的作用是相同的。我会将其添加到答案中。 - matt