markdown中的多行代码块会添加不需要的选项卡

luk*_*ups 5 markdown haml codeblocks pre nanoc

今天我在nanoc(haml模板)中实现我的页面,我想在markdown中写一些帖子,但是当它转到多行代码块时会出现一些奇怪的事情 - 代码块中的第二行有其他标签.我尝试了多种markdown语法,例如:

//double tab wrapping
    line 1 is fine
    line 2 is wrapping (don't know why!)
Run Code Online (Sandbox Code Playgroud)

~~~
//tilde code wrapping
line 1 is fine
line 2 is wrapping
~~~
Run Code Online (Sandbox Code Playgroud)

两种解决方案都给我这样的结果:

line 1 is fine
    line 2 is wrapping
Run Code Online (Sandbox Code Playgroud)

通过浏览器检查元素显示没有额外的填充 - 这个空格是用标签确定的.
有人可以帮我弄这个吗?也许我做错了什么?

mat*_*att 5

当你=在Haml中使用包含脚本的结果时,Haml将重新缩进插入的文本,使其与包含它的位置的缩进相匹配.例如,如果你有Haml看起来像这样:

%html
  %body
    .foo
      = insert_something
Run Code Online (Sandbox Code Playgroud)

insert_something返回一些像这样的HTML:

<p>
This is possily generated from Markdown.
</p>
Run Code Online (Sandbox Code Playgroud)

然后生成的HTML将如下所示:

<html>
  <body>
    <div class='foo'>
      <p>
      This is possily generated from Markdown.
      </p>
    </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

请注意p元素如何缩进以匹配其在文档中的位置.通常这没关系,因为HTML中的空格是折叠的.然而,特别是有空格很重要的HTML元素pre.

这里发生的事情就是你的Markdown正在产生类似的东西

<pre><code>line 1 is fine
line 2 is wrapping
</code></pre>
Run Code Online (Sandbox Code Playgroud)

当它被包含在你的Haml文件中时(我猜你正在使用Haml布局= yield来包含Markdown)它正在缩进,当你查看页面时会出现空白.注意第一行是如何在开始标记之后,因此没有额外的空格.

有几种方法可以解决这个问题.如果你设置了:ugly选项,那么Haml将不会重新缩进这样的块(对不起,我不知道你如何在Nanoc中设置Haml选项).

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

= find_and_preserve(yield)
Run Code Online (Sandbox Code Playgroud)

Haml提供了一种简单易用的方法find_and_preserve; 除了它在结果上运行之外,它~的作用相同=find_and_preserve,所以你可以这样做:

~ yield
Run Code Online (Sandbox Code Playgroud)