haml - Markdown 中的多行代码块添加了不需要的选项卡

标签 haml markdown codeblocks pre nanoc

今天我在 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 实体 &#x000A; , 这样它们在缩进时就不会受到额外空格的影响:
= 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/

相关文章:

Emacs:在自定义部分之外设置变量时出现问题

c++ - 什么是与 Codeblocks C++ 项目一起使用的好 gitignore?

sockets - LuaSockets和代码::Blocks

c - 对 `encrypt' 的 undefined reference 和对 `decrypt' 的 undefined reference

ruby-on-rails - html 表中的突破日期

Javascript 仅适用于页面上的某些位置

Ruby:循环哈希并检查键是否存在以确定要显示的标记和数据

haml - 有条件地关闭 HAML 中的标签

markdown - Pandoc Markdown 到 Docx,封面页和目录位于单独的页面中

reactjs - 在React中动态加载Markdown文件