「Markdown+CSS/TeXで冊子本を作ってみた」に参加してみた
「Markdown+CSS/TeXで冊子本を作ってみた」に参加してみた
2019/11/16 訂正 訂正いただきました箇所、打ち消し線と + 記号で大体わかるように、なっているといいな、しました。
開始前
記事中のAmazonのリンクはアフィリエイトにしていますので嫌悪感を抱かれる方は気をつけてください。
アンテナハウス株式会社*1様主催のセミナーに参加してきました。以前『PDFインフラストラクチャ構造解説』のPOD(Print On Demand)本を買ったときに存在を知り、ウェブサイトの「XMLに命をかけてくれ」というエピソード紹介が印象に残っていました。大規模、構造的ドキュメント用のソフトウェアに強みのある会社という理解です。

PDFインフラストラクチャ解説: 電子の紙PDFとその周辺技術を語り尽す
- 作者: 小林徳滋
- 出版社/メーカー: アンテナハウスCAS電子出版
- 発売日: 2017/02/26
- メディア: Kindle版
- この商品を含むブログを見る
開催が平日の13時30分からだったので、業務で来る人でないと辛いですね。業務で使う人がターゲット層だろうし、それはそう。
しっかり準備したと思ったらバッテリが2時間分くらいしか残ってなかったり、電源タップ持ってきていなかったり、以前間に合わせで作った名刺すら5枚も持ってきていなかったり。
以下、メモ内容は引用の形を取っていますが、話された内容そのままではないです。
挨拶
アンテナハウス社の小林氏による挨拶。 それこそMS Office文書の実体などでよく使われるXMLですが、
「紹介をするときに『XML』というとは人気がないので『構造化文書』といっている」
とのこと。これを処理するソフトウェアは
「アンテナハウスの売上のは占める」
そう。けれど、
「もう少しソフトウェアへの門戸を広げたい」
ということで、簡易記法をやっていると。
10年ほど前からCAS-UBという記法を提供しているが、やはり難しいものになっている。そこで、Markdownなら使ってもらえるのでは
氏は技術書典にはこれまで落選1回を除けば6回参加。Markdown+CSS(+ AHFormatter)で冊子本が作れることを確認できた。
Markdownの扱いについてはアンテナハウスはまだ素人ということで、先達であるところの鹿野さんに発表してもらうことに。
「『冊子本』の概念について、社内では『冊子本とは』レベルだった。巻物に対しての定型製本が冊子本ということで今回はやっていく」
CAS-UBの記法はこれですね。
なんというか、必要なものを全部作ると実際こんな感じになるよね、という感じの記法です。 Markdownと比べると「覚える必要項目がこんなにある」という印象がでてしまう気がする。 個人的にはreST*2あたりの配分はかなり上手いと思っていて、簡易な書き方のできるものと 何のインラインorブロックなのかを書くタイプのものを用意した方が結果的に暗記しておくべき量は減るし見通しも良い気がする。
会場では技術書典7で頒布していた「簡単! **Markdown+CSS**による冊子本作り」がまわされていました。今回のアンテナハウス社の発表内容のくらいはまとまっているので興味がでてきた方はどうぞ。私は書典で購入したものを持参しましたが。
冊子本の原稿としてMarkdownを扱う
ラムダノート株式会社鹿野氏の発表。
ラム社の紹介
ラムダノート社の紹介。特色として挙げられたのは
原稿形式を著者に強制していないこと。
これまで出版した本では
本 | |
---|---|
Haskell本 | |
数式組版 | |
IPv6本 | HTML |
定理証明手習い | HTML |
Goによるシステムプログラミング | reST(+Sphinx) |
みんなのデータ構造 | |
RubyでつくるRuby | Markdown (to HTML ) |
+ プロフェッショナル SSL/TLS | + DocBook |
気になった点が2つありました。まず、冒頭付近の表、DocBookは『プロフェッショナルSSL/TLS』で、『みんなのデータ構造』は原著者プリプロセッサ付きLaTeXでした(これは言わなかった気がします。表のヘッダも組版より原稿形式がよさそう)
— keiichiro shikano λ♪ (@golden_lucky) 2019年11月16日
ラムダノートの出版物は直販サイトであると『紙版』『電子版』『紙+電子版』が選択できるのが嬉しいですね! 電子版は内容アップデート時にも追従!
Markdownとは
オリジナル版としては
- プレーンテキストの整形をする記法
- それをHTMLに整形するツール(Perl製)
欧文圏は元々アスキー記号で文章をエディタ上で装飾する文化があった
「Markup Language」は構造定義をするもの。「Markdown」は「装飾」のためにある、という出発点
それでもそれを凌駕する利点がある
Markdown は Free Software(BSD 系)
で、強調されたのは Markdownは装飾であり、構造化(Markup)ではない ということ。後にも出てきますが、 これを踏まえて使う必要があるということでした。アンテナハウス社の発表を聞くと、 確かにここの認識の差で苦しみが発生したのではないかという点があったり。
Markdownの現在
実装者の数だけある。オリジナルは多分現在ほとんど使われていないのではないか
Markdownの○○方言などと言われたりしますね。 オリジナルからして「足りないところはHTMLで書けばいい」という思想なので、実装先で拡張されるのは必然なんですよね。
ところではプログラミング言語なので、Markdown処理系も実装できるんですねぇ。突然鹿野氏ご自身で実装されたMarkdown on
のデモが始まる。
とは
- プレーンテキストを整形する記法
- テキストエディタ上で文書の見た目を指示できる
- 構造化のためのものではない
- そのテキストを「PDFへ変換」できるツール
:thinkng_face: になる人がいそうな文になっていますが、 TPO*3を考えるとこういう説明にはなりますね。 構造的に書くことと構造的であることは別の話なんでその辺りが話されているのも良かった。
も「記法」であり、「表現への変換ツール」である
構造化文書のことは忘れろ
Markdown+[tex\LaTeX{}]
素朴な間違いの紹介として
LaTeXではPDFを作れるので、Markdownの記法をLaTeXに変換すればPDFが作れる?
という気持ちが紹介されました。分かる、分かるなあ。そして夢破れてMarkdownを物理本に使わなくなったんですが。
で、これは間違いなので
構造ではなく記法と表現の層で捉える。表現の層でのつらみをスタンスとして持っておく必要がある
HTMLでの表現の不足分はHTMLで書くように、の不足は
でカバーすることに。
でも、それはしたくない。Markdownでは難しいのは数式、採番、相互参照を解決する必要がある。
このあたりはMarkdownとHTMLの関係と似ている
よく鹿野さんが出す図!
— ひだるま (@hid_alma1026) 2019年11月14日
そこでPandoc
Pandocの本懐は多様なドキュメント形式が暗黙的にもつ構造を「Markdownの構造」で把えるためのツールであること
n月刊ラムダノートはmdからメタ情報を抽出注入してupLaTeX+dvipdfmx。7人くらいの著者でまわしてもらってると思う
Pandocの持つ型はMarkdownの記法から自然に得られる最低限のドキュメントの構造
最低限のみなので、見た目で原稿をごまかせる余地がある + ない
もうひとつ、「見た目で原稿をごまかせる余地がある」は、「見た目で原稿をごまかせる余地がない」のほうですね
— keiichiro shikano λ♪ (@golden_lucky) 2019年11月16日
- 読み返してみると、訂正前のメモ論理おかしいですねここ。申し訳ないです。
表現力が限定的であることの利点は、複数著者の記事でも統一感を出しやすいこともあるようです。
構造を補う豊富なツールチェインも
冊子本で使える拡張
YAML Metadata Book
YAML自体が記法の一部になっているともいえる
パターンマッチの記事書いてそうなメタデータだ
— ひだるま (@hid_alma1026) 2019年11月14日
YAMLが本当に使いやすいのかは置いておいて、本文要素とは独立した設定であるメタデータは 設定記述言語で書けた方が嬉しい。それはそう。
XML/HTMLに慣れてしまった人は生タグで書くし、に特化してしまった某塾などは何もかも
アレな言語で書いてしまったりしますが……
pandoc-citeproc+CSL(citationstyles.org/)
LaTeXにサイテーションを任せるべきではない
一瞬 :thinking_face: になりましたが、変換後に.texにサイテーションを足していくのではなく
.mdの段階で書けるようにする、という話っぽい?
今新しく考える必要がない
codeblock
ハイライトなど、LaTeXに任せることもできる
脚注
アンカーと本体を分けて記述できる
あと、脚注用のPandoc拡張の名前は、そのものずばりfootnotesです
— keiichiro shikano λ♪ (@golden_lucky) 2019年11月16日
メモから拡張名が抜けてました。は、少なくとも基本はアンカー部分にそのまま本体を記述するので
パッと見分かりづらいんですよね。
Pipe Tables
これが多分一番分かりやすい。レンダリングを完全制御できるわけではない。キャプションの記法はイケてない
やっぱりプレーンテキスト状態を考えると、アスキーアート的な表現の表が1番見易いんですよね。 左・中央・右寄せ用の指示記号もあるので大抵は困らないし。
でもやっぱり複雑な図表や記述と装飾後の見た目が不一致な項目には弱い。 発表ではなかったものの、先に挙げたMarkdown+CSS本では「やっぱり図表はGUIが欲しい」旨がありましたが、 完全にそう。
Pandoc フィルタ
Pandoc内部型の値を直接プログラムで操作できる
「本文内の行コメント」のような仕組みを導入するのも可能。文字置換も容易に自力でいける。
例えば、他社ではRust本の執筆をしてそうな『n月刊ラムダノート』ではパターンマッチの記事を書いた著者の方の名前表記はプレーンテキスト中の本文と実際の表記が異なり、これを変換時に処理するなどもしたとか。
課題
- 生のLaTeX記法を埋め込めるか(HTMLよりも構造化がないので厳しい)
では
\
から始まるとMarkdownには存在しない、コントロールシーケンスかと思われたり、
%
ではコメントアウトになったりとか、そういうところですね。
XML的な、構造を埋め込む考えではなく、むしろ構造を暗に表す記法そのものは問題になる PandocはMarkdownに対し補完的に使える
Markdown+CSS?
CSS Paged Media Module によってWebブラウザで可能な表現をPDF表現側に持ってくる?
補足
n月刊ラムダノートにおけるMarkdown執筆のワークフローの紹介。かなりよくできていると思います。
マークアップへのスタンスについては
も良い記事だと思います。
Markdownでどうやって原稿を書くか
こちらの発表はアンテナハウス小林氏。
Markdown概観
- 対象の内容を散文に限定して読みとり、編集を容易に
- そのままではドキュメント、冊子には向かない?
HTMLメタタグ
- HTML全体ではなくbodyの一部
- Markdown部分はMarkupが少なく可読性が高い
CommonMark
- Markdown like をMarkdown記法
- HTMLタグもどきをHTML記法と呼ぶ。MarkdownはHTMLとHTML Likeを区別しない
- 複雑なのはHTMLでいいやんという方針だったので
- CAS記法つくってたけど、Markdownの方がええやんと思ってたけど、曖昧さがある
- Standard Markdownの動き(2012~)
- 原作者から不評、2014にcommonMarkに改称
- めっっっっちゃ複雑な仕様。600くらいサンプルがあるが……。リアルタイムプレビューと併用すれば現実的?
- 参照実装CとJavaScript(BSD)
- Pandocの人が中心
<hoge>fuga</hoge>
のようなHTMLに含まれないのがHTMLタグもどき。XMLによってはXMLタグになったりするのもありますね。
Markdown
Markdown記法の説明が主なので、メモで抜けてるところは普通にMarkdownのドキュメントで補完できます。
- Unicodeで本文
PlainText, ASCII句読点文字, 空白, 空行で構造を付加(マークアップ)
- まだASCII句読点を使いきっていない
ブロック要素(HTML5ではフロー)内容はフレーズのみ
- p, headings, codeblock, hr
コンテナブロック
- フローかつネストフローがネスト可能
Headings
- CodeBlock
- 4indent式
- コードフェンス記法方式(3
~
または3```)
- 水平線
- 3以上の
-
、直前に文字を置くとh2になってしまう
- 3以上の
- list
- Bullet List
- Order list
- 強調
_
or*
_
の場合スペースが要る
- コードスパン ```
- link, 外部と内部, リンクテキスト
- full, collapsed, shortcut
- autolink, email auto link
<
abspath>
- Image
- inline
- ref link
- full
- 強制改行。オリジナルでは2スペース、 CommonMarkでは
\
MarkdownにならないHTMLタグ
- Ex: section,がない
- div, span の範囲指定
- Tableの標準がない
構造化というか、任意のブロック・インラインを作る仕組みがない。当たり前なんですが、アプローチを結構変える必要が出ますよね。
対処
- HTML直書き
- 処理系で工夫
- Markdownを拡張
- Ex: GFM,
1がいいと思ってたけどPandocもありかなと先刻の発表を聴いて思った
Pandoc詳しくは知らなかったんですね。道理でつらみが極まるコードががが。
HTMLとMarkdownの混在
- マークアップの文字扱いが異なる
- HTML文脈でのASCII句読点文字マークアップは解釈されない
- CommonMarkではHTMLブロックが明確。7種
- 開始条件、 終了条件
- インラインでは形式的にタグとみなせればHTMLとしておく
- OK: Foo
<responsive image src="hoge.jpg" />
- NG:
- OK: Foo
同じ文字でも、改行空白などの文脈で解釈が異なる
冊子本の形を作る
- 版面
- 図版の大きさの別途マークアップ
- 索引
- 脚注
見出しIDのマークアップ
同じ名前の見出しのID重複を避けるため処理がいる
図版マークアップ
- HTMLタグ
表のマークアップ
脚注のマークアップ
参照のマークアップ
- 参照元はMarkdownlink
索引
CF.W3C JLREQ
冊子本の構造について、スライドの図ではAppendix前にあとがきが。
あとがきはJLREQでは索引後では?みたいなバトルをした
Markdown+CSS+AHFormatterによるPDF化
処理の流れを説明する発表。
に書いてあるので(というかバッテリが切れたので)メモ省略。
ドキュメント用のMarkdownは全て結合してから処理をしていく流れのよう。
Balisage: Markup 2019 発表の抄
Balisage フランス語で「マークアップ」
元文書は45ページ、今のスライドでは無理なので抄で
この発表はかなり新鮮味の強い内容でした。おっしゃられたようにかなり駆け足だったので抜けがあるかも。
https://www.antenna.co.jp/AHF/ahf_jirei/pdf/201909/Loose-leafPublishingUsingAntennaHouseAndCSS-J.pdf
ルーズリーフ出版とは
- Page番号は変更せず内容を更新していく出版方法
- 「加除式書籍」の名が一般的
- 法令出版などではよく要請される
- ページ更新が入ると1.10など
需要
- 低コスト出版手段がない時代は一般的だった(版をつくるコスト)
- 法文書
- 古い版の保持の必要
- 2000ページなどの量
- ライフサイクルがめっちゃ長い
- 日常業務で紙に書きたしたりしている
Municodeとは
AHFormatter+CSS との関連
XPPを従来の組版システムとして使っていたが、使いこなしていない XPPのオペレータが限界 今回交換時期と判断 AHFormatterにはそのままではポイントページ番号・参照生成の直接生成機能がない
CSSなら敷居が低い。ルーズリーフ機能はAHFにもなかった
課題
- diffのとりかた
- 参照生成
エリアツリー 概念
ビジネス要件
条例はWEBでも公開されているので
- ワンソースマルチユース
- XPPの変換が安定していなかった
CSS組版の課題
XML用意
この辺りはスライド公開待ち。
- ページ端にのせる情報
エリアツリー
- 構成されたページのXML表現
- 段落が複数ページにまたがると複数のエリアツリーが含まれる
- AHFはエリアツリーを入力から生成
- これをもとにPDF
info
各変更の開始と終了 (Municode ではtake)
process
- 形式、番号の設定
- 更新
今後
- 更新の自動化
- DeltaXMLなどの古いツールでは2エリアツリーの比較、シーケンスの変更を判断、必要に応じてマーカーを足す
- 更新履歴の反映するエリアツリーへ変更ページ挿入の自動化
- Municodeでは現在PDFで手動、これを必要に応じてエリアツリーを変更するものへ自動化を実現
AHF次期バージョンと目指すもの
概略
XSL-FOが元々の強み
各種形式への出力
多言語が要る企業でのマニュアルなど
タグ付きPDFもできるとのこと。

- 作者: アンテナハウス株式会社
- 出版社/メーカー: アンテナハウス株式会社CAS電子出版
- 発売日: 2017/10/09
- メディア: Kindle版
- この商品を含むブログを見る
XSL-FOはW3Cの勧告するXMLをドキュメントとして綺麗に出力するための規格、でいいのかな。

XSL-FOの基礎 第2版: XMLを組版するためのレイアウト仕様
- 作者: アンテナハウス株式会社
- 出版社/メーカー: アンテナハウスCAS電子出版
- 発売日: 2017/03/28
- メディア: Kindle版
- この商品を含むブログを見る
DITA
— ひだるま (@hid_alma1026) 2019年11月14日
JATS TEI
— ひだるま (@hid_alma1026) 2019年11月14日
XMLの使われ情報
— ひだるま (@hid_alma1026) 2019年11月14日
世の中は知らなかった仕様でいっぱいだ……。
目標
より良い欧文組版を目指すv7
— ひだるま (@hid_alma1026) 2019年11月14日
海外の顧客が増えてきたとのことで、必然と要望が上がるようです。
NEWS
http://docs.oasis-open.org/dita/dita/v1.3/dita-v1.3-part0-overview.html
段落内改行位置 BPIL
— ひだるま (@hid_alma1026) 2019年11月14日
box decolation、ページまたぎ時の調整
— ひだるま (@hid_alma1026) 2019年11月14日
table-row widows orqhans
— ひだるま (@hid_alma1026) 2019年11月14日
unbreakable wordsの強化
— ひだるま (@hid_alma1026) 2019年11月14日
DropCapsに画像を許容
— ひだるま (@hid_alma1026) 2019年11月14日
GUI改良
— ひだるま (@hid_alma1026) 2019年11月14日
欧文分割アルゴリズムがTeX系ライクな挙動にってことでいいのかな。
質疑
索引ID, XSLT、その規則は? A.内部処理
— ひだるま (@hid_alma1026) 2019年11月14日
ラムダノート社代表からMarkdown+CSS+AHFormatterへの質問。回答をちゃんと聞きとれていないかも。とりあえず索引用マークアップを機械的(素直に?)に処理していると。
これは参考です。
唐突に見せびらかしたくなったので見せびらかすんですが、索引のこれ、TeXで自動でやってます。 pic.twitter.com/aVYBCc1Mzv
— keiichiro shikano λ♪ (@golden_lucky) 2017年10月27日
PandocでのJATS出力は壊れるか? A.表現力低いので壊れることはないと思う。でも内部処理理解してないとクリティカルな文書はしない方がいい。XSLTでできるならその方がよいのでは
— ひだるま (@hid_alma1026) 2019年11月14日
JATSをバリバリに利用している方からPandocの利用可能性についての質問。応答は鹿野氏。軽量マークアップ変換ツールの類使ったことのある方は分かると思うんですが、デフォルトの挙動って「よく分からないけどいい感じにしてくれる」方向のがほとんどなので、謎の補正処理的なのが色々くっついたりするんですよね。出力を予想できるレベルにならないとクリティカルなブツは本当につらいと思います。況んやMarkdown to Pandocをや。
CSSの標準も進んでるので対応強化すべき
— ひだるま (@hid_alma1026) 2019年11月14日
Vivliostyle代表からAHFormatterのCSS対応レベルについての質問。これから更に頑張る旨の返答。
会社としてのVivliostyleは更にトリムマーク株式会社になって、というのはおいておいて、 HTML+CSS組版のVivliostyleの源流はここにあったんですね。
終了
名刺交換会の時間、こういう身分だとかなり萎縮してしまう……。 何人かご挨拶させていただきました。
軽く会話した内容ですが、
この辺に集約されるなあ。
あとアドベントカレンダーへのプレッシャーが上がったりしました。自業自得……。
なんか情報量ない割に長くなってしまったのでスライド公開とかされたら不要箇所削りたいですね。