Word文書へのRmarkdownのHTMLタグ

Oct 01 2020

WordにレンダリングされたRmarkdownドキュメントでHTMLタグを使用する可能性はありますか?

例えば:

---
output: word_document
---

# This is rendered as heading

<h1> But this is not </h1>

html_documentとしてレンダリングする場合は完全に機能しますが、word_documentとしてレンダリングする場合は機能しません。

タグに関するより具体的な質問がここで尋ねられましたが、解決策はありません:MicrosoftWordへのRMarkdownで下線を引く

回答

2 tarleb Oct 03 2020 at 14:08

確かに、ここに行きます:

---
output:
  word_document:
    md_extensions: +raw_html-markdown_in_html_blocks
    pandoc_args: ['--lua-filter', 'read_html.lua']
---

# This is rendered as heading

<h1> And this is one, too </h1>

ここでread_html.lua、このコンテンツと同じディレクトリ内のファイルである必要があります。

function RawBlock (raw)
  if raw.format:match 'html' and not FORMAT:match 'html' then
    return pandoc.read(raw.text, raw.format).blocks
  end
end

上記を開梱して、どのように機能するかを見てみましょう。最初に気付くのは、への追加パラメータword_documentです。md_extensions参照、pandocがテキストを解析する方法を変更し、ここで完全なリスト(または実行のためにpandoc --list-extensions=markdown、あなたの端末で)。raw_htmlpandocが生のHTMLタグを破棄しないようにすることを有効にし、HTMLタグmarkdown_in_html_blocks全体をpandocの内部形式で1つのブロックとして取得するようにするために無効にします。

次の設定はですpandoc_args。ここでは、変換中にLuaフィルターを使用してドキュメントを変更するようにpandocに指示します。フィルタはすべてのHTMLブロックを選択し、それらをMarkdownではなくHTMLとして解析し、生のHTMLを解析結果に置き換えます。

したがって、pandocが読み取れる生のHTMLを使用している場合は、問題ありません。pandocが読み取れない特別な指示を使用している場合は、上記の設定も役に立ちません。マークアップは、docxで使用されるXML形式であるOOXMLで書き直す必要があります。