![](/img/trans.png)
[英]Add proper syntax name to code blocks when converting from HTML to Markdown with Pandoc
[英]Converting multiline code snippets in HTML to Markdown with pandoc
我想使用pandoc將HTML的這段代碼轉換為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
```
但是輸出我從來沒有在markdown文件中分別包含<br>
換行符。
# 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
我想念什么嗎?
問題是您的代碼塊未正確格式化為代碼塊。 您至少需要以下內容:
<pre><code># chown root:root /boot/grub/grub.cfg
# chmod og-rwx /boot/grub/grub.cfg
</code></pre>
除了@tarleb的答案中涉及的HTML規范之外 ,Markdown規則還僅根據<pre>
標簽的存在(或不存在)來區分代碼塊和代碼跨度 。
請注意,原始的Markdown規則說明了生成此HTML的代碼塊 :
<pre><code>This is a code block. </code></pre>
包裝在<pre>
標記中的<code>
<pre>
標記。 相反,相同的規則演示了生成此HTML的代碼范圍 :
<p>Use the <code>printf()</code> function.</p>
請注意,僅使用<code>
標記,但這僅是一個內聯范圍(包裝在<p>
,而不是塊級元素)。
當Pandoc從HTML轉換回Markdown時,它遵循相反的約定。 是的,您在<code>
標記上設置了class="code_block"
,但是Pandoc不知道這意味着什么,也不應該。 是的,您的<code>
元素沒有包裝在<p>
,但這只是格式不正確的HTML(根據HTML規范, <code>
不是塊級元素,而是措辭內容 ;即content它包裝在塊級元素(例如<p>
或<pre>
元素)中。
然后是您的<br>
標簽的問題。 Pandoc如何知道這是代碼還是樣式鈎子的一部分? 實際上,事實並非如此。 這就是為什么我們將<pre>
標記用於多行代碼塊的原因。 使用<pre>
標記,保留空白。 因此,您只需要沒有<br>
標記的換行符。
為了完整起見,我意識到原始的Markdown規則不包括受防護的代碼塊,因此我還將指向GitHub Flavored Markdown規范,該規范還演示了受防護的代碼塊產生<pre><code>
包裝的<pre><code>
塊。 自然,要反向進行操作,您需要從<pre><code>
包裝的塊開始,以帶有圍欄的代碼塊結束。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.