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.xmlTeX 形式へ変換するために、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">&#10;</xsl:text>
    <xsl:apply-templates />
    <xsl:text disable-output-escaping = "yes">&#10;</xsl:text>
  </xsl:template>

</xsl:stylesheet>

以下のコマンドを実行して、XMLTeX へ変換します。

$ 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] だけでなく、 /foo/ |wara| などのグルーピングを設けることができます。ひとつめ、ふたつめにも関わることですが、TeX によるコーディング、プログラミングに然るべき制限を設けなければ、なんでもありです。

以上を踏まえると、XML から TeX 組版をする場合には、

  1. XSL による XML から TeX への変換に特化した、テンプレートとして使えるスタイルファイルの作成
  2. TeX ドキュメントのチェッカーの開発
  3. 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 に対して、まだまだやることがたくさんあるように思います。

*1:もちろん、TeX ソースを構造化されたドキュメントのように記述することもできる。

Vine Linux 6 向けに「Emacs 利用ガイド」と「日本語 TeX 利用ガイド」を更新しました

ようやく Vine Linux 6 向けに「Emacs 利用ガイド」と「日本語 TeX 利用ガイド」を更新しました。ドキュメントをガリガリ書くのは、脳内分泌しまくりで、肉体作業です。ずっと前から目次から構成を考えてありましたが、執筆がはかどるまですこぶる時間がかかります。

さて、Vine Linux 6 RC1 がついさきほど公開されました(http://beta.vinelinux.org/)ので、Vine Linux 6 リリースまでの間にレビューなどをお願いしたいと存じます。なにかありましたら、この記事のコメント、VineSeed ML などにご投稿下さいませ。

vine-manual-build パッケージをあらかじめインストールしておきます。

$ sudo apt-get install vine-manual-build

適当なディレクトリにおいて、trac.vinelinux.org のリポジトリ上にある vine-emacs-guide と vine-tex-guide のデータを取得します。

$ svn co http://trac.vinelinux.org/repos/projects/vine-emacs-guide/trunk vine-emacs-guide
$ svn co http://trac.vinelinux.org/repos/projects/vine-emacs-guide/trunk vine-tex-guide

例えば、vine-emacs-guide の Web 用ドキュメントを閲覧したい場合、以下のコマンドを実行します。

$ cd vine-emacs-guide/help
$ vine-manual-build -w vine-emacs-guide.xml
$ chromium vine-emacs-guide.html

あとは、chromium などのブラウザで、ドキュメントをご覧ください。

遅ればせながら、第 6 回 Vine Linux ユーザの集い with LILO - RPM パッケージ作成ハンズオン - のレポート

[2011-07-25 追記]当日の勉強会で補足した内容、Q&A を追加。

2011年7月度 LILO Monthly Seminar with Project Vine : ATND は、Vine Linux ユーザの集い史上、最大規模の開催になりました。有難うございます。

配布資料を以下に公開しました!

http://trac.vinelinux.org/repos/people/munepi/documents/11/lms201107r.pdf

都合が合わなくて参加できなかった方でも独習できる内容にしているつもりですので、ご活用下さいませ。なお、上記pdfは、当日印刷して配布した資料に、修正および加筆をしております。

当日の勉強会で補足した内容、Q&A

上記、lms201107r.pdf に付録として加筆したほうがよさそうですね。

  • %file の書き方
  • $ rpm --showrc
  • vbuilder
  • curses.h がパッケージの探し方

Vine Linux 6 β4 に関してのご指摘

Vine60b4-DVD-x86_64.iso から「デスクトップ」(または、「すべて」)構成でインストールすると、テキストエディタが 4 つもインストールされるというご指摘をいただきました。

たしかに、CUI/GUI の UI の違いはあれど、テキストエディタがデフォルトで入りすぎている気がします。インストーラからインストールされるテキストエディタは、CUIvim-tiny、GUI は gedit というように、CUIGUI でそれぞれひとつずつくらいあれば、とりあえず困らないと思います。

  • jed を抜く:vim-tiny があるから
  • gvim を抜く:gedit があるから
  • Emacs 関連を全部抜く:万人に勧められるエディタでないから
  • leafpad を抜く:Gnome session が標準で、gedit があるから

Vine Linux 7 ができあがるときにでも、本件を再考してみてはいかがでしょうか?

遅ればせながら、OSC 2011 Kansai@Kyoto の参加レポート

Project Vine として、オープンソースカンファレンス2011 Kansai@Kyoto - オープンソースの文化祭! に参加してきました。OSC 関西に初参戦でしたけど、OSC 東京よりも来場者のノリが熱い!!!

さて、Project Vine はというと、OSC 関西@京都で、Vine Linux 6.0β4 の CD, DVD インストーラメディアを配布することになりました。はい、Vine Linux 6.0 リリース版でありませんm(_ _)m

セミナー内容は、鈴木さんによる「Vine Linux 6 の概要」、私の「明日開催!RPM パッケージングハンズオン - 第6回Vine Linuxユーザの集い with LILO の紹介 - 」、豊田さん(Takemikaduchi)さんの「VineSeedGnome 3デスクトップ - 近未来デスクトップをお届けします!」、「Wine の紹介」でした。

ネット上で見つけた参加レポート

まさか、Fish Fillets で Tower of Hanoi を解くことになろうとは…

この room を見た瞬間、「えっ、 wikipedia:ハノイの塔 を解くの?」と直感した。しかも、Fish Fillets のルールの下で。

頑張って、地道に円盤もどきを動かしていき、さー、最後段階だー!このとき、すでに 1741 steps。

最後段階が終わったときには、なんと 3098 steps Orz...

せっかくクリアしたのに、「Best solution: 404, Solved by Masaki Irie」という画面を見て、ぞっとする Orz...

そこで、脳裏にひらめきがきた、404 steps に近づく手順が!実は、この room の最短クリア手順は、wikipedia:ハノイの塔 を解かなくてもよいのれす(笑

Vine Linux 5.2 (i386, x86_64) で次期 Google Chrome 13 を頑張れないかも(泣

■[Vine][Linux] Vine Linux 5.2 (i386, x86_64) で Google Chrome を頑張って動かしてみた [id:munepi:20110517:chrome] で頑張っていましたが、次期 Google Chrome 13 正式版では、頑張れないかもしれません。

[munepi@vine64 ~]$ rpm -q google-chrome-beta
google-chrome-beta-12.0.742.91-87961
[munepi@vine64 ~]$ rpm -qp google-chrome-beta_current_x86_64.rpm
警告: google-chrome-beta_current_x86_64.rpm: ヘッダ V4 DSA 署名: NOKEY, key ID 7fac5991
google-chrome-beta-13.0.782.41-90909
[munepi@vine64 ~]$ sudo apt-get install google-chrome-beta_current_x86_64.rpm 
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了        
'google-chrome-beta_current_x86_64.rpm' として google-chrome-beta を選択しました
いくつかのパッケージをインストールすることができません。おそらく、
整合性のとれない状況を要求したか、(必要なパッケージがまだそろって
いなかったり、まだIncomingから移動されていない)不安定なディストリ
ビューションを使用していないでしょうか。

単純な操作だけを行った時に、パッケージがインストール
できない場合は、バグリポートしてください。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージは解決できない依存関係を持っています:
  google-chrome-beta: 依存: lsb (>= 4.0)
                      依存: libc.so.6(GLIBC_2.11)(64bit) それをインストールすることができません
E: 壊れたパッケージです

たぶん、lsb さえ騙せばなんとかなるでしょうが…、頑張れないのならば、あとは強引に責めるという手段でしょうねー。

  1. rpm を無理やり然るべき場所へぐぁーっと展開して、
  2. 後処理の rpm scriptlets を手動で走らせて、
  3. [id:munepi:20110517:chrome] の必要な処理を施す

現時点での google-chrome-beta や google-chrome-unstable は、危険な香りが漂いますねー、たまりませんっ!

というわけで、「Vine Linux 6 のススメ」へと続くになるのでした。