【问题标题】:Converting multiline code snippets in HTML to Markdown with pandoc使用 pandoc 将 HTML 中的多行代码片段转换为 Markdown
【发布时间】:2019-04-18 21:28:25
【问题描述】:

我想用 pandoc 把这个 HTML 的 sn-p 翻译成 Markdown。

<code class="code_block"># chown root:root /boot/grub/grub.cfg<br/># chmod og-rwx /boot/grub/grub.cfg 
</code>

我想要的输出是这样的。

```
# chown root:root /boot/grub/grub.cfg
# chmod og-rwx /boot/grub/grub.cfg
```

但输出 I 从未在降价文件中分别包含 &lt;br&gt; 换行符。

# chown root:root /boot/grub/grub.cfg# chmod og-rwx /boot/grub/grub.cfg

我已经尝试过不同的命令和扩展。

$ pandoc -f html -t markdown t.html
$ pandoc -f html -t markdown+hard_line_breaks t.html 
$ pandoc -f html -t markdown+raw_html+hard_line_breaks t.html
$ pandoc -f html -t markdown+raw_html+hard_line_breaks-inline_code_attributes t.html

我错过了什么吗?

【问题讨论】:

    标签: html markdown pandoc


    【解决方案1】:

    这是由于 pandoc 在内部表示内联代码的方式:代码存储为一串逐字文本以及一组属性。换行符是布局命令,不适合这种表示形式并被忽略。

    还要注意,以上是编写多行代码的一种相当不常见的方式。参见,例如,MDN docs on the &lt;code&gt; element:

    要表示多行代码,请将&lt;code&gt; 元素包装在&lt;pre&gt; 元素中。 &lt;code&gt; 元素本身仅代表单个代码短语或代码行。

    【讨论】:

      【解决方案2】:

      问题是您的代码块没有正确格式化为代码块。您需要(至少)以下内容:

      <pre><code># chown root:root /boot/grub/grub.cfg
      # chmod og-rwx /boot/grub/grub.cfg 
      </code></pre>
      

      除了@tarleb 的答案中涵盖的HTML spec,Markdown 规则还仅根据存在( &lt;pre&gt; 标签。

      请注意,原始的 Markdown 规则将 code block 显示为生成此 HTML:

      <pre><code>This is a code block.
      </code></pre>
      

      &lt;code&gt; 标签包裹在 &lt;pre&gt; 标签中。相比之下,同样的规则演示了一个 code span 生成这个 HTML:

      <p>Use the <code>printf()</code> function.</p>
      

      注意这里只使用了&lt;code&gt;标签,但它只是一个内联span(包裹在&lt;p&gt;中,不是块级元素。

      当 Pandoc 从 HTML 转换回 Markdown 时,它反向遵循相同的约定。是的,您在&lt;code&gt; 标签上设置了class="code_block",但Pandoc 不知道这是什么意思,也不应该知道。是的,您的&lt;code&gt; 元素没有包含在&lt;p&gt; 中,但这只是HTML 格式不佳(根据HTML 规范,&lt;code&gt; 不是块级元素,而是phrasing content;也就是说,包含在块级元素中的内容,例如 &lt;p&gt;&lt;pre&gt; 元素)。

      然后是您的&lt;br&gt; 标签的问题。 Pandoc 如何知道这是代码的一部分还是样式挂钩?事实上,它没有。这就是我们为多行代码块使用&lt;pre&gt; 标签的原因。使用&lt;pre&gt; 标记,保留了空格。因此,您只需要一个没有&lt;br&gt; 标签的换行符。

      为了完整起见,我意识到原始的 Markdown 规则不包括受保护的代码块,因此我还将指出 GitHub Flavored Markdown 规范,该规范还演示了 fenced code blocks 生成 &lt;pre&gt;&lt;code&gt; 包装块。自然,要反过来,您需要从 &lt;pre&gt;&lt;code&gt; 包装的块开始,以封闭的代码块结束。

      【讨论】:

        猜你喜欢
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        • 2021-05-26
        • 2021-07-15
        • 2020-12-21
        • 2019-04-23
        • 1970-01-01
        • 2018-09-17
        相关资源
        最近更新 更多