niszetの日記

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

(Pandoc) Raw記法で各フォーマットが受け付けるFORMATの文字列

穴埋め記事だよ?

この記事は Pandoc Advent Calendar 2019 の3日目が空いているので小ネタを入れていこうというつもりで作った記事ですが、22日、本日も空いているので22日に入れることにしました。

Pandoc Advent Calendar 2019 はこちらから行けます。

adventar.org

過不足と条件付きが結構あるので注意。

さて、本題。Pandoc's Native ASTにはRawInlineRawBlockという要素があり、これらは出力ファイル形式の文法で書かれたコードをそのまま出力ファイルに埋め込むことが出来る便利な要素です。出力ファイル形式以外だと内容は無視されるので、docxように書いたコードとhtml用に書いたコードを入れておいても大丈夫…のはずです。Markdownの記法はマニュアルを読んで欲しいですが、Codeのようにバッククォートで囲った文字列の直後に{=FORMAT}の形で置きます。

pandoc.org

…なのですが、docxで出力するときはopenxmlを要求されるなど、正直言って自明ではありません。そしてマニュアルにも記載がありません。仕方がないのでWriterのコードを読んでそれらしき記述を抜き出しました。PandocのWriterって書き方が統一されていないので単純にgrepで持ってこれるものではなくて目視grepとなりました。

そのため、抜け漏れがあるかもしれません。あと、過剰なのもあるかも。

また、いくつかのファイル形式ではraw_htmlraw_texの拡張が必要な場合があります。また、それらの動作が完全に一致するかという問題もあります(すべて未検証)。TeXやHTMLの仲間ではなく、自身のフォーマット名と異なるものは要注意です。

また、とあるファイル形式ではRawBlockRawInlineのどちらかのみが存在、というのもありました(失念)

さらに、ファイル形式によってはRaw記法がないものがあります。

また、表中ではファイル形式名(-tで指定するもの)ではなく、Writerのファイル名となっています。tidyな表じゃないですが、ご容赦を。

Writer format1 format2 format3 format4 format5 format6
AsciiDoc.hs asciidoc
CommonMark.hs html latex tex markdown
ConTeXt.hs context tex
Docbook.hs docbook html
Docx.hs openxml
DokuWiki.hs dokuwiki html
EPUB.hs html
FB2.hs fb2
HTML.hs html latex tex html5 html4
Haddock.hs haddock
ICML.hs icml
Ipynb.hs html revealjs latex markdown rst ipynb
JATS.hs jats
Jira.hs jira
LaTeX.hs latex tex beamer
Man.hs man
Markdown.hs markdown html html5 html4 latex tex
MediaWiki.hs mediawiki html
Ms.hs ms
Muse.hs
Native.hs
ODT.hs opendocument
Org.hs latex tex org html
Powerpoint.hs openxml
RST.hs rst tex latex
RTF.hs rtf
Roff.hs
TEI.hs tei
Texinfo.hs texinfo tex latex
Textile.hs html textile latex tex
XWiki.hs xwiki
ZimWiki.hs zimwiki html

いずれちゃんと情報整備したいですが、ひとまず公開します。

(Pandoc) Pandoc DiscussメーリングリストでPandocの情報を仕入れよう

この記事は Pandoc Advent Calendar 2019 14日目の記事です。

なお、Pandoc Advent Calendar 2019 のリンクはこちらです。

adventar.org

さて、Pandocはそうこうしている間に2.9がリリースされ、更新速度が保たれたまま機能の追加やバグフィクスが頻繁に行われています。

最新の情報を見続けるならば、PandocのリポジトリWatchしてすべての通知を受け取るという方法がありますが、これをするとメールボックスがPandocの通知で埋まってしまい、結局追いかけることが出来ないという問題があります。というか、なりました。毎日、下手すると何十通も届いてしまうので、適当にフィルタリングしないといけません。

また、Issueについて見てみても、Pandocについて深い理解がないとわからないものも沢山あります。初心者には割と厳しい…。

そこで、おすすめなのがPandoc Discussのメーリングリスト

https://groups.google.com/forum/#!forum/pandoc-discuss

を見るという方法です。

PandocのHelpのページ https://pandoc.org/help.html にもあるように、Pandocに関する質問やおかしな挙動があった場合にはまずここに言って欲しいとなっています。

The first place to go if you have a question about pandoc, or if something doesn’t seem to be working properly, is the pandoc-discuss mailing list on Google Groups.

最近は機械翻訳でもそれなりに読める文章になるので、ここで出てきた質問を翻訳して読んでみたり、(これは英語でないとダメですが)自分の疑問を投げてみると良いと思います。実際に私もLuaフィルタに関する質問に回答した 1 り、疑問点を投げたりしていました。

Pandocの素の機能ではできないことをLuaフィルタで解決したい人が一定数いるため、Luaフィルタのお題が欲しい人にも好いかと思います(いるのか?)

また、英語ではちょっと無理…であれば、日本Pandocユーザー会のSlackで聞いてみるのも良いかもしれません。なんというか…過疎ってはいますが…。Slackへのリンクは下記のHPからたどれます。

pandoc-doc-ja.readthedocs.io

情報収集は大事なので、まずは覗いてみてもらえればと思います。

緩い記事ですが、Pandoc Discussについてもあまり日本語での情報がないので、紹介でした。

Japan.R 2019に参加できなかったので配信を聞いていたがとても良かった。

来年以降も是非配信してほしいです。

というわけで、本当は今日 Japan.Rに参加するつもりでしたが仕事の雲行きが怪しく、昨日のうちにキャンセルして今日は仕事していました。結果として今日は出社しなくても良かったねって感じでしたが、Japan.RはYouTubeで配信があったのでそれを聞いて過ごせたので全然オッケーでした。

音質、画質共にヨシ!

ちゃんと追えていませんが、Slackの感じから今年は機材を使ったのかな?聞き取りやすく、画面も途中でピントあわないトラブルがあったものの、ちゃんと見れており、結果としてその場にいないのにも関わらず十分に堪能できた気がします。ありがたいことです。

私みたいに突如参加できない人、というより、地方でなかなか東京のイベントに参加できないという人には配信があるのはうれしいことだろうなと思います。実際問題としては機材の問題、参加費を取っているならそれとのバランス、などなど考えることはあると思うのですが、良い面はやはりあるので、やってもらえるの本当にありがたいな、という気持ちでした。

来年はTokyoRも10周年ということで、その回は様子見して、それ以降で何か、Pandocネタで参加できればな…と思っています。

資料はまた追々見ていこうと思います(仕事していたのであまりスライドは見れていないので)

音から楽器の分類みたいなのが気になったのでちょっとやってみたい気持ちです。

という、感想の日記でした。

(Pandoc) Wordのカスタムプロパティを使う

Pandoc Advent Calendar 2019

この記事は Pandoc Advent Calendar 2019 7日目の記事です。

なお、Pandoc Advent Calendar 2019 のリンクはこちらです。

adventar.org

まだまだ空きがありますので、皆様、是非ご参加ください1

YAMLで定義した項目がWordのカスタムプロパティに追加される機能は今年、2019年に入ってからの機能追加です。

まだまだ知られていないかもしれないので、良い機会なので簡単にまとめておきます。

さて、本題。

Pandoc でWord形式のファイル(以下、docxと書きます)を出力する際 、YAMLで書いたメタデータのトップレベルに書いたもので、かつ docx の(Office Open XMLで定義されている)メタデータでないものはカスタムプロパティとして追加されます。これは、PowerPointやODT形式でも同様ですが、対応する項目名が異なります。詳しくはこの記事下部からのリンク先で確認してください。

docx の場合、メタデータとなる情報はtitle, author, keywords, subject, category, description です 2abstract, lang もそうだと書かれていますが、abstractはユーザー設定の方にのみ現れ、lang はプロパティに現れない代わりに文書の言語設定が変更されます。たとえば lang: ja-JP を設定すると、英文であっても日本語としてみなされ、フォントも日本語のものが適用されます。

これ以外の項目はカスタムプロパティとなります。

さて、実際に試してみましょう。

今回の記事の作成時にはR MarkdownからWord文書を作成していますが、Markdownからでも同じ結果を得られます。ただし、tocは別途与える必要があるので、以下のように追加で与えてください。

pandoc" -f markdown -t docx rep.md -o rep.docx --toc

YAML部分に下記のように書いてみます。このうち、author, keywords は複数項目が指定可能です。

---
title: タイトル
author: 
  - 著者1
  - 著者2
date: "2019/12/07"
keywords: 
  - きー
  - わーど
subject: さぶじぇくと
#lang: ja-JP # コメントアウトを外すと日本語に設定されたドキュメントになりますが、調査不足により保留。
category: カテゴリ
description: せつめい
abstract: あぶすと
output: # 以下は R Markdown用の記述
  word_document:
    toc: true
    keep_md: true
---

まず、現在の Pandoc のデフォルトの挙動として、title, author, date, abstract は表紙に表示されます。それぞれ、表題, Author, 日付, Abstract のスタイルが適用されます。

f:id:niszet:20191207192815p:plain

今回は toc を有効にしているため、目次が表示されています。

Wordのツールバーの「ファイル」を押し、「情報」のページに出てくる、「プロパティ」をクリックすると「詳細プロパティ」なるボタン?が表示されますのでそれをクリックしてください。そうすると、このように先のYAMLで指定した値が入っていることが確認できるはずです。

f:id:niszet:20191207192956p:plain

カスタムプロパティはこの右にある「ユーザー設定」のタブで確認できます。

f:id:niszet:20191207193106p:plain

ここではR Markdownから作成したので output もプロパティとして入っていますね。

これらの情報は、エクスプローラー上でWordファイルを右クリックして表示するプロパティからも確認できてしまいます。便利ですが、不用意に情報を入れておくと問題になるかもしれないので、注意してください。私の知る限りではこれらをプロパティに登録しないようにする方法はないと思います。

これらのプロパティはユーザ定義のものも含めて、フィールドコードのDocPropertyを使って参照できます。 Wordのテンプレート(reference-docに指定するファイル)にあらかじめ仕込んでおいたり、Pandocのrawの記法を使って埋め込むことも可能です。たとえば以下のようにして日付、dateを埋め込むことが可能です。ダミーの文字列xxxxは実際には表示されませんが、正しそうな値を入れるか取っておいた方が良いかもです。これも要検証で、使用の際には自己責任でお願いします。

<w:p>
  <w:r>
    <w:fldChar w:fldCharType="begin"/>
  </w:r>
  <w:r>
    <w:instrText>DOCPROPERTY  date  \* MERGEFORMAT</w:instrText>
  </w:r>
  <w:r>
    <w:fldChar w:fldCharType="separate"/>
  </w:r>
  <w:r>
    <w:t>xxxx</w:t>
  </w:r>
  <w:r>
    <w:fldChar w:fldCharType="end"/>
  </w:r>
</w:p>

ドキュメントのプロパティを埋め込むことで、生成時以降に更新された場合でもその更新された値に追従できるというメリットがあります。デメリットにもなりますが…。

なお、関連するIssueはこちら、

github.com

関連するCommitはこちら

github.com

です。

なお、この記事の情報、各フォーマットで対応しているプロパティの表は

github.com

にもあります。


  1. 年明けてからでもよければ、空きの日に埋めていきますが…。

  2. リンク先ではこれについて言及されていないのですが、実際にファイルの概要にいるので、Wordの既定のプロパティであると判断しています。他の項目とあわせて要確認です。調査が間に合わなかったのです…。

ヤクルト1000が美味しい

しかしとても高い…。

最近、駅のホームに置いてある自販機にヤクルト1000を見かけることが多くなりました(駅による。あるところにはあるけどないところにはない)

もともと、ヤクルトとミルミルを常飲していたのですが、最近(普通の)ヤクルトを1000に変えました。 調子は良い気がしますが…比べようがないので何がどう良いのかとかは難しいですね。とりあえず、美味しい。美味しいと続けやすい、かな。私の場合は特にミルミル飲まないとお腹が不調になるので、続けていきたい所存…。

しかし、値段がなぁ…。2日に1個くらいのペースの方が良いのかしらん…?

Pandoc 2.8が正式リリースされましたよ

と言うだけの記事。

pandoc-discussに参加したり、Pandocを監視…じゃない、watchしているとリリースの通知をいち早く知ることが出来ます。だからどうしたって話ですが。

通知内容はここを見ましょう。なんと私の名前(niszet)が載ってるじゃないですか。めでたい🎉

github.com

PR書いてみなよって言ってくれたtarlebさんに感謝です。今後もコントリビュート出来るように頑張っていきたい。そのために時間を作りたい…。

2.8でかなり更新が入ったので解説していきたいのですが、なかなか時間がね…。アドカレの前にリリースされてしまったので、アドカレでいくつか紹介出来るように頑張りたい所存…。

ということで。

(Pandoc) GitHub Actionsが便利そう

Pandoc2.8を使ってみようという気持ちを高めていく

現在、Pandoc2.8のIssueが片付き、それに伴いalpha版が公開されていますが、Pandoc 2.8からCI/CDにGitHub Actionsが使われるようになったようです。

現在登録されているのはCI tests, Nightly, Release candidateで、Release candidateからダウンロードすると良いでしょう。CI testsはたまにfailしているのがあってちょっと面白い(?)

https://github.com/jgm/pandoc/actions

GitHub Actionsはlinux, windows(32bit, 64bit), macosのそれぞれの環境のファイルが入手できます。Windows版のインストーラ込みでリリースされるのは良いですね。便利そう。

PandocはPublicリポジトリなので、無料で使えているはずなので、今後のリリースがかなり楽になったんだろうなって思います。