という気付きが結構前にあったらしい…
下書きのまま放置していたので、忘れてしまわないうちに書く。
stylex
パッケージ、docxのstyleをR上で加工しやすくしようと思って作っていたのですが、docxファイルを記述しているOOXMLは、w:name
のようにw:
のnamespaceが与えられています。
xml2
パッケージでこのnamespaceつきのタグ、w:name
などを入れる場合、あらかじめそのnamespaceを定義しているrootを作るなりしないといけないようです(仕様に書いてあるかもしれないけど見つからなかった
例えばこんな感じに。
xml2::xml_new_root( "styles", "Ignorable"="w14 w15 w16se w16cid w16 w16cex", "xmlns:mc"="http://schemas.openxmlformats.org/markup-compatibility/2006", "xmlns:r"="http://schemas.openxmlformats.org/officeDocument/2006/relationships", "xmlns:w"="http://schemas.openxmlformats.org/wordprocessingml/2006/main", "xmlns:w14"="http://schemas.microsoft.com/office/word/2010/wordml", "xmlns:w15"="http://schemas.microsoft.com/office/word/2012/wordml", "xmlns:w16cex"="http://schemas.microsoft.com/office/word/2018/wordml/cex", "xmlns:w16cid"="http://schemas.microsoft.com/office/word/2016/wordml/cid", "xmlns:w16"="http://schemas.microsoft.com/office/word/2018/wordml", "xmlns:w16se"="http://schemas.microsoft.com/office/word/2015/wordml/symex" )
これは実際にPandocで生成したdocxをxml2パッケージで読み込んだ際に含まれていたものを列挙しているだけです。これを、stylex
パッケージ中でも使うようにしました。
コード内に定数を書いている状態なので、新しいPandocが出てきたときなどに更新が入った場合、それに追従しないといけないというデメリットはありますが、現時点でどうなるかわからんものはとりあえず動くことを重視…(毎回Pandocを起動して、docxからnamespaceを抽出して…とやってもいいものの、そこまでする…?という…)
いないと思いますが、R上で同様のことをしようとして詰まった人のために書き残しておきます。