今天我在 nanoc(haml 模板)中实现我的页面,我想在 markdown 中写一些帖子,但是当它进入多行代码块时,发生了一些奇怪的事情 - 代码块中的第二行有额外的选项卡。我尝试了多种 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
通过浏览器检查元素表明没有额外的填充 - 这个空格肯定是用制表符组成的。
有人可以帮我弄这个吗?也许我做错了什么?
最佳答案
当您使用 =
在 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 不会像这样重新缩进 block (对不起,我不知道你如何在 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
关于haml - Markdown 中的多行代码块添加了不需要的选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605840/