Markdown中的多行代码块会添加不必要的制表符

6

今天我正在使用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

通过浏览器检查元素,发现没有额外的填充 - 这个空白肯定是用标签来制造的。
有人能帮助我吗?也许我做错了什么?

1个回答

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文件中时(我猜您正在使用Haml布局与= yield来包含Markdown),它会被缩进并且当您查看页面时会显示出空格。请注意,第一行紧跟着开头标签,因此没有多余的空格。

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

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

= find_and_preserve(yield)

Haml提供了一种简单的方法来使用find_and_preserve~=相同,只是在结果上运行find_and_preserve,因此您可以这样做:

~ yield

1
如果我没记错的话,你可以使用 ~ yield 替代 = find_and_preserve(yield) - Denis Defreyne
@ddfreyne - 是的,你是对的,~= find_and_preserve 的作用是相同的。我会将其添加到答案中。 - matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接