タグ別アーカイブ: Markdown

CommonMark文書をcmarkでXML形式にする

CommonMark[1]処理系のリファレンス実装であるcmark[2]は、その抽象構文木(AST)をXMLとして出力できます。さらに、このASTの文書型定義(DTD)も存在します。公開されていて、身近でミニマルなDTD、また文書のASTとして学習にも有用です。cmarkのインストール、DTDについての詳細は割愛します。

次のようなCommonMark文書があるとします。

# 見出しレベル1

CommonMarkにはDTDがある。

## 見出しレベル2

docutilsにもDTDがある。

これをcmarkでXML出力すると、次のようになります(xml:space="preserve"プロパティを省略して表示しています)。

<document>
<heading level="1"><text>見出しレベル1</text></heading>
<paragraph><text>CommonMarkにはDTDがある。</text></paragraph>
<heading level="2"><text>見出しレベル2</text></heading>
<paragraph><text>docutilsにもDTDがある。</text></paragraph>
</document>

CommonMarkのDTDの一部を抜き出すと、次のようになっています(表示を省略した箇所は「…」のように記述しています)。

<!ENTITY % block
         'block_quote|list|code_block|paragraph|heading|thematic_break|html_block|custom_block'>
<!ENTITY % inline
         'text|softbreak|linebreak|code|emph|strong|link|image|html_inline|custom_inline'>
...
<!ELEMENT paragraph (%inline;)*>

<!ELEMENT heading (%inline;)*>
<!ATTLIST heading
          level (1|2|3|4|5|6) #REQUIRED>
...
<!ELEMENT text (#PCDATA)>

CommonMarkの処理系を実装するときに厄介な、ある記法の途中での他の記法の割り込み処理などは変換後のASTには登場しませんから平和な見た目です。さて、このCommonMarkのDTDですが、コメントや見た目の調整のための改行を含めても90行程度。さらにこのXMLは変換前はCommonMark文書ですから、おおよそどんな見た目の記述がこの構造になるかの対応付けも整理をつけやすいのではないでしょうか。「<html_block>」や「<custom_block>」(あるいはこれらのインラインマークアップ)について真面目に考えるならもう少し難しくなりますが、CommonMark文書のASTとしての文書型定義は相当にシンプルです。


こんな記事[3]を見つけました。Markdownからの変換としては多くはLaTeX、近頃はCSS組版などがありますが、ASTをXMLで出力できるならこういったアプローチも可能ですね。目的によってはMarkdownを変換したXHTMLから更に変形するよりも単純な記述で求めるPDF出力を得られるでしょう。
ところで、アンテナハウス製品には最近のフォントも組版できるXSL-FOプロセッサー、Antenna House Formatterがあります。次回、CommonMarkのASTをFOに変換したものをAH Formatterで出力してみる予定です。


参考資料

  1. [1]https://commonmark.org/
  2. [2]https://github.com/commonmark/cmark
  3. [3] Markdown + XSL → PDF


Antenna House Formatter

DITA/XML Service Antenna House


関連記事


XMLをMarkdownに変換することについて

前回はMarkdownをDITAに変換する方法について紹介しました。
今回のテーマはXMLからMarkdownへの変換についてですが、見方を変えると、これは「なぜ情報量を落とす不可逆な変換をするのか」ということについてを考えることになります。
もちろん様々なニーズにより行われるのでしょうが、1つの文書型を扱う上でのこと、複数の文書型を扱う上でのこと、そして文書型のことを考えないときのことをみてみましょう。中間形式としての軽量マークアップについて扱っていますが、ライティング形式として扱いやすいといったメリットは今回は省きます。

XMLの欠点として挙げられることの多い点に「複雑」「冗長」といったワードを聞くことがあります。ここでいう「複雑」は構造の話であり、「冗長」は単純に統一された要素と属性のマークアップ記法によって起こる話といえるでしょう。軽量マークアップの多くはまさにこの点を克服するものですが、これは構造の表現力や記法の統一性とのトレードオフでもあります。

ある1つの文書型について考えてみます。文書型情報を持つ「XMLアプリケーション」と呼ばれるもの、XHTMLやDocBookやDITAといった文書では、「それらの文書型を背景に持ちつつ軽量な記法を使う」、今までの記事で取り上げてきたMDITAでいえば「トップレベルの見出しはtopicのtitle、最初の段落はshortdescにする」といったことが可能です。つまり、軽量の記法と変換される構造の対応を一対一に近いものにできます。文書型にもよるでしょうが、「XMLの構造を潰す」ものとしては最小限、不可逆ではあるものの復旧が行える可能性が高いものです。

複数の文書型を扱う上での軽量マークアップを経由する変換について考えてみます。ある文書型Aの文書から文書型Bの文書を変換、生成したいというときにはXMLにおいてはXSLTを使う方が大抵の需要に沿うでしょう。XSLTを逐一用意する必要こそあるものの、明確な構造の対応が取れるのであれば落とす情報、残す情報の選択も自在です。

この場合に落ちる情報には文書型Aの構造aに対応するBの構造がない、といったものもあります。ここで落ちる情報がXSLTを用意する手間を上回り、かつそれでも変換の必要があり、Aの文書もBの文書も相互にやり取りする頻度が高いといった場合には軽量マークアップを保存の形式に選択するのも考慮に入れてもよいかもしれません。変換先に該当の構造がなければその構造は潰れるしかありません。ある軽量な構造Mを、Aのときはこの構造になることにして、Bのときはこの構造を、とするのであれば、処理系の実装言語や環境の問題を除けばMからA、MからBの変換と、ABのXML+XSLT変換はそう変わらないことになります。この場合のMは、PandocやDocutilsの扱う抽象的なデータ型となるでしょうか。


アンテナハウスでは以前に『Markdown+CSS組版で冊子本(PDF)を作ってみる』[1]という書籍を作成しました。また、「Markdown + CSS/TeXで冊子本を作ってみた」[2]というセミナーを開催しました。このセミナーでは、Pandocを使用し、Markdownの拡張機能から抽象データ型にしたものをLaTeX用に変換し書籍を作成するラムダノート様による第一部と、Markdownと、HTMLタグで不足する構造を補ったものをXHTMLに変換し、CSSでスタイルを付与しAntenna House Formatter[3]で書籍を作成するアンテナハウスの第二部となり、対照的なアプローチでの発表となりました。少し話が逸れますが、Markdownそしてその他の軽量マークアップを最終的にHTMLやPDFといった閲覧用の形式にするにあたり、変換におけるどの層にカスタマイズのウエイトを置くのか。様々なバリエーションがあり、必要なスキルセットも方法によって異なります。これは、(できていたかは別として)構造と分離していた表現をどの段階で付与するかということでもあります。抽象データ型の変換で難しいことが起こるときは、(この記事筆者の体感的には)概ねこの部分の感覚の不一致です。


さて、最初のテーマ設定に戻ります。「なぜ情報量を落とす不可逆な変換をするのか」の答えとしては、「落として問題のない情報であるから」ということになるでしょうか。
当たり前の結論ではあります。
しかし「保存形式はXMLより必ずMarkdownがいいのだ」といった話ではなく、「補完可能」あるいは「変換不能」の情報があるとき、元のリッチな表現力の形式に固執すべきかということを考えてみてもよいかもしれません。

参考

  1. ラムダノートの技術 Advent Calendar 2019

関連資料

  1. [1]『Markdown+CSS組版で冊子本(PDF)を作ってみる』 アンテナハウス CAS-UB出版
  2. [2]Markdown + CSS/TeXで冊子本を作ってみた※終了しています
  3. [3]Antenna House Formatter V7

DITA/XML Service Antenna House

Antenna House Formatter

関連記事

  1. Markdown+CSS組版で冊子本(PDF)を作ってみる
  2. XMLエディタで始めるリッチなMarkdown入門?
  3. MDITA(LwDITA uses Markdown)の書き方
  4. DITAとしてのMDITA
  5. Markdown DITAとMDITA
  6. MDITAをDITAに変換する

MDITAをDITAに変換する

さて、前回の記事ではMarkdown DITAとMDITAの違いについて確認しました。
Markdown DITAはMDITAと比べDITA形式へ変換するためのライティング形式の向きが強いという感想を書きましたが、MDITAをDITAへ変換することもそう難しいことではありません。

DITAパブリッシングエンジンDITA-OT[1]には、標準的な出力形式として「Normalized DITA」があります。
Normalized DITAについてはDITA-OTの出力形式についてのページ[2]や弊社の「DITA入門 パブリッシング」のページ[3]でも軽く紹介をしています。外部プロジェクトなどで使用できるように、内部パスの依存関係などを処理した状態のDITAを出力するものです。DITA-OTを使ってMarkdownファイルをDITAのXML形式にするには、この出力を用いるのが便利そうです[4]。XMLオーサリングソフト[5]などではより簡便な方法が用意されているかもしれません。

今回処理するMDITAファイルは次のsample.mdとします。DITA-OTのバージョンは3.4.1を使用しました。

---
id: sampleofmd
keyword:
- markdown
indexterm:
- md
---

# Markdownサンプル {.task}

これはMarkdownのサンプルです。

この文書は`dita --format dita`でDITA形式に変換されます。

## MDITAでセクション

これはMDITAでのセクション例。IDは自動で振られています。

後からの比較のために、MDITAでは記法として有効でないものを含んでいます。

通常のDITAファイルであればDITA-OTは単体ファイルでも変換が可能ですが、
このsample.mdを直接処理しようとすると、エラーを吐きます。

dita -i \topics\sample.md --format=dita -o .
Error: Failed to run pipeline: [DOTJ012F][FATAL] Failed to parse the input file 'file:/d:topics/sample.md'.: file:/d:topics/sample.md Line 1:Content is not allowed in prolog.

とりあえず今回はマップ経由で変換を行うことにします。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd">
<map id="index">
<title>map title</title>
<topicref href="topics/sample.md" format="mdita" />
</map>

結果を見ると、指定した場所にマップファイルとフォルダ構造を保った
トピックファイルがあります。フォルダへ移動すると、sample.mdファイルがありますね。
……? md? と思いながらファイルをエディタで開いてみると、拡張子はともかく
DITAのTopic情報タイプになっています。


<?xml version="1.0" encoding="UTF-8"?><?path2rootmap-uri ../?>
<!DOCTYPE topic
  PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic id="sampleofmd"><title>Markdownサンプル {.task}</title><shortdesc>これはMarkdownのサンプルです。</shortdesc><prolog><metadata><keywords><keyword>markdown</keyword></keywords></metadata><data name="indexterm" value="md"/></prolog><body><p>この文書は<codeph>dita --format dita</codeph>でDITA形式に変換されます。</p><section id="mditaでセクション-secid"><title>MDITAでセクション {#secid}</title><p>これはMDITAでのセクション例。IDは自動で振られています。</p></section></body></topic>

topic のidはYAML Frontmatterで指定した通りになっています。
{」「}」囲みで要素の追加マークアップを行う記法は処理されず、
そのままタイトルに残っていますね。

本文の最初の段落はshortdescに格納されています。

YAML Frontmatterと変換後のPrologを見ると、
keywordskeywordは想定通り処理されています。
一方でindextermは汎用のdata要素
namevalueとして格納されてしまいました。
YAML FrontmatterのKeyValueはLwDITAの対応範囲内で処理されていることが分かります。

セクションを切った箇所では、Markdown記法の見出しが、
sectionidの値として自動で振られています。ここも記法が対応していないので、
{」「}」で囲われたマークアップは処理されていません。id内では記載できる文字の関係か、
微妙に表記が変わっています。

本文段落、
`」「`」で囲われた箇所が<codeph>に変換されているのが確認できます。
もし<pre>になることを意図していた場合はExtended Profileでタグを直接書きます。

それでは、md.ditamapのtopicrefformatを書き換え、
これをMarkdown DITAと認識させてDITAに変換してみましょう。

<topicref href="topics/sample.md" format="markdown" />

先程と同様にマップをDITA-OTの入力に指定します。

<?xml version="1.0" encoding="UTF-8"?><?path2rootmap-uri ../?>
<!DOCTYPE task
PUBLIC "-//OASIS//DTD DITA Task//EN" "task.dtd">
<task id="markdownサンプル"><title>Markdownサンプル </title>
<prolog><metadata><keywords><keyword>markdown</keyword></keywords></metadata>
<data name="id" value="sampleofmd"/>
<data name="indexterm" value="md"/></prolog>
<taskbody><context>
<p>これはMarkdownのサンプルです。</p>
<p>この文書は<codeph>dita --format dita</codeph>でDITA形式に変換されます。</p>
</context>
</taskbody>
<task id="secid"><title>MDITAでセクション </title>
<taskbody>
<context><p>これはMDITAでのセクション例。IDは自動で振られています。</p></context>
</taskbody></task></task>

トピックタイトル行で設定したtaskが反映されています。一方で、YAML Frontmatterに記述したidは先程のindextermのように扱われ、topicのidにはなってくれていません。さらに、構造が色々壊れたものが出力されていますね。変換のコード実装を読まないとなんとも言えませんが、Strict Taskを想定しているのであればsectionは出現しませんから、Markdown DITAを書く場合には、より取り得る要素に注意しながら記述する必要があるということでしょうか。

MDITAをDITAに変換しました。Markdown DITAとの違いに注意する必要はありますが、
ドキュメントの段階的なDITAへのステップとして、
あまりピーキーではない制約のMarkdown文書をDITAの形式へ変換できることは
確かに悪くないと感じました。

DITAやDITA以外のXMLをMarkdownに変換する方向の試みも存在します。
次週はこのアプローチについて述べる予定です。

  1. [1] DITA-OT
  2. [2] Normalized DITA – DITA-OT
  3. [3] DITA-OTの対応する出力形式
  4. [4] Markdown content – DITA-OT
  5. [5] XML/DITA関連製品 – アンテナハウス

DITA/XML - Antenna House

関連記事
XMLエディタで始めるリッチなMarkdown入門?
MDITA(LwDITA uses Markdown)の書き方
DITAとしてのMDITA
Markdown DITAとMDITA
XMLをMarkdownに変換することについて

Markdown DITAとMDITA

前回、MDITAのDITAとしての機能について紹介しました。
MDITAからDITAへの変換の前に、DITAのパブリッシングエンジンDITA-OT[1]の対応している「Markdown DITA」について、MDITAとの違いをおさえることにします。

DITAの軽量化版を作るという思想はLightweight DITA(LwDITA)[2]以前からありました[3]。というより、それらを受けた流れでLwDITAが登場します。ともかく、LwDITAは「標準化」という大きな違いはあるものの「唯一の軽量化されたDITA」ではない、ということです。

DITA-OTが対応する「Markdown DITA」は、LwDITAとは別にページが用意されています[4]。
LwDITAが策定中であるということもありますが、こちらは「フォーマットの仕様」というよりも、
「処理系に独自実装されたMarkdown(派生の)簡易記法」という理解をするのがよいでしょう。

Markdown DITAとMDITAはともにYAML Frontmatterにはよるメタデータの記述に対応していたり、Markdownとしての基本的な記法は共通しますが、(少なくとも今のところ)Markdown DITA側でしか対応していない記法があったり、それによる記述順序や変換時の要素の違いが存在します。

Pandoc header_attributes

PandocのMarkdownで拡張される見出しの記法に対応します。

# header {#id .outputclass}

見出しと同行で、半角空けて「{」「}」で囲まれた箇所に「#」とくっつけてid、「.」とくっつけてoutputclass(説明は省略します)を見出し情報に付与できます。見出しレベルが1、つまりトピックタイトルとなる見出し要素の場合、ここに「.task」「.concept」「.reference」と記述すると、それぞれ「task」「concept」「reference」としてMarkdownファイルが扱われることになります。他のものはoutputclass属性として扱われるだけです。

セクションレベルの見出しでは、「section」「example」が同様に特殊な扱われ方をします。

Hard Line Break

「文末に半角スペース2つ以上」としてMarkdownに一応用意されているもののDITAの書式に存在しない強制改行(HTMLにおける<br />)は<?linebreak?>として変換されます。

画像

画像の記法自体はMDITAでも対応していますが、Markdown DITAでは画像のタイトルを挿入できます。タイトルなしであればインラインの画像、タイトルがあれば<fig>の子として画像を変換するようです。


![alt](url "title")

keyref

リンク記法でURLを記載する「()」を省略した場合、keyrefとして扱われるとあります。URL参照するリンク、画像がこの対象です。変換されると<xref keyref=”key” />のようになります。

[key]
![key-2]

shortdesc

MDITAではショートデスクリプションは「本文の最初の段落要素」のようになっていましたが、Markdown DITAにはありません。

特殊化

「Pandoc header_attributes」の箇所で触れたように、Markdown DITAでは汎用トピックではなくtaskなど特殊化した情報タイプへ変換される場合があります。その場合、本文最初の段落がcontext要素として扱われたり、続く番号付き箇条書きがstep要素として扱われるなどします。

ここまで見てきましたが、Markdown DITAは「DITAを書ける人間が、XMLオーサリングツールがない環境でライティング形式として使用する」という用途が向いているようです。かなり近い性質の構造へ向かう文書のMarkdown記法に、こうした違いがあるというのはなかなか趣深いことではないでしょうか。

  1. [1] DITA-OT
  2. [2] Lightweight DITA: An Introduction Version 1.0
  3. [3] インテリジェントコンテンツにおけるAXの役割と考察 (2016/11/18, 関根哲也)情報処理学会研究報告 Vol.2016-DC-103 No.2
  4. [4]Markdown DITA syntax reference – DITA-OT

DITA/XML Service Antenna House

関連記事
XMLエディタで始めるリッチなMarkdown入門?
MDITA(LwDITA uses Markdown)の書き方
DITAとしてのMDITA

DITAとしてのMDITA

前回の記事で、MDITAで使えるMarkdown(派生)の記法について紹介しました。
しかし、MDITAの特徴は「Markdownの文法でトピック指向ライティングしたものをDITAに取り込める」ことに限りません。
DITAの機能(の一部)をMDITAから使うことができるのです。
とはいっても、Extended ProfileでHDITA(HTML5)の記法を使用してのもので、
「MDITAの機能」と言っていいのかは微妙なところですが。
前回の記事内容ではMarkdownとしてMDITAを各種ツールで扱うことができましたが、
今回紹介する機能を使用して期待した出力結果を得るには、
DITAのパブリッシングエンジン[1][2]を使用する必要があります。

conrefやkeyrefでは、リンクのURLやファイルのバージョンなど
変更される可能性がある(そして文書自体に変化は無い)要素の
文書中には参照を残しておき、その内容を別ファイルに
置くことができます。動作のイメージ図は「DITA超入門」[2]をご覽ください。

<!-- about.md -->
AH Formatterの最新版は<span data-conref="latest.dita#ver" />です。
<!-- latest.dita -->
<ph id="ver">7.0</ph>では...

パブリッシュした結果では次のように表示されます。

AH Formatterの最新版は7.0です。

また、出力に表示する要素をフィルタできる機能も限定的に使用可能です。
data-props属性に値を指定することで、トピック側の準備は完了です。


...XSL-FOでは上のように記述します。
<p data-props="notxslfo">もしCSS組版なら......</p>

フィルタの動作を記述する.ditavalファイルの中身はXMLで記述する必要があります。


<!-- ifcss.ditaval -->
<prop att="data-props" action="exclude" val="notxslfo" />

パブリッシュした結果では

...XSL-FOでは上のように記述します。

と、excludeした値が消えています。

これらの機能は、HDITAではdata-conrefdata-keyref属性にidを指定することで利用できます。

HDITAにはフレーズ要素<ph>が無いので、
単語などのkeyrefconrefでの置き換えには
<span>を用います。

LwDITAについてのより詳細な情報は、OASISによるイントロダクションのページ[4]や、前回の記事などをご覧ください。
次回は、MDITAからXDITA、DITAへの変換と編集についてを予定しています。

参考

  1. [1] DITA入門 パブリッシング
  2. [2] DITA-OT
  3. [3] DITA超入門 – アンテナハウス
  4. [4] Lightweight DITA: An Introduction Version 1.0

  5. DITA/XML - Antenna House

    関連記事

    1. XMLエディタで始めるリッチなMarkdown入門?
    2. MDITA(LwDITA uses Markdown)の書き方
    3. Markdown DITAとMDITA
    4. XMLをMarkdownに変換することについて

XMLエディタで始めるリッチなMarkdown入門?

Markdown記法とその派生は様々にあり、使用される場面もブログポストの原稿であったり、
Wiki記法(この記事ではHTMLへ変換される簡易記法、と考えてください)の1つであったりするので、「Markdownドキュメント」といっただけではどんな文書なのかはよくわかりません。「Markdown記法を使用して書かれている箇所があるドキュメント」くらいにはいえるのかもしれませんが。とはいえ、基本的な記法については共通しています。なので一度基本を覚えてしまえばその部分は他の派生へも通じ、その学習コストを下げることができます。

さて本題です。
「Markdownは分からないが手元にリッチなXMLエディタがある」そんなことはないでしょうか。

XML技術を駆使するDITAというドキュメントのアーキテクチャがあります。
いきなり導入するにはなかなか重量級な仕様と哲学があるので、
OASISのDITA CommitteeのSub Committeで、DITAやXMLを未だ使っていない層に向けたLightweight DITA(LwDITA)というものが考案されています[1]。
LwDITAはDITAの複雑な仕様から基本的なものを抽出し、XML、HTML5、Markdown(派生)の3つの形式でほぼ同じ表現力の記述を可能にしたものです。
特にHTML5、Markdownの形式(HDITA、MDITA)は、XML離れが激しい層へのアプローチ手法として考案された側面があり、XMLに触れなくともある程度のDITA体験が可能になっています。MDITAは単体ではGitHub Flavored Markdown(GFM)のサブセットのように扱えるので、GFMに対応したアプリケーションである程度執筆・編集のサポートが受けられます。

一方Oxygen[2]やXMetaL[3]といった、DITAをサポートするXMLエディタも
LwDITAもサポートし始めています。既にDITAのパワーをXMLエディタでフル活用されている方にはLwDITAの表現力は物足りないかもしれません。とはいえ、せっかくサポートされている機能です。もし手元に既にMarkdown対応のXMLエディタがあれば、試しに使ってみてはどうでしょうか。

参考資料

  1. [1] OASIS Lightweight DITA SubCommitteeのページ https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=dita-lightweight-dita
  2. [2] アンテナハウスの Oxygen情報ページ https://www.antenna.co.jp/oxygen/
  3. [3] アンテナハウスの XMetaL情報ページ https://www.antenna.co.jp/xmetal/

DITA/XML Service Antenna House

関連記事

  1. MDITA(LwDITA uses Markdown)の書き方
  2. DITAとしてのMDITA
  3. Markdown DITAとMDITA
  4. MDITAをDITAに変換する

マークダウン原稿を AH Formatter を使って PDF にする

自動組版を使って製本するにあたって、原稿を何で書くかという選択は後に使う労力を決定する重要な要素です。
その執筆形態はさまざまなものがあります。
例としては XML や HTML がありますが、これらはタグを駆使して書く必要があります。
これらに対して、マークダウンは基本的にタグを使いません。
マークダウンで原稿を書いて、それを製本に使用できれば執筆作業が簡便化されるかもしれません。

マークダウン原稿から AH Formatter 経由で製本用の PDF を作成することが可能です。
あくまで一例なので、この方法が絶対というわけではありません。

その手順の概要としては
1. 原稿をマークダウンで書く。
2. マークダウン原稿を HTML に変換。
3. HTML を XSLT で加工。
4. AH Formatter を使い HTML+CSS で PDF出力。
という手順です。

今回はその手順をごく大まかに説明します。

まず原稿をマークダウンで書きます。
その原稿を Node.js の markdown-it というプラグインを使って HTML化します。
次に目次や索引を XSLT で付与します。
最後に、できた HTML と CSS を使って AH Formatter で組版します。
そうすると冊子本PDF が出来ます。

この手順により冊子本を作成する手段にマークダウンというもう一つの選択肢が出来ました。

今回は個々の手順をまったく掘り下げませんでしたが
アンテナハウスがこの実践を本にまとめたものがあるのでご興味のある方はチェックしていただけると幸いです。
→ 「簡単!Markdown+CSSによる冊子本作り -理論と実践-

販売は PDF版のみですが、300円(税抜)と非常にお求めやすくなっております。
 
 
AH Formatter ロゴ

『AH Formatter』の評価版は以下のページよりお申し込みいただけます。是非、お試しください。
AH Formatter 評価版のお申し込み

『AH Formatter』についてお問い合わせがございましたら sis@antenna.co.jp 宛てにご連絡ください。


「技術書典7」に出展いたします。

来週 9月22日(日)に開催される「技術書典」(主催:TechBooster / 達人出版会)に向けて、最近、組版界隈で話題の Markdown(と CSS)を用いて、実際に技術同人誌『簡単!Markdown+CSSによる冊子本作り ―理論と実践―』を作成いたしました。当日販売いたしますので、ぜひお手にとってご覧ください。

『簡単!Markdown+CSSによる冊子本作り ―理論と実践―』の表紙

本書籍の内容については、先日、弊社ブログでご紹介しております。ご関心ございましたらご覧ください。
Markdown+CSS組版で冊子本(PDF)を作ってみる

◆ 技術書典概要
・開催日時:2019年9月22日(日) 11:00~17:00
・開催場所:池袋サンシャインシティ2/3F 展示ホールC/D(文化会館ビル2/3F)
・サークル名とブース番号:アンテナハウスCAS電子出版(き45D)
販売書籍
技術書典7

◆技術書典ご来場予定の方に

一般参加者は13時まで有償の整理券が必要です。ご注意ください。

整理券のご案内

整理券は1,000円で、3種類あります。

(1) Cホール(3階)から入場 11時~
(2) Dホール(2階)から入場 11時~
(3) Dホール(2階)から入場 12時~

弊サークルの場所は、展示ホールD(2F):き45Dです。

アンテナハウスCAS電子出版(き45D)

入場が13時過ぎると無償(ただし、待機列解消後)になります。Markdown本はたくさん印刷しましたので、まず売り切れはないと思いますので、遅くてもたぶん大丈夫なはずです。


Markdown+CSS組版で冊子本(PDF)を作ってみる

CAS電子出版では、今月22日(日)開催の次回技術書典7に向けて、新タイトル『簡単!Markdown+CSSによる冊子本作り ー理論と実践ー』を作成しました。

本書は、2019年9月22日開催の技術書典7にて販売しました。その後、2019年11月現在、アンテナハウスにて直販しております。直販冊子本のご紹介
また、2019年12月14日(土)開催の第2回技術書同人誌博覧会でも販売予定です。
技術書同人誌博覧会

この春に提供していただいたAH Formatterのケーススタディ『AH Formatter を用いた Markdown-PDF 変換事例紹介』(有限会社フェリックス・スタイル様)を参考にして、同じような方法で、もう少し冊子本としての構成をもつ原稿を、Markdownで執筆し、CSS組版で冊子本のPDFを作ることを目標にして、①全体の仕組みを考えて、②Markdownを学んで、③目次や索引を作成するXSLTスタイルシートを開発、④CSSスタイルシートを用意、⑤Javascript(Node.js)で一気に原稿からPDFを作る、ということを実践しました。

昨日、技術書典用の冊子本用PDFを印刷会社に入稿し、あとは、当日まで出来上がりを待つばかりとなりました。次に少しだけピックアップしてご紹介します。

本書の目次は次のとおりです。本体70ページ(表紙除く)となります。

はじめに………….3
第1章 目標、作業工程とツール……..7
1.1 目標………….7
1.2 作業工程………….7
1.3 ツール……………8
第2章 マークアップの目的と方法………11
2.1 マークアップの目的……….11
2.2 マークアップとタグ……….11
2.3 簡易マークアップ…………12
2.4 Markdown 完結か、折衷か………13
2.5 Markdown 構文………..13
2.5.1 段落(p)………….14
2.5.2 マークアップ用句読点文字……….14
2.5.3 実体参照について……….16
2.6 Markdown で表せないHTML の機能……….16
2.7 日本語段落作成の留意点……….17
第3章 原稿のマークアップ仕様の検討………19
3.1 不足する機能への対処…………19
3.2 Markdown 構文の文脈とHTML 構文の文脈……..20
3.2.1 ブロックレベルの要素……….20
3.2.2 HTML 文脈での ‘<‘ と ‘&’…….21
3.3 見出しのid のマークアップ………..22
3.4 テキストの修飾……….23
3.5 図版のマークアップ……….23
3.6 表のマークアップ…………24
3.7 脚注のマークアップ……….25
3.8 参照のマークアップ……….25
3.9 索引語のマークアップ…………26
第4章 本書の構成………..27
4.1 表紙…………27
4.2 本体…………27
4.3 本書の構成パート…………28
4.4 目次の自動生成……….29
4.5 索引の自動生成……….29
第5章 原稿ファイルからHTML ファイルへの変換……..30
5.1 原稿の加工方法……….30
5.2 XML 構文を満たすHTML…………30
5.3 変換処理フロー……….31
5.4 冊子全体の構造……….31
5.5 ひな型HTML…………..33
5.6 適正HTML…………34
5.7 組版用HTML…………..34
第6章 レイアウト設計………..35
6.1 基本…………35
6.2 判型…………35
6.3 ページのレイアウト……….36
6.3.1 基本版面…………..36
6.3.2 ノンブル…………..36
6.3.3 柱の配置…………..37
6.3.4 脚注…………..37
6.4 パート別バリエーション……….37
6.4.1 本扉…………..37
6.4.2 目次…………..37
6.4.3 索引…………..38
6.4.4 奥付…………..38
6.5 ブロックのレイアウト…………38
6.5.1 通常段落…………..38
6.5.2 番号無し箇条……….38
6.5.3 番号付き箇条……….39
6.5.4 ブロック引用……….39
6.5.5 コードブロック…………39
6.5.6 水平線…………39
6.6 見出しとキャプションの番号付け……….39
6.7 見出しの文字サイズと配置……..40
6.7.1 見出しの共通設定項目……….40
6.8 表のレイアウト……….41
6.9 図のレイアウト……….41
6.10 インラインオブジェクトのレイアウト………42
6.10.1 リンクの表示………….42
6.10.2 強調………….42
6.10.3 コード………..42
6.10.4 ユーザー指定レイアウト………..42
第7章 PDF の作成………..43
7.1 CSS 組版によるPDF 作成……….43
7.2 POD 用PDF とは……….43
7.2.1 PDF のページ境界……….44
7.2.2 カラーモデル……….44
7.2.3 デジタル配信用PDF………44
第8章 実践例の紹介………….46
8.1 基本版面・ノンブルと柱の実践例……….46
8.2 脚注の実践例…………47
8.3 目次の実践例…………48
8.4 索引の実践例…………50
8.5 段落とブロック引用の実践例……….52
8.6 箇条書きの実践例…………53
8.7 見出しの実践例……….56
8.8 表の実践例…………..58
8.9 図版の実践例…………59
8.10 参照の実践例………..61
第9章 まとめ………..63
9.1 実践のまとめ…………63
9.2 今後の方向…………..63
あとがき…………64
付録…………….65
参考文献…………67
索引…………….68

次の図は、Markdownの原稿をVS Codeで編集している画面です。

次の画面は本冊子の全体の構成です。

次の図は、Node.jsのコマンドラインで、原稿(mdファイル)からPDFを作成している画面です。全体で70ページほどですが、大体30秒ほどで原稿からPDFができます。

出来具合につきましては、ぜひ、技術書典にてお手にとってご覧いただきたく、ご来場をお待ちいたします。アンテナハウスCAS電子出版の配置は、き45Dです。

よろしくお願いいたします。

AH Formatter を用いた Markdown-PDF 変換事例紹介(有限会社フェリックス・スタイル様)

関連記事:
9月22日開催予定「技術書典7」のサークル情報公開!
11月14日(木)Markdownセミナー開催日が迫りました。


9月22日開催予定「技術書典7」のサークル情報公開! 

来月9月22日(日)池袋文化会館の2F/3Fで開催予定の技術書典7

日時 2019/09/22 (日) 11:00〜17:00
場所 池袋サンシャインシティ 展示ホールC/D
主催 TechBooster/達人出版会
一般参加 11時~13時のみ有料

昨日夕方よりサークル情報が公開になりました。

技術書典7 | サークルリスト

アンテナハウスCAS電子出版は、「き45D」が割り当てられました。

アンテナハウスCAS電子出版の頒布情報

今回の初出は『簡単!Markdown+CSSによる冊子本作り ー理論と実践ー』です。

本書自身Markdownで執筆して、AH FormatterでPDF化しています。

Markdownは原稿書きやすくていいですよ!

ぜひ、ご来場いただき、本書を手に取ってご覧ください。

(続き)
Markdown+CSS組版で冊子本(PDF)を作ってみる


Pages: 1 2 Next