Formatter Club 発足会に参加してきました
村上真雄さんから誘われて、Formatter Club 発足会のご案内 (CSS組版ブログ) に参加してきました。すでに、AH Formatter V6 の紹介 (CSS組版ブログ) から、Formatter Club 発足会のプレゼン資料などがリンクされています。個人的には、前田年昭さん(Line Lab.'s Web Page, East Asian Text Processing)、藤島雅宏さん(元電算写植機開発者)にお会いすることができたのも楽しかった。
奥村さん(奥村 晴彦 | Haruhiko Okumura)もいらっしゃったので、ついでに、実行委員としてしっかりと TeXユーザの集い 2011 も宣伝してきました(笑
簡単な XML 文書を TeX 形式へ変換してみる
Formatter Club 発足会のプレゼン中にでてきた簡単な XML 文書例を XSL-FO へ変換していたので、負けじと TeX 形式へ変換してみます。わざわざ TeX 形式へ変換する理由はとくにありません、ハイ。ここでは、xsltproc(XSLT プロセッサのひとつ)を使って、XML 文書を TeX 形式へ変換します。なお、ここでの XML 変換および TeX 組版環境は、Vine Linux 6 RC1(Vine Linux)です。
さっそく、Formatter Club 発足会のプレゼン中にでてきた簡単な XML 文書例を書きます。以下の内容を foclub-example.xml として保存しておきます。実は、村上さんがお出しになった XML 文書例と若干違います(笑 <タイトル> タグと <本文> タグを入れました。
<?xml version="1.0" encoding="UTF-8"?> <!-- FormatterClub 発足会 2011-07-27 に出てきた XML 文書例 --> <文書> <タイトル> <表題>簡単XML入門</表題> <著者>てふラボ</著者> </タイトル> <本文> <見出し>XMLを書いてみる</見出し> <段落>XMLはこんなふうに書きます。</段落> <段落>XMLはこんなふうにも書けます。</段落> </本文> </文書>
foclub-example.xml を TeX 形式へ変換するために、XSL をゴリゴリと書きます。以下の内容を foclub2tex.xsl として保存します。極々簡単な XSL です。
<?xml version="1.0" encoding="UTF-8" ?> <!-- FormatterClub 発足会 2011-07-27 に出てきた XML 文書例 --> <!-- foclub-example.xml を TeX 形式に変換 --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text" indent="no" encoding="UTF-8" /> <xsl:strip-space elements='*'/> <xsl:template match="文書"> \documentclass{jsarticle} <xsl:apply-templates /> </xsl:template> <xsl:template match="タイトル"> \title{<xsl:value-of select="表題" />} \author{<xsl:value-of select="著者" />} \date{<xsl:value-of select="日付" />} </xsl:template> <xsl:template match="本文"> \begin{document} \maketitle <xsl:apply-templates /> \end{document} </xsl:template> <xsl:template match="見出し"> \section{<xsl:apply-templates />} </xsl:template> <xsl:template match="段落"> <xsl:text disable-output-escaping = "yes"> </xsl:text> <xsl:apply-templates /> <xsl:text disable-output-escaping = "yes"> </xsl:text> </xsl:template> </xsl:stylesheet>
以下のコマンドを実行して、XML → TeX へ変換します。
$ xsltproc -o foclub-example.tex foclub2tex.xsl foclub-example.xml
生成された foclub-example.tex は以下のようになります。
\documentclass{jsarticle} \title{簡単XML入門} \author{てふラボ} \date{} \begin{document} \maketitle \section{XMLを書いてみる} XMLはこんなふうに書きます。 XMLはこんなふうにも書けます。 \end{document}
TeX → PDF へ変換します。ここでは、日本語組版エンジンとして pTeX を使います。
$ platex foclub-example $ dvipdfmx -r 1200 foclub-example
Adobe Reader で foclub-example.pdf を閲覧してみます。
XSL-FO と TeX との違いを考察、そして、次世代 TeX 組版への期待
foclub2tex.xsl をみると、XSL-FO 仕様へ変換する XSL とくらべて、ずいぶんとすっきりとしているようにみえます。それもそのはず、XSL-FO のプロパティに対応する TeX のそれが一切記述されていないのです。
日本語 TeX 組版で利用できるおもな汎用スタイルファイルは、ASCII さんの jarticle, jbook と奥村晴彦さんの jsarticle, jsbook です。これらのスタイルファイルは、とりあえず日本語 TeX 組版ができるだけであると割り切るべきでしょう。実際に、デザインの変更や独自拡張など組版結果を変更しようとすると、以下の 3 通りの方法が考えられます。
- 汎用スタイルを指定した上で、いくつかのマクロを上書きする
- デザインされた別のスタイルファイルを使う
- XSL による XML から TeX への変換に特化した、テンプレートとして使えるスタイルファイルを作る
AH Formatter による XSL-FO (+ AH 拡張) 組版 または CSS 組版と TeX 組版の共通点は、どちらもスタイルファイルを用意しないといけません。それぞれ XML + XSL、plain TeX に関する知識、プログラミングが必要です。
AH Formatter による組版と TeX 組版との大きく異なる点がいくつかあります。
ひとつめは、ユーザによる組版自由度の制限です。現時点で主流である日本語 TeX 組版エンジンである pTeX 自体には、もはや手がはいらない状況であると考えてよいでしょう。その上で、TeX はユーザによる TeX プログラミングにより、自由度が高い組版が可能です。しかしながら、その自由度が高すぎることにより、TeX プログラミングの知識を持っていないユーザにとって、分かりにくさ・とっつきにくさがあり、それゆえの TeX の難しさがあるように思います。同時に、TeX に関する Bad known how が多いのも事実です。
ふたつめは、ドキュメントの論理的な構造です。TeX ドキュメントは、通常、XML ドキュメントのような構造化ドキュメントと言えない*1。もちろん、TeX コーディングに慣れた TeX ユーザであれば、TeX コーディングは自明で、そのドキュメントは、十分に構造化されていると思える。
みっつめは、ドキュメントの構造解析です。「TeX/LaTeX の syntax は何なのか?そして、どのようにそれを構造解析するのか?」に対して、「TeX の文法は TeX しか分からない」という事実があります。とくに、グルーピングは、通常の {hoge} [fuga] だけでなく、
以上を踏まえると、XML から TeX 組版をする場合には、
が必要だと考えます。
一方、次世代 TeX として、LuaTeX が注目されています。LuaTeX は pdfTeX の後継となる予定で、将来、標準に TeX 組版エンジンになります。ZR さん(id:zrbabbler)の去年に発表されたプレゼン資料 日本人の知らないTeX ~TeXユーザの集い2010・招待講演~ [電脳世界の奥底にて] から表現をおかりしますと、LuaTeX の実装機能は以下のように表現できます。
LuaTeX = pdfTeX + Omega + Lua + MetaPost + OpenType
LuaTeX が様々なレベルで TeX 処理へ割込処理できるようで、「⼊⼒テキストのフィルタ」処理ができる点があります。Omega の思想を持っているので、この入力テキストのフィルタ処理を利用して、プラグインのフィルタから XML パーサや XSLT プロセッサを呼ぶことで、XML ドキュメントの入力へ対応できるでしょう。また、LuaTeX の出力についても、TeX/LaTeX -> dvi/pdf だけでなく、TeX/LaTeX -> XML (XML-FO, XHTML など) や XML -> XML (XML-FO, XHTML など) などの出力も可能になるでしょう。
このような LuaTeX の未来が待っているなか、日本の TeX ユーザに対して 日本語組版処理の要件(日本語版) に準じて、スタイルファイルやツールを整備されることが期待されていると思います。すでに LuaTeX-ja プロジェクト日本語トップページ - OSDN が立ち上がっています。「XML ドキュメントから LuaTeX 組版エンジンを使って、日本語組版をして、XHTML や PDF にできたら…」と妄想するだけでもわくわくしませんか?(笑 したがいまして、TeX に対して、まだまだやることがたくさんあるように思います。