5

今日、私は自分のページを nanoc (haml テンプレート) で実装しており、マークダウンでいくつかの投稿を書きたかったのですが、複数行のコード ブロックになると、奇妙なことが起こっています。コード ブロックの 2 行目に追加のタブがあります。次のような複数のマークダウン構文を試しました。

//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

ブラウザーを介して要素を検査すると、追加のパディングがないことが示されます。この空白は確かにタブで作成されています。
誰かがこれで私を助けることができますか? 多分私は何か間違ったことをしていますか?

4

1 に答える 1

5

in Haml を使用=してスクリプトの結果を含める場合、Haml は挿入されたテキストを再インデントして、それが含まれる場所のインデントに一致させます。たとえば、次のような Haml があるとします。

%html
  %body
    .foo
      = insert_something

次のような HTMLをinsert_something返します。

<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ファイルに含まれている場合(Markdownを含めるためにHamlレイアウトを使用している= yieldと思います)、ページを表示するとインデントされ、空白が表示されます。最初の行が開始タグの直後にあることに注意してください。余分な空白はありません。

これを修正するには、いくつかの方法があります。:uglyオプションを設定すると、Haml はこのようにブロックを再インデントしません (Nanoc で Haml オプションを設定する方法がわかりません)。

find_and_preserveヘルパー メソッドを使用することもできます。&#x000A;これにより、インデントされたときに余分な空白の影響を受けないように、空白に敏感なタグのすべての改行が HTML エンティティ に置き換えられます。

= find_and_preserve(yield)

Haml は簡単​​な使用方法を提供しますfind_and_preserve結果で実行されることを除いて~、 と同じように機能する=find_and_preserveため、次のことができます。

~ yield
于 2013-05-18T20:49:37.423 に答える