niszetの日記

細かい情報を載せていくブログ

(Pandoc)Span記法を使うとdocx出力にコメントを残すことが出来る

誰得だよ…

マニュアルの何処にも書いてないと思いますが、docxに出力するときにSpanに特定のclassを与えることでWordのコメント機能を使えるということに気づきました。

入力にこんな感じの文を与えてdocxに変換します。

aaa[bbb]{.comment-start}ccc[ddd]{.comment-end}

結果のスクリーンショットはこんな感じ。

f:id:niszet:20200928232246p:plain

bbbのところがコメントになり、dddは無視されていますね。逆にdocxを入力にした場合は上記のように逆変換されるはずです。試してないけどコードはそれっぽいので(ダメそうならissue建てて)

ソースを1行ずつ精読してooxmlの資料等と突き合わせていたら見つけたけど、これは誰得なんだ…

私はただodt形式の出力にシンタックスハイライトをつけたいだけなのに…どうしてこんなことを…

追記 2020/Oct/4

なんと、この書きづらいSpanを簡便な記法で処理してくれるlua filterをK4zuki氏が書いてくれました。pandockerを使えば簡単に使えますね!

github.com

(Pandoc)ODT出力にtoc-depthが設定できるようにしました

修正は2行だけ

Pandocの、ODT形式での出力をdocx形式での出力と同程度のコトが出来るようにしたく、調査等をしています。

とりあえず手が付けられそうなtoc-depthの修正を試みました。

修正自体は2行だけなのですが、PR出すのは初めてなので色々手間取りました…。そもそもgitの使い方を忘れているというアレ…。

ODTはtemplateを見に行くので、そちらに値を出せるようにWriterを修正、template自体もその値を埋め込めるように修正です。修正箇所はPRの方でdiff表示してもらえれば良いのでそちらで。

github.com

これで次のリリースからは使用可能と思いますが、もし変な挙動してたら教えてください…(仕組み的に変な動きはしないと思うんですが…)

(Pandoc) 各ファイルの役割はCONTRIBUTINGの中に簡単な説明があった…(メモ)

見落としていた…

ODT Writerに関するPRを投げるために、CONTRIBUTINGのページを見ていたのですが、そこの最後の方にPandoc のソースコードの各ファイルについて簡単な説明が書いてありました。

pandoc.org

最初に概観するときに知っておきたかった…。

まぁ今となっては大体どれが何をしているのか知ってるのですが、Pandocはなんだかんだで非常に大きなリポジトリなので、全体像をつかむのは大変です。何かをしたいなら、まず全体を知るべき、ということで…。

(Pandoc) MS Word (docx) 出力でも --number-sections オプションに対応している(メモ)

仕様を追い切れていないが…。

Pandoc 2.10.1 から docx の出力で --number-sections オプションがサポートされました。

これをodtにも入れたいなぁと思ってコードを見ていましたが、Writerにべったり依存なのでコードをかなり追わないといけないなということが分かっています。

ひとまず挙動から確認しているので、その途中のメモ。

対応するコードはこのあたり。

github.com

このコードを見ればわかると思うのですが、Headerに対して処理を加えています。

また、実際のセクション番号はこのあたりで処理していて、

github.com

attributesにnumberがあればそれを利用することがわかります。

で、このnumberについてはPandoc's ASTで確認すると入っていません。なので、Writerの処理の中で附番されていることと考えられます。

一方で、Headerにnumber attributesをつけておけば、その値が入ることが予想できますね。

実際、

## R Markdown {number=100.1.1}

のようにすれば、

f:id:niszet:20200924125034p:plain

となり、値が反映されることがわかります。ただし、次の節などにはこの値は引き継がれないので注意。

一方で、unnumberedクラスは有効で、コレをつければ附番されません。

#### aaa {.unnumbered}

なお、{.unnumbered number=100}のようにすればnumberの方が勝ち、番号付きになります。

(Pandoc)複数のdocx/odtを結合する、をWordやLOWの機能でやるべきか…?(メモ)

検討中の話…。

docxはMS Word上で結合できます。リンク形式にする場合は下記のページの説明が分かりやすいです。

www.koikikukan.com

これをunzipして見てみると、_relsに実際のファイル名を入れているため、word/document.xml単体では処理できないので、Pandocの処理内でここもあわせて作成ということは難しそう。その代わり、事前に章ごとにファイルを決めておいて、このドキュメントのひな型の枠に入れるのは良さそう。ただし章番号がどうなるのかは不明。あと、TOCは生成できるのか?みたいなのもある。

odtの場合、LOW上で結合する方法はこちらのWikiに書いてある。LibreOfficeWikiに結構書いてあるので良いですね。ただし、日本語化したときの文字列はバージョンごとに揺らぎがあるかもしれないので、なんとなく雰囲気で理解する必要があるかもしれない。

help.libreoffice.org

こちらはcontent.xmlで閉じていそうなのだが、デフォルトの表示文字列も一緒に含まれているようなので、Pandocでこれを自動生成した場合には一度odtファイルをLOWで開いて更新という処理が必要になりそうだなと考えています。それ以外の章番号などの話はdocxと同様に問題になるかも。

どちらももう少し実例でやってみないとわからないので、「とりあえずやってみるぞ」という気持ちをここに書いておきます。いつまでもやってないようならだれかつついてみてください…。

(Pandoc)MANUALの更新を追っていけば良いのではという気づき(メモ)

簡単なことだったね(?)

Pandocは日々進化しています。自分が使うファイル形式の更新はなくてもそれ以外の形式に対しては後進が入っていたりするので、マニュアルは日々更新されて行きます。

これを、releaseのたびに見ていくと大変なんですが、よくよく考えるとファイル単位でチェックすればいいじゃないか、と。具体的にはココ。

github.com

これで、各commitで何が更新されているのかがわかりますね。簡単なことデス(それをトラックしていくのが簡単とは言っていない…

Github File Watcherなるものがあるので、コレが使えないか検討中…

初心者に向けては翻訳された情報の有無が結構大事だと思っているのですが、どうしても翻訳した情報が古くなってしまうので、これをなんとか維持できる方法はないかなって考えているこの頃です。

(R)captionerパッケージがArchivedになっていたのでForkしておいた(メモ)

CRANから落ちてしまったらどうしようかねコレ…。

先日、色々見ていたら気づいたのですが、captionerパッケージがArchivedになっていました。

github.com

ので、さっそくFork...

github.com

このパッケージはRMarkdownでWord文書を作ろうのときに使っていたのですが、今後CRANから落ちてしまったら復活の芽がなくなってしまったのでなんとかしたいな…と思って少しずつコード読み中です。

Feel free to fork, copy, use as desired. No attribution necessary.

とあるので、自由に使わせていただくです…。 一応、MITライセンスっぽいですしね…

github.com