TeXの最近のブログ記事

LaTeX ユーザにとってたいへん残念なことになった。

奥村先生の TeX Forum から来る投稿記事メールは最近ほとんど読み飛ばし状態だった。しかし,つい先ほど受信したメールのサブジェクト: "「何々prop」のみならず「OTFパッケージ」も公開停止に" があまりに衝撃的だったので,作者・齋藤修三郎氏のサイトを確認してみた。果たして「暫く旅に出ます.探さないで下さい.」との悲しい文言が... OTF 公開停止は事実のようである。OTF パッケージは,LaTeX 和文タイプセットにおいて出力漢字を拡張するために,なくてはならぬ存在なのに。

どうして齋藤氏は公開停止を決断なさったのか? この悲しい文言から,なにか,相当に深い事情がありそうなので,それを詮索してもはじまらない。まずは齋藤氏の意思を尊重すべきだろう。フリーソフトウェアの開発・公開・メンテナンスは,作者の思いとユーザの使い方・要望がすれ違うと,ちょっとした要因でこれが作者にとってバカバカしくもなる。そんな作者の心情は,misima を公開している私にもよくわかる(もちろん,齋藤氏には私なんかよりずっと高度な事情があるに違いないのだけど)。自分自身にとってすでに終わった課題解決を,さらに一歩踏み出して公開し他人に供するのは,親切心以上のなにものでもないからである。

OTF 公開停止は pLaTeX2e ユーザにとって一大事件である。私は OTF パッケージを,安定版も開発版もすでに入手しているため,個人的には困ることはない。けれども,これから LaTeX をはじめる人はどうすればよいのか。その人に「こんな素晴らしいパッケージがあるよ」とお勧めすることもできなくなった。私の Web ページでも OTF パッケージを大いに宣伝している。書き直さないといけないのだろうか。OTF を前提とした拙作ツール Utf82TeX も,これにていよいよご臨終という訳か。私もしばらく旅に出たくなってしまった...

さしあたり,様子をみるしかなさそうである。

FreeBSD インストール大会 5 日目。Emacs 最新版の導入に取り組む。ChangeLog 2010.1.12 の履歴も新しい 23.1.91 である。

Emacs の開発最新版はかつて Emacs-CVS と呼んでいたと思う。だが昨年末,バージョン管理システムが Bazaar に変更され,これに伴いいまやチェックアウトを bzr コマンドで行うようになった。「伽藍からバザールに」という訳か。Download and Install Bazaar から FreeBSD 向けアーカイブ bzr-2.0.3.tar.gz をダウンロードし,展開後のディレクトリで python setup.py install を実行するとインストールできる。Python 2.4 以上が必要である。

Emacs 最新の trunk の取得は以下のとおり。bzr branch に恐ろしく時間が掛かる。CVS のころが偲ばれるほどである。bzr 実行のたびに No handlers could be found for logger "bzr" が出て煩い場合,$HOME/.bzr.log に書き込み権限を付加すれば解消すると思う。

% bzr branch --stacked http://bzr.savannah.gnu.org/r/emacs/trunk emacs-trunk
% cd emacs-trunk
% bzr pull

このあと,Emacs をビルドする。INSTALL ドキュメントによれば,./configure はオプションなしでよいようである。gmake が終了したら,./src/emacs -q & で,できたてのモジュールの動作確認をする。OK なら,スーパユーザで gmake install

% ./configure
% gmake
% ./src/emacs -q &
% sudo gmake install

そのあとは,site-lisp をバックアップからコピーし,Mew だけを再度インストールし直した(Mew は実行ファイルも提供しているため)。今回は,珍しく,なにも問題がなく終了した。

* * *

娘の受験準備で小論文・面接の練習に付き合う。こういうことに対しても,きちんと「準備」をし,父や母を掴まえて練習しようとする態度は,私よりも妻に似たようである。そう,「準備」をしたかどうかが大事なのである。私も会社訪問してくる就活学生の面接官をやったことがあるが,「当社のどこに興味をもったのか」など,聞かれて当たり前のことにも,内容を整理して応えられないヤツがいる。こちらは立派な意見を聞きたいのではなく「あらかじめ準備しているかどうか」をチェックしているだけなのに。

「自分のよいところを PR してください」,「本校を志望する理由はなんですか?」など基本中の基本にはじまり,「2009 年を象徴する漢字はなんだったか知っていますか? また,あなたにとっての 2009 年の漢字はなんですか?」,「2009 年に日本で起こったことでなにがいちばん大きな出来事だと思いますか?」,「地球温暖化のなにが問題だと理解していますか?」など時事問題についても質問。とにかく相手の顔をちゃんと見てハキハキ応えること。「夜なにを着て寝ていますか?」---「そういうご質問にはお応えできません」。そうそう,それでよい。

お隣のお婆さんが亡くなった。うるさいお婆さんだったが,亡くなると寂しいものである。つい先日,ウチがゴミ当番だった朝,「網が掛かってないからカラスが散らかしているじゃないの」とこのお婆さんにお叱りを受け,そそくさともう一度網を掛け直しにゴミ捨て場に出,彼女と挨拶したばかりなのに。合掌。ご主人もいつも叱られていたような気がする。敷かれる尻がなくなっても元気でいてほしいと思う。

* * *

OldSlav-1.2 を公開した。Windows CP1251 などの代表的なキリルエンコーディングによる入力方式を追加した。ドキュメントも改訂した。

* * *

IBM ThinkPad X40 FreeBSD-6.2 Release に ptexlive 最新版をインストールした。私の環境はディスクの空きがわずか 1.5GB しかなく,texlive に必要な 5, 6GB を確保できず,公開サーバの NFS 領域にインストールすることにした。ところが NFS マウントのオプションに -maproot=root を付けていないので,ptexlive の make install でエラーのオンパレードになってしまった。公開サーバなのでシャットダウンするのも憚られ,root ではなく一般ユーザの権限でインストールした。ちょっと環境を壊すリスクが高いけれども,まあよい。

ptexlive-20091009 ではまだ,texlive に添付された UTF-8 の新しいハイフネーションパターンがサポートされていないようである。fmtutil --byfmt platex で,添付の language.dat を読み込ませると,昔懐かしい bad pattern エラーが頻発してフォーマット生成が失敗する。しようがないので,旧 ptetex3 環境からハイフネーションパターンファイル一式をコピーして再実行したらうまく行った。

texlive は各プラットフォーム用のバイナリが install-tl コマンド一発でインストールできるようになっている。LaTeX パッケージも Teubner や CJK,unicode,cm-super などがはじめから組み込まれていて,めっちゃラクである。ただし,CJK パッケージの日本語タイプセット用に TFM を生成しようと ttf2tfm コマンドを実行したら,ライブラリのリンクでエラーとなった。ソースからビルドすればこんなことにはならないはずである(もちろんコンパイルなど別の面倒が発生するのだけど)。UNIX ユーザ向けにバイナリを配布するのは,こういう問題があるからやめたほうがよいと思うのだが。でもまあ,主要なコマンドは元気に動いているのでよしとする。いちおう,土村さんの ptexlive サイトに動作報告をあげておいた。

ptexlive で OldSlav を試験したが問題なさそうである。公開したバージョン 1.2 に ptexenc オプションを追加しておいた。やっていることは 1.1 の ptetex と同じだけど,土村さんの提言に従うことにしたのである。

※ 1.10 付記
ttf2tfm ライブラリ問題について,ptexlive.cfg にある conf_option --without-cjkutils をコメントアウトすれば,ソースからビルドするようになると,土村さんからご教示いただいた。さすが,考え抜かれているなー。Babel ハイフネーションパターンも対応中とのこと,楽しみである。

OldSlav 教会スラヴ語 LaTeX パッケージの 8 ビット・キリル・エンコード対応作業を行っている。OldSlav の従来バージョンでは SlavTeX オリジナルのエンコード CP866 キリル・コードでオリジナルの記法そのままに入力できるような設計になっていたのだが,8 ビット文字の分類コードなどを不用意に変更すると,韓国語 UTF-8 inputenc との併用で問題を来すことがわかり,1.1 では CP866 サポートをやめてしまっていた。それなら inputenc.sty のキリル・サポートに乗っかって,広く行われているキリル 8 ビット・コードを使えるようにするのが次の課題になった。

とはいえ,すでに教会スラヴ語環境内で \CYRA などの inputenc.sty の命令を読み替えることにより T2D, T2A, X2, XS エンコーディングを使えるようにしていたので,じつは 1.1 でも \usepackage[koi8-r]{inputenc} とするだけで KOI8-R の原稿でも基本的に動作する。ただし,これだと などの SlavTeX がサポートしていた,キリル文字からなる命令(主にアクセント命令)が使えないし,特殊なアクセント位置調整も効かない。今日はこの不足を補うマクロを書いた訳である。babel \languageattribute で指定するオプションに代表的なキリル文字コード Windows CP1251, KOI8-R, ISO 8859-5, CP866 を指定できるようにした。それぞれ,cp1251koi8-riso88595cp866 を書けばよい( inputenc.sty と同じ)。ただし,もちろんこの場合, latexpdflatex による組版が前提である。これで SlavTeX との互換性も満足できそうである。ロシア人が使うには必須の機能かも知れない(彼らがよく使う MiKTeX に私はほとんどまったく馴染みがないのだけれど)。

試験をしていたら,長大な原稿で何度も言語切替えを行うと Save size スタックのオーバーフローエラーが起きた。げげ,こんなのはじめて,またつまらない潜在バグ!と我ながら呆れた。キリル命令・他パッケージの命令と教会スラヴ語命令との切替えにおいて,頻繁にバックアップ/リストアを \let 命令で繰り返しているとこれが発生するという訳だった。とりあえずバックアップ処理のタイミングを一度に限定することでこの問題対処とした。

これらの対応版は一応できたけれども,ドキュメントがこれから。さっさと改訂して 1.2 としてサーバに置くつもりである。仕事もはじまり,なかなか時間が取れそうもないんだけど。極々関心のある方限定で oldslav-1.2rc.zip をお試しください。

OlsSlav for Old Church Slavonic LaTeX package Ver. 1.1 対応の英文ドキュメントをやっと公開した。ヘタクソな英文でも,ないよりはマシ。巧遅拙速に如かず。世のビジネスでは品質よりも納期優先じゃ。それでも,メールで付き合いのある外国人に,おいおいチェックしてもらうつもりでいる。

これで三が日が費やされてしまった。 ああ,でも今年の正月休みは家族水入らず,ホントのどかなよい寝正月だった。

大晦日の晩は寒さが厳しかった。今日の元日,なんとものどかな一日だった。

夜中に ptetex3-20090610, upTeX-0.28 のインストールを試みたが,ぼろぼろエラーが出て,あきらめて寝た。今日,落ち着いて ptetex3-20090610 下にある LOG ファイルをチェックして問題対処を試みた。xdvik のコンパイル・リンクにおいて FT_xxx の関数参照のエラーで落ちていて,その後トチ狂ったようである。すでに Mac OS X にある Freetype2 ライブラリの版と不整合を起こしているようだったので,freetype-2.3.5 にバージョン・アップし,再試行したらうまく通った。make test の縦書き試験で FT_OpenType_Validate is disabled なるワーニングが出てエラー停止するが,最終成果物は dvipdfmx による PDF でよいので,これは放置。LaTeX のような大規模のシステムの初期インストールは一筋縄ではいかない。

/usr/local/teTeX/ 下をごっそり再インストールするつもりで臨んだので,ghostscript も入れ直し。いままで 8.54 を使っていたのだが,日本語の取り扱いの点から 7.07 に版を落とすことにした。山田泰司さんという方が公開なさっている "Welcome to ~taiji at gyve" サイトから Mac OS ヒラギノ,中国語 OpenType フォントを使うためのパッチを適用し,gs-7.07 で縦組でもヒラギノの高品質フォントを利用できるようになった。山田さんに感謝。

リビングに設置した,ホコリまみれだった再生装置(YAMAHA C-2x プリアンプ + B-2x パワーアンプ,Technics SL-01 アナログ・プレーヤ,DENON DCD-1650AR CD プレーヤ,YAMAHA NS-1200 スピーカ)も大掃除でピカピカにした。のどかな元日にお気に入りのレコードを二枚聴く。

一枚はモーツァルトのディヴェルティメント K.563,ウィーン弦楽三重奏団による独 CALIG 盤 CD。この名曲は名手ソリストが集った名盤が数あるけれど,私はこの Wiener Streichtrio の演奏がイチオシなんである。彼らはモーツァルト以外にも,ベートーヴェン,シェーンベルク,ウェーベルン,クルシェネクの弦楽三重奏曲の端正な録音を残している。ウィーンの演奏家は由緒ある一方で古くさいイメージが先行するけれども,アルバン・ベルク四重奏団のような現代音楽にも優れた室内楽演奏家が突然変異的に登場する。現在は廃盤になってしまったのが惜しい。

いま一枚は韓国のヴァイオリニスト・チョン・キョンファのヴァイオリン独奏,アンドレ・プレヴィン指揮ロンドン交響楽団の演奏によるプロコフィエフのヴァイオリン協奏曲第一番,第二番。昔,キングから出ていたロンドン・レーベルの LP である。第一番は,早春の胎動の悦びとほのかな頽廃が感じられるモダニズムの傑作である。私はこれを聴くと,雪解けの泥が瑞々しい札幌を思い出す。いまも CD で入手できると思う。
 

2009_ganjitu_records.jpg

あけましておめでとうございます。

30, 31 日と大掃除をやり,重いものを何度も動かして,体のふしぶしが痛い。今年は,子供たちが受験なので帰省はせず,家で寝正月。年末恒例の紅白歌合戦を家族皆で観る。ゆく年くる年あたりから年越し蕎麦を食う。子供たちが CDTV(カウントダウン TV: 人気アーティストたちが出演するミュージック番組)にわいわい騒いでいる横で,TeX Q and A に書き込んだり,一大決心で LaTeX システムのバージョンアップに挑む。

ptexlive を入れようかと思ったが,パス情報がいままでとまったく変わり,upLaTeX との共存が面倒臭そうだったので,やっぱり ptetex3 + upLaTeX にした。今回,あらゆるパッケージを最新版にしようとして,/usr/local/teTeX 配下をばっさり消してクリーンインストールしようとしたが,うまくいかない。upTeX のスクリプトでそれなりのところまでいくはずだと思ったが,コマンドが見つからないとのエラーがぼろぼろ出てまったくダメである。いま,ptetex3 だけをまずは組込んで,upLaTeX パッチはそのあとにするのでどうか実行中。

御用納めとなり,2009 年も残すところ二日となってしまった。先頃,今年を象徴する漢字は「新」ということが清水の舞台から公にされたが,それぞれ皆,各々の今年の一文字があるかと思う。私の場合,不況でまったくつまらない今日この頃,「暇」であった。また死ぬほど顧客に虐められ,トラブルで火を噴く現場の喧噪に包まれたい,という思いも無い訳ではない。

妻にせっつかれてやっと年賀状を作った。娘の描いた虎の画をスキャンして,Mac OS,Adobe Photoshop で加工し,Illustrator で文字周りをぺぺっとレイアウトして 30 分で完了。とりあえず 50 枚印刷。

公開したばかりの OldSlav について,奥村先生のサイト TeX フォーラムにおいて,観点鋭くかつ学術性にも配慮した指摘をいただいた。自分の用途に足りるレベルで作ったものを公開しているに過ぎないのだけれど,ハイレベルな反応をもらうとなんともうれしくてたまらなくなる。教会スラヴ語日付様式の典拠,韓国語 inputenc との共存など,重い課題が多くて,システマチックにその指摘に対応するのは難しいところがあり,いま手元にある文献や試験環境でできる範囲で設計を見直し,訂正して,今日公開した。SlavTeX オリジナル CP866 コード入力での互換性は inputenc との絡みで今回犠牲にした。だいたい今や誰も使わないエンコードに拘っても意味がない。ダウンロード頁から oldslav-1.1.{tar.gz, zip} を落としてお使いください。

明日は我が家の大掃除。ここのところ仕事から帰宅したあと OldSlav の改造に夢中になってしまい,妻から家事を手伝わないと責めまくられている。

* * *

アンナ・アフマートワの詩集『ヴェーチェル(夕べ)』を工藤正廣訳(未知谷刊)で読む。ロシア詩のスタンザ毎に短歌として訳した珍しい翻訳である。工藤先生も健在だなあ,という思いがこの書を手にしたそもそもの理由である。

アンナ・アフマートワは 20 世紀ソヴィエトの女流詩人。彼女の詩は,至る所に死の匂いが染み付いている。己の死後の現実の感触を透視し聞きとろうとする心の闇がある。「あまりにも生を望みしそのわれの冷たき屍手おくひとなし」(p. 115)。スターリンの大粛正で夫(第一級の詩人ニコライ・グミリョフ)が銃殺され,わが子がシベリヤ送りとなったこの天才にあって,死の日常性が事物に取り憑いてさりげなく漂うのは,文学的衒いでもなんでもないのである。

夢おそく不眠の窓にまた白くご機嫌ようと白きカーテン(p. 15)
氷結し狭き運河の流れずにおゝ新しきこともなき地よ(p. 49)
太陽の記憶こころに弱まれば闇のこの夜にまさに冬来る(p. 50)
日没に針葉の森消えゆくを見つつ聞きおりきみに似し声(p. 110)
酩酊の葡萄匂える遠景にわれ惜むなしきみ虚無の声(p. 164)
 
夕べ―ヴェーチェル
アンナ・アフマートワ
工藤正廣・短歌訳
未知谷

OldSlav 1.1 を開発したところであるが,1 点致命的なバグを見つけた。OldSlav は \< という気息記号アクセント命令を定義している。ところが,ptetex UTF-8 対応のためにこれを \DeclareTextAccent で登録したため,グローバルに \< を書き換えてしまい,通常このコントロール・シーケンスに割り当てられている \inhibitglue を上書きしてしまっていたのだった。訂正版(同じアーカイブ名なんだけど)をアップしたので差し替えていただけると幸いである。oldchurchslavonic 環境外では \inhibitglue\< で機能するようになるはずである。

ところで,教会スラヴ語訳聖書を眺めていて,その組み方を LaTeX の環境命令として実現するマクロがあると便利だと思った。聖書の組み方は次のようなものである。章の第一節・第一文字をインデントなしでドロッピングする,つまり,文頭の一文字だけを大きな文字で飾り組みする(古い文献によくあるマナーである)。二節目以降はインデントして教会スラヴ語様式で節番号を表示し,本文を続ける。その実際の教会スラヴ語聖書での姿をここに掲載したので,関心のある方は確かめてみてほしい。

ocsbiblija 環境マクロを作成してみた。ドロッピングは第一文字を \LARGE にし,\lower 命令で文字を下にずらすことによりレイアウトする。改段落のつどカウンタを回して,それが 2 以上の場合,自動的に教会スラヴ語の節番号を先頭に出力する。これは \everypar を再定義して実現する。第一節の 1 行目をインデントしないよう,\setbox0=\lastbox でインデントのボックスを取り除く。 一方,2 行目だけはドロッピング文字とのバランスを考慮し,所定サイズの字下げを付け,3 行目以降はインデントしないよう,\parshape 命令で調整する。設計はこのようなものである。以下にそのコードを示す。
 

% ocsbiblija 環境の定義
% - \begin{ocsbiblija}[<d|other>]{第一文字}本文 \end{ocsbiblija}
% - オプション d なら第一文字をドロッピング(デフォルト),それ以外はそのまま
% - 第一文字はグルーピングが必要
\makeatletter
% ocsbiblija 環境の設定パラメータ初期値
\newdimen\ocsbibindent \ocsbibindent=0.65em\relax% 節番号前のインデント
\newdimen\ocsbibskip \ocsbibskip=0.3em\relax% 節番号と本文のアキ
\newdimen\ocsdropsize \ocsdropsize=0.45em\relax% 開始文字の下げ寸法
\newdimen\ocshangsize \ocshangsize=1.65em\relax% 第一節 2 行目のインデント
\def\ocsbiblija{\@ifnextchar[\@ocsbiblija{\@ocsbiblija[d]}}%
\def\@ocsbiblija[#1]#2{% #1 最初の文字; #2 ドロッピング対象文字;
  % 第一段落の定義
  \dimen0=\linewidth \advance\dimen0 by-\ocshangsize
  \if#1d% dropping の場合 2 行目だけを \oocshangsize 分インデント
    \parshape 3 0pt \linewidth \ocshangsize \dimen0 0pt \linewidth
  \else% そうでない場合インデントしない
    \parshape 1 0pt \linewidth
  \fi%
  \leavevmode\setbox0=\lastbox% \parindent>0でもインデントを除去
  \if#1d\lower\ocsdropsize\hbox{\LARGE#2}\else#2\fi% dropping
  % 第二段落以降の定義
  \@tempcnta=1\relax
  \everypar{%
    \advance\@tempcnta by1\relax
    \ifnum\@tempcnta<1\relax% 第一節は節番号を振らない
    \else% 第二節以降は教会スラヴ語様式で節番号を振る
      \makebox[1em][c]{\slnum(\the\@tempcnta).}%
      \hskip\ocsbibskip\relax
    \fi%
  }%
  \parindent=\ocsbibindent\relax% 第二節目以降は \ocsbibindent 分インデント
}%
\def\endocsbiblija{\par}%
\makeatother

\begin{ocsbiblija}[オプション]\end{ocsbiblija} の間に本文を記述する。オプションに d 以外を指定すると,ドロッピングせずノーマルサイズで第一文字を組む。各種アキ,インデント幅,字下げ量はパラメータ初期値にあるコントロール・シーケンスを再設定すれば調整できる。本文の第一文字はグルーピングしなければならない。節毎に空行を入れて本文を記述してゆくと,第二節以降,自動的に節番号が教会スラヴ語様式で段落冒頭に出力される。

このマクロをプリアンブルに記述し,upLaTeX で組んだ画像を以下に示す。LaTeX 原稿: ocsbiblija.tex と PDF: ocsbiblija.pdf も掲載しておく。multicol.sty で二段組みにし,段組み線を入れると,まさに教会スラヴ語聖書らしくなった。
 

ocsbiblija.jpg

このマクロを OldSlav にも入れようかと思ったが,その他の教会スラヴ語マナーを含めもう少し総合的なマクロ集ができた段階にすることにした。

今回,\parshape\everypar,インデントの仕組み等々の解説で Victor Eijkhout の著書『TeX by Topic』がとても役に立った。LaTeX マクロを自作したい方は必携の文献である。
 

今日は家族でクリスマス・パーティ。妻の作ったホウレンソウのクリーム・スープが旨かった。ケーキを食べながらプレゼント交換した。自分ではまず絶対買わないような気の利いたアイテムを貰う。私は子供たちに CD と本を与えた。上の息子のために,セロニアス・モンクの名盤 "Thelonious Himself"(1957)を選んだ。渋すぎたかも。娘にはジョージ・ウィンストンの "Winter Into Spring"。

できたてホヤホヤの教会スラヴ語 LaTeX パッケージ OldSlav を使ったメッセージをラベルシールに印刷し,プレゼントのパッケージに貼付けた。教会スラヴ語で「2009 年クリスマス,XXXへ,父より」というもの。ウケた。
 

oldslavxmas.jpg
 

セロニアス・ヒムセルフ+1
セロニアス・モンク
ユニバーサル ミュージック クラシック (2007-09-19)

息子の誕生日,クリスマス,ということで,今日は家族でロシア料理を食した。子供たちにはこれまでこんな贅沢はさせなかった。たまにはコース料理も食べさせてやろうということに。場所は,新宿西口にあるロシア料理店「スンガリー」。サーモンのブリヌイも,ボルシチも,シャシリクも旨かった。ロシア紅茶といっしょに出てきた薔薇瓣・木苺・チェリーのジャムはなかなかのものだった。ロシア製のジャムを味わうと,ジャム観が変わるはずである。日本製がただの子供のおやつに思われてくる。Балтика 3 番,6 番(それぞれラガー,スタウト)ビールは,甘ったるくてちょっと嗜好に合わなかった。アルメニアのコニャック «Арарат» を品書に見いだし,食指が動いたが今日は止めにした。

先日,爆笑問題が話題の学者の研究内容を紹介する NHK テレビ番組『ニッポンの教養』で,ロシア文学者亀山郁夫と爆笑問題がロシア料理店でドストエフスキイについて語り合うものがあった。妻によれば,今日行った店は,そのロケーションになった店の支店だったようである。

亀山先生といえば,私にとってフレーブニコフの専門家というイメージがかつては強かった。でも,いまやドストエフスキイの現代性を論じて,最近メディアでつとにお名前を目にするようになった。番組で私がもっとも感銘を受けたのは,インターネット時代の孤独な人間が PC の前に座ったときに捕われる「全能感」の問題提起である。亀山先生の言葉に私はどきりとした。人間は誰しも世界の片隅しか支配できない。ところが,インターネットで様々な情報を居ながらに得,匿名で偉そうな書き込みをしているうちに,なにか世界を手中にしたかのような幻想に捕われる。これを,ひとごとだと思ってはいけない。ロシア文学に全霊をかけて取り組んだ人は一種独特の文明批評に富んでいる,と改めて納得した。情報を知性ではなく魂で受けとめようとするのである。

聞き役の爆笑問題も,亀山先生を相手に堂々と会話を成り立たせているところ,また,タルコフスキイの『惑星ソラリス』が描いた未来世界のエコロジーについて語るところ,ただ者ではない。最近,高学歴お笑い芸人が話題になっているけれども,そういう「ただの優等生」とは決定的に違う風格を,太田は備えている。

* * *

Utf82TeX-0912 を公開した。以前からあった -h オプション(^^16進形式変換)に変換対象としてキリル文字・ギリシア文字を追加した。ptetex3 がこの形式だと欧文で処理するという話に触発されたのである(昨日の記事に書いた Perl コード十数行で十分なのだけど)。あと,問題を訂正した。

今日帰宅して,昨夜公開した OldSlav のドキュメントを眺めていたら,ロシア語の т がぼろぼろ脱落していて慌てた。литературалиераура となっていてマヌケなんである。OldSlav のとんでもないバグだとまずは考えた。今回 \russiantext 命令を結構いじっている。しかし,旧バージョンに戻して組版しても再現する。ドキュメント旧版を確認するときちんと出力されている。頭が煮詰まって来た。

なんで小文字の т だけが抜けるのか。うまく出ている原稿とダメな原稿を落ち着いてよく比べてようやく原因が判った。ダメ版ではいつものサボリ根性から T2A のキリル文字を簡単にマークアップするために \def\cyrt{\fontencoding{T2A}\selectfont} というマクロを書いていた。バカみたいなバグである。\cyrt は T2A 小文字の т の出力命令と同じ名前であって,これをつぶしていた訳である。フォント切替えなのでエラーとならず,見過ごしてしまった。

教訓は,サボルな,ではなくて,マクロの名前はよく考えよ。特定の文字の問題はマクロ名の重複を疑え。よく見るとほかにもいただけない瑕疵があり,類似見直しをした。ドキュメントを訂正して差し替えた。

* * *

奥村先生の TeX サイトで土村さんの ptetex3 の後継,ptexlive が出ていることを今ごろ知った。もう着いて行けてません。それなら OldSlav の改造は ptexlive でやったほうが皆のためだったかも知れない。まあ,そのうち時間が取れれば ptexlive 対応にも取り組みたいと思う。

また,ptetex3,ptexlive とも,環境変数 PTEX_IN_FILTER として原稿ファイルの出口ルーチンを登録できるということも知るところとなった。ptetex3 では互換性を重視して JISX-0208 に定義されているキリル文字,ギリシア文字を和文として扱う仕様になっており,ロシア語・ギリシア語の UTF-8 テキストを欧文として処理したいユーザーには少し物足りないところは否めない。旧 pTeX でロシア文字を JIS コードで入力していた人にはまったく影響がないのでそういう選択をしたということのようである。それでも,文字を ^^十六進形式にすれば,欧文として扱うとのことを土村さんから教えていただいた。そしてその変換を行うフィルタを PTEX_IN_FILTER に登録すればよい,という話であった。

Utf82TeX を改造して試したら,たしかにばっちりロシア語が出た。でも ^^十六進形式にするのは,大げさなプログラムは不要で,次のような Perl コードですんでしまう。

#!/usr/bin/perl
# -*- coding: utf-8; mode: cperl; -*-
# Cyrillic and Greek to ^^HEX format
use utf8;
binmode(STDIN, ":utf8"); binmode(STDOUT,":utf8");
while (<STDIN>) {
    utf8::decode($_);
    foreach my $chr (split(//, $_)) {
        if ((($chr ge "\x{0400}") && ($chr le "\x{04ff}")) || # Cyrillic
            (($chr ge "\x{0370}") && ($chr le "\x{03ff}")) || # Greek
            (($chr ge "\x{1f00}") && ($chr le "\x{1fff}"))) { # Greek Ext
            my $uchr = $chr;
            utf8::encode($uchr); # UTF-8 encode
            foreach my $bchr (split(//, $uchr)) {
                print(sprintf("^^%x", ord($bchr)));
            }
        } else {
            print($chr);
        }
    }
}

UTF-8 で書いた TeX ファイルをこれ(myfilter.pl とでもしておこう)で前処理すれば,キリル文字とギリシア文字(拡張領域含む)だけが ^^十六進形式に変換される。ただし,PTEX_IN_FILTER を通すと,あらゆるマクロファイルをこれに掛けるためか,platex のコンパイルが眼に見えて遅くなる。面倒でも,次のようなスクリプト(u8platex とでもしておこう)を書いてドライブしたほうが高速である。u8platex hoge とすると hoge.pdf までができる。

#!/bin/sh
BN=`basename $1 .tex`
myfilter.pl < $BN.tex > $BN.utf
platex --kanji=utf8 $BN.utf && dvipdfmx $BN.dvi

教会スラヴ語 LaTeX パッケージ OldSlav ver. 1.1 を公開した。UTF-8 サポートと文字追加・入れ替えを反映した。私は Mac OS X upLaTeX,FreeBSD ptetex3-euc 環境で試験したが,Windows SJIS 環境でも問題ないと思う。ドキュメントも訂正してある。oldslav-1.1.tar.gz,もしくは oldslav-1.1.zip をダウンロードしてお使いください。

英文か露文のドキュメントの要望も受けている。時間がとれれば,英文マニュアルを書かないといけない。

1900 年刊行の教会スラヴ語聖書を眺めていて,SlavTeX フォントにない文字付略号符(буквенное титло)を見つけた。ч の文字にハットを冠したもので,私の見たことのないものだった。これは教会スラヴ語教科書にもない。教会スラヴ語 LaTeX パッケージ OldSlav の Unicode 対応をするなかで,どうしてもこの略号符を出力できるようにしたいと思った。

マクロで重ね打ちするなどの手段を考えたが,やはりフォントを作ることにした。SlavTeX フォントはもともと METAFONT で作成されており,フォントソースが添付されている。これを流用して буквенное титло ч を作ってみた。また,従来の SlavTeX フォントでは,ハイフネーションの文字はハイフン(-)だった訳だが,この聖書ではアンダースコア(_)が使用されていた。こちらのほうがそれらしいと思ったものだが,SlavTeX フォントにはアンダースコアがない。ついでにこいつも追加することにした。

私にとって METAFONT への取り組みは Izhitsa 教会スラヴ語パッケージの日本語対応以来である。METAFONT はタイポグラフィによほど関心のない限りなかなかとっつきにくいものがある。それでも,クヌース教授による『METAFONT ブック』を参照しながら,既存のソースを流用してなんとか作成することができた。

METAFONT フォント作成のメモを簡単にしるしておく。 .mf ファイルに描画命令を記述する。今回 exslav10.mf として別フォントとして生成することにした。適当なエリアで文字を割当て,フォントを生成しておき,仮想フォントで目的とするエリアにマッピングすればよい。参考までに今回作成した .mf のうち, буквенное титло ч の描画部分だけをあげておく。

% буквенное титло ч
beginchar(100,9u#,small#,0);
  % titlo hat function (slav.mac)
  hat(1,0);
  % titlo character
  r:=22/10u; s:=7/2u;
  % right vertical line
  z.u=(s+r+1/8u,small+6u);
  z.d=(s+r,small+2u);
  z.m=(s+r,small+10/3u);
  pickup penrazor scaled 4/5u;
  pp:=flex(z.u,z.m,z.d);
  draw pp;
  labels(u,m,d);
  % curve from left upper to right vertical line
  z2.2=(s+r+1/10u, small+21/5u);
  z2.1l=(s,small+6u);
  penpos2.1(4/5u,0);
  penpos2.2(3/10u,90);
  penstroke z2.1e{down}..tension 0.75..{right}z2.2e;
  penlabels(2.1,2.2);
endchar;

exslav10.mf ができたら,mf ユーティリティで処理し,gftodvi ユーティリティでゲラ刷り DVI ファイル(下図)を作成する。これを確認しながら,METAFONT の記述を修正しつつ,満足のゆくものができるまで文字のデザインを調整する。クヌース教授は,smoke モードで生成した DVI を紙に印刷して壁に貼り,後ろに下がって眺めるとよい,と勧めておられる。tex testfont を実行するとフォントチャートが得られる。それとともに tfm 及び pk フォントのファイルが生成される。
 

mfgera.jpg

これでできたフォントは tfm と pk である。tfm は LaTeX で組版するときに必要となる。しかしながら,pk フォントは,紙に印刷すると暖かみのあるものだと私は思うけれども,いわゆるビットマップフォントであり,PDF などに埋め込むにはあまり推奨されない。そこで mftracet1binary の両プログラムを用いて PostScript Type1 アウトラインフォントに変換した。DVIWARE にフォントを拾ってもらうための map ファイルも作成する必要がある。

以上の一連の流れのコマンドラインを以下に示す。私は Mac OS X で行ったが,FreeBSD, Linux, Windows でも手順はそれほど変わらないと思う。

% mf exslav10
% gftodvi exslav10.2602gf
% tex testfont
...
Name of the font to test = exslav10
...
*\table
 
*\end
...
% mftrace --magnification=4000 --encoding=tex256.enc exslav10
% t1binary exslav10.pfa exslav10.pfb
% cat > oldslavex.map
exslav10 exslav10 <exslav10.pfb
(control-D)
%

さて,exslav10.tfmexslav10.pfboldslavex.map までできたけれども,これだけでは OldSlav の組版でフォントが使用できる訳ではない。OldSlav の仮想フォントのしかるべきエリアに,作成したフォントをマッピングしなければならない。既存の OldSlav 仮想フォント・ソース fslavrm.vplexslav10.vpl の当該文字定義を反映する。この定義の元ネタ vpl ファイルを tftopl ユティリティで生成し,MAPFONT 命令で exslav10 のエントリを追加するとともに,буквенное титло ч の文字定義を fslavrm の空きエリア 6 番に,アンダースコアをハイフンの位置 45 番に(ハイフンの代わりとして使うので)MAP 命令でマッピングする。定義が終われば,vf と tfm を vptovf ユティリティで生成する。仮想フォントの作成は面倒だが,以前 OldSlav 用 vf を作成したとき,メモを残しておいたのが役に立った。いまこうして書きしるすのも,自分のためである。

以上できた tfm, vf, map, pfb ファイルを TDS に従った場所にコピーし,mktexlsrupdmap-sys --enable Map=oldslavex.map を実行する。これでやっと追加フォントが使用できるようになった。

% tftopl exslav10.tfm exslav10.vpl
% emacs fslavrm.vpl exslav10.vpl &
(ターゲットの fslavrm.vpl を編集し,exslav10.vpl 定義を反映する)
% vptovf -verbose fslavrm.vpl
% su -m
# setenv TEXDIR /usr/local/teTeX/share/texmf-local
# cp fslavrm.vf $TEXDIR/fonts/vf/oldslav/
# cp fslavrm.tfm exslav10.tfm $TEXDIR/fonts/tfm/oldslav/
# cp exslav10.pfb $TEXDIR/fonts/type1/oldslav/
# cp oldslavex.map $TEXDIR/fonts/map/dvips/oldslav/
# mktexlsr
# updmap-sys --enable Map=oldslavex.map
# exit

OldSlav に буквенное титло ч アクセント命令(\ttlh)を追加して,早速組んでみた。実際の文献でも文字付略号符は虫眼鏡でみないと判別できないくらいのシロモノだけど,まあできた,できた。ハイフネーションも聖書のマナーを再現できて満足。今回の成果を含めなるべくはやく UTF-8 対応版パッケージを整理して公開したいと思う。
 

ocstitlo.jpg
 

教会スラヴ語聖書を手に入れてから,このところ教会スラヴ語 LaTeX パッケージ OldSlav の UTF-8 対応に血道をあげている。先日はまだアクセント付加文字をグルーピングすると不具合が発生する状況だったが,今日その課題が解決した。

この OldSlav utf8 モードは土村さんの pLaTeX UTF-8 対応では使用できない。土村さんの ptetex はキリル文字を JISX-0208 に化かしてしまうので,もとよりロシア語も欧文として取り扱うことができず,日本語フォントにあるキリル文字が組まれてしまう。utf8 モードで教会スラヴ語を組みたい場合,ttk さんの upLaTeX か,もしくは pdfLaTeX(これは欧文純正なので日本語混在組版は CJK パッケージを使う)の環境が必要である。角藤先生配布のパッケージにも upLaTeX が含まれているので Windows ユーザにも使えるはずである(試験はしていない)。

教会スラヴ語聖書を眺めていて,SlavTeX フォントにはない略号符(титло という。単語の綴りの一部を省略することを示す記号。頻出する語でよく用いられた)を見つけた。それは ч の文字 титло。UTF-8 対応パッケージを公開したら,次は METAFONT でこのアクセント文字を自作して,SlavTeX フォントに組み入れようかと考えている。

※ 12/24 追記: OldSlav UTF-8 その後のその後

ptetex3 では UTF-8 キリル文字が欧文として使用できない,ということについて作者である土村さんから指摘があった。原稿に書いたキリル文字,ギリシア文字はそのままでは欧文として扱われないのは,互換性維持というポリシーでそうせざるを得なかった,欧文としてキリル文字・ギリシア文字を取り扱いたければ ^^十六進形式にすればよい,とのことだった。この場を借りて訂正しておく。

Utf82TeX-0912 で -h オプションを指定すればキリル文字・ギリシア文字を^^十六進形式に変換するようにしたので,utf82tex -h 原稿.tex > 原稿.utf; platex --kanji=utf8 原稿.utf とでもすれば,ptetex3 でもキリル文字・ギリシア文字がきちんと欧文として処理される。OldSlav に関しても inhibitslavactive, utf8, ptetex 3 オプションを併記すれば,ptetex3 でも UTF-8 で組めるようにした。

この休日,教会スラヴ語 LaTeX パッケージ OldSlav の UTF-8 対応作業をしていた。久しぶりの LaTeX マクロへの取り組みだったので,現状の作りを思い出すのに苦労した。とりあえず,SlavTeX オリジナル記法と互換性を確保しつつ,Unicode 古スラブ文字を直截原稿に記述できる拡張まで漕ぎ着けた。いまのところ,Babel スタイルのみの対応である。また,アクティブアクセントモード(アクセント命令を \ なしで記述できるモード)の試験のみ。いまのところ問題はなさそうである。

OldSlav UTF-8 対応の方式設計の基本は,使用する UTF-8 キリル文字の第一オクテット X"D0",X"D1",X"D2" をアクティブ(catcode 13)に設定し,第二オクテットを引数として取る命令として定義する点である。第二オクテットになりうる文字コード 128--191 の分類コードを通常文字(catcode 11)に変更する。第二オクテットで文字を特定でき,それに応じて教会スラヴ語の文字に置き換えてゆく。Dominique Unruh 氏によるめっちゃトリッキーな Unicode パッケージ utf8x.def との共存で苦労した。これと併用できないと,他の言語,例えば古典ギリシア語の直截入力と混在できないことを意味する。ゆえに utf8x.def 共存は OldSlav にとってぜひとも解決の必要な課題だったのである。このため,OldSlav 環境を抜けるとき,utf8x.def がローディングされている場合,キリル文字第二オクテット文字の分類コードを 13 に設定しなおす必要があった。

そのうち,ドキュメントを含めパッケージを整理して公開する予定である。IR 版(本パッケージはこの先ずっとβ版だろうけど,それ以下ということ)を置いておくので,すでに OldSlav をお使いでかつ興味のある方のみ,次の二つのファイルをダウンロードして既存ファイルに上書きして試してほしい。ocscommon.def, oldchurchslavonic.ldf

SlavTeX オリジナル記法が使い方の基本である。さらに ѧ і ї ѣ є ѡ ѿ などの古スラヴ文字を使うことができる。いまのところアクセント引数のグルーピングにバグがある('{ѣ} などとするとうまく動作しない。 と書く必要がある。ただし,教会スラヴ語では複数文字をグルーピングすることにより引数を指定する局面はないはずである)。原稿例(ギリシア語,ロシア語混在試験)とその出力は以下のとおり。教会スラヴ語テキストはヨハネ福音書の冒頭である。uplatex が必要である。原稿では inputenc.styutf8x オプション付が指定されているが,これはロシア語,古典ギリシア語の直截入力のためであり,OldSlav だけならこれがなくても UTF-8 入力が可能である。
 

% -*- coding: utf-8; -*-
% OldSlav UTF-8 対応試験 
\documentclass[b5paper,uplatex,papersize]{jsarticle}
\usepackage[T1,T2A]{fontenc}
\usepackage[utf8x]{inputenc}% ロシア語・ギリシア語向け。OldSlav は不要
\usepackage[polutonikogreek,oldchurchslavonic,russian]{babel}
\languageattribute{oldchurchslavonic}{utf8}% OldSlav UTF-8
\pagestyle{empty}
\kcatcode`б=15\relax% Cyrillic U+0400--U+04FF
\kcatcode`ς=15\relax% Greek U+0370--U+03FF
\kcatcode`Ἄ=15\relax% Greek Extended U+1F00--U+1FFF
\parindent=0pt\relax
\begin{document}
\selectlanguage{oldchurchslavonic}
\parbox[t]{100mm}{%
Въ нач'алѣ б`ѣ сл'ово, \и сл'ово б`ѣ къ б_гу, \и б_гъ б`ѣ сл'ово.
С'ей б`ѣ ^искон`и къ б_гу:
вс^ѧ т'ѣмъ б'ыша, \и без\ъ нег`ѡ ничт'оже б'ысть, "єже б'ысть.
Въ т'омъ жив'отъ б`ѣ, \и жив'отъ б`ѣ св'ѣтъ челов'ѣкѡмъ:
\и св'ѣтъ во тм`ѣ св'ѣтитсѧ, \и тм`а <єг`ѡ не <ѡб\ъ'ѧтъ.
Б'ысть челов'ѣкъ п'осланъ ѿ б_га, "имя <єм`у <іѡ'аннъ:
с'ей прї'иде во свид'ѣтелство, да свид'ѣтелствуетъ 
<ѡ св'ѣтѣ, да вс`и в'ѣру "имутъ <єм`у.
Не б`ѣ т'ой св'ѣтъ, но да свид'ѣтелствуетъ <ѡ св'етѣ:
б`ѣ св'ѣтъ "истинный, "иже просвѣщ'аетъ вс'ѧкаго челов'ѣка 
гряд'ущаго въ м'іръ:
въ м'ірѣ б`ѣ, \и м'іръ т'ѣмъ б'ысть, \и м'іръ <єг`ѡ не позн`а:
}%
 
\vspace{2em}
\selectlanguage{polutonikogreek}
\parbox[t]{100mm}{%
Ἄνδρα μοι ἔννεπε, Μοῦσα, πολύτροπον, ὃς μάλα πολλὰ\\
πλάγχθη, ἐπεὶ Τροίης ἱερόν πτολίεθρον ἔπερσε.\\
πολλῶν δ'' ἀνθρώπων ἴδεν ἄστεα καὶ νόον ἔγνω,\\
πολλὰ δ'' ὅ γ᾽ἐν πόντῳ πάθεν ἄλγεα ὃν κατὰ θῡμόν,\\
ἀρνύμενος ἥν τε ψῡχὴν καὶ νόστον ἑταίρων.\\
ἀλλ'' οὐδ'' ὧς ἑτάρους ἐρρύσατο, ἱέμενός περ;\\
}%
 
\vspace{2em}
\selectlanguage{russian}
\selectruencoding{T2A}%
\parbox[t]{100mm}{%
Прежде всего откроем тайну которую 
Мастер не пожелал открыть Иванушке.
Возлюбленную его звали Маргаритою Николаевной.
Все, что Мастер говорил о ней, 
было сущей правдой.
Он описал свою возлюбленную верно.
Она была красива и умна.
}%
\end{document}
 
ocsutf8test.jpg

Ozon から本が届いた。«Библія, сирѣчь книги Священнаго Писанія Ветхаго и Новаго Завѣта на церковнославянскомъ языкѣ съ параллельными мѣстами, СПб.: Синод. типогр., 1900»--- 教会スラヴ語訳旧約・新約聖書,Сѷнодальнаѧ Тѷпографїѧ シノダーリナヤ・ティポグラーフィヤ(ロシア宗務院印刷所)による 1900 年刊行本の復刻版(Российское Библейское Общество, М. 2005. ロシア聖書協会,モスクワ,2005 年刊)である。教会スラヴ語関連の学術文献目録の筆頭にしるされるべき権威ある版である。長らく探し回ってやっとの思いで手に入れた古書。768.6 ルーブリ,日本円にして 約 2,400 円也。

正教会の八端十字架がカバーに押されている。クラシックな教会スラヴ語文字による二段組み。総 1,660 頁のノンブルはすべて教会スラヴ語の数様式で振られている(アラビア数字のない教会スラヴ語文献では,例えば 2009 を "oldchurchslavonic numeric style 2009" と表現する。ローマ数字で 2009 を "MMIX" と表現するのと同様である)。惚れ惚れしてしまう美しい版である。洋書は紙質に対しておよそ拘りがないけれども,本書には,日本の辞書で用いられるような薄く,かつ勁い上製紙が用いられている。装丁も皮クロスで立派である。聖書だけは別格らしい。私の所有している現代ロシア語訳新約聖書,ギリシア語コイネー原典新約聖書も,同じ上製紙が使われていた。

教会スラヴ語訳聖書カバー・扉・ヨハネ黙示録冒頭

教会スラヴ語訳旧約・新約聖書は,本国ロシアの Ozon でも本当にめったに売りに出ないので,私は今回の掘り出し物が嬉しくて堪らない。入手してすぐ,奥村先生著『改訂第4版 LaTeX2e 美文書作成入門』の多言語の章において Babel 組版例にあげられている『ヨハネ福音書』の冒頭(J 章, p. 357)に相当する本文を,この教会スラヴ語訳聖書からの引用により,拙作教会スラヴ語 LaTeX パッケージ OldSlav で組んでみた。実際は節番号が教会スラヴ語様式でしるされ,引照(聖書中の語句のクロスリファレンス)が付加されているが,これらは省略した。

ヨハネ福音書冒頭LaTeX組版
ヨハネ福音書 1.1--1.10 教会スラヴ語訳 LaTeX 組版
ヨハネ福音書冒頭(書籍の該当部分)
ヨハネ福音書 1.1--1.7 教会スラヴ語訳 書籍の該当部分(節番号付)

LaTeX 原稿は以下のとおり。これは OldSlav SlavTeX オリジナル記法でコーディングしているので,このままではコンパイルできず,拙作 Utf82TeX で変換する必要がある。ulatex evangelie_ioanna.tex でコンパイル,PDF 生成を行った。いちおう,LaTeX ファイル: evangelie_ioanna.tex組版結果 pdf: evangelie_ioanna.pdf もリンクしておく。

% -*- coding: utf-8; -*-
% ヨハネ福音書より 1.1--1.10
% ЕѴА'НГЕЛїЕ Ѿ ІѠА'ННА.
%                2009 (c) isao yasuda, All Rights Reserved.
\documentclass[11pt,b5paper]{jsarticle}
\usepackage[dvips]{color}
\usepackage[T2A,T1]{fontenc}
\usepackage[oldchurchslavonic]{babel}
\pagestyle{empty}
\renewcommand{\baselinestretch}{0,8}
\begin{document}
\selectlanguage{oldchurchslavonic}%
\parindent=0pt\relax%
%<utf82tex_s>
\begin{minipage}[t]{70mm}%
  \hfil{\color{red}^ЕV'АНГЕЛIЕ Q ^IW'АННА.}\hfil\par
  \vspace{0.5em}%
  Въ нач'алэ б`э сл'ово, ^и сл'ово б`э къ б_гу, ^и б_гъ б`э сл'ово.
  С'ей б`э ^искон`и къ б_гу:
  вс^я т'эмъ б'ыша, ^и без\ъ нег`w ничт'оже б'ысть, "eже б'ысть.
  Въ т'омъ жив'отъ б`э, ^и жив'отъ б`э св'этъ челов'экwмъ:
  ^и св'этъ во тм`э св'этится, ^и тм`а >eг`w не >wб\ъ'ятъ.
  Б'ысть челов'экъ п'осланъ q б_га, "имя >eм`у ^iw'аннъ:
  с'ей прi'иде во свид'этелство, да свид'этелствуетъ ^w св'этэ, 
  да вс`и в'эру "имутъ >eм`у.
  Не б`э т'ой св'этъ, но да свид'этелствуетъ ^w св'етэ:
  б`э св'этъ "истинный, "иже просвэщ'аетъ вс'якаго челов'эка 
  гряд'ущаго въ м'iръ:
  въ м'iрэ б`э, ^и м'iръ т'эмъ б'ысть, ^и м'iръ >eг`w не позн`а:
%</utf82tex_s>
\end{minipage}
\end{document}

PTA 会報の LaTeX 文書作成において A4 2 ページを 2 UP で A3 見開きの版面に結合する必要があり,これまで Adobe Acrobat 7.0 で 2 UP 印刷を行うことで対処していた。この場合,A4 文書の余白を適度に切り落とさないと Acrobat が自動で余白を取るため,もとの文書が若干縮小される問題があり,事前に余白調整を手作業で実施していた。

今日,久しぶりに TeX Q & A を見ていたら,pdfpages パッケージの話題が出ていて,その存在を思い出した。このスタイルファイルによって,上記の面倒な調整なしに一発で A3 結合ができるようになった。

pdfpages.sty は外部 PDF ファイルを LaTeX 文書に挿入する命令を提供する。ただし,pLaTeX2e では動作せず,pdfLaTeX での利用が前提なので少々残念ではある。しかし,今回,pLaTeX2e から生成した PDF を再配置・結合するだけの目的であるので,この制約で困ることはまったくなかった。このパッケージの主要な用途は n UP か面付けであって,他の日本語 LaTeX ユーザもおそらく困らないはずである。

A4 縦 2 ページ(portrait)文書 a4.pdf を A3 横 1 ページ(landscape)に合成し,次のページに A3 横 1 ページの別文書 a3.pdf を同じ版面で結合する例を示す。

pdfpages 処理イメージ: tgif + Illustrator にて作成
A4 縦 2p と A3 横 1p を A3 横 2p に合成する
% pdfpage.sty サンプル(pdflatex で処理すること)
\documentclass{article}
\usepackage[paper=a3paper,landscape=true]{geometry}%
%\usepackage[draft]{pdfpages}% 確認用
\usepackage[final]{pdfpages}% 本番用
\begin{document}
% A4 2 頁を A3 見開き 1 枚にマージ
\includepdf[nup=2x1,pages={1-2}]{a4.pdf}%
% A3 はそのまま次の頁にマージ
\includepdf{a3.pdf}%
\end{document}

\usepackage[オプション]{pdfpages} をプリアンブルに記述する。オプションで draft を指定すると,挿入する PDF のページ枠だけを出力する。確認用である。デフォルトは final(PDF そのものを挿入する)である。\includepdf 命令が外部 PDF ファイル挿入のコントロール・シーケンスである。a4.pdf ファイルを指定する行は,横 2 x 縦 1 の 2 UP でレイアウトする指示(nup オプション)である。pages オプションをきちんと指定しないと 1 ページ目しか処理されない。

例では geometry.sty も読込むように指定している。これは,pdfLaTeX の article.cls ドキュメントクラスには A3 用紙の版面が定義されておらず,A3 出力が独力では難しく,geometry パッケージの機能を使うことにしたからである(pLaTeX2e・奥村先生の jsarticle.cls は a3paper をサポートしている)。

pdfpages パッケージはこのほかに,ページ縮小や,レイアウトマージン調整,版面の回転など様々な機能を備えている。詳細はパッケージのマニュアルを参照されたい。

うちは娘の中学校の PTA の役員をやらさせられている。文化祭をテーマとした PTA 会報を出すというので,妻がその作成を担当し,私がパソコンで文書データを作るということになった。これまでの会報文書データに雛形はなく,好き勝手に作ってよいとのことだったので,LaTeX で制作することにした。

私にとって,LaTeX 文書作成はもちろん趣味の領域でもあり,ロシア語,パッケージドキュメントの組版以外は,まじめに実用文書を組んだ試しが数えるほどしかない。そもそも LaTeX というソフトウェアは科学技術論文,一般書籍の組版に最適化されており,いわゆる DTP 要素の強い会報には向かない,とわかっていた。それでも LaTeX が好きなので,敢えて LaTeX で挑戦。multicolumn でスッキリしたレイアウト設計を基本とした。掲載写真とそれに付加するコメントとを整列させる命令や,未入手原稿のエリアを指定文字数分確保する命令など,いくつかマクロを書いた。外部からの要請で文書を作るとなると,これまであまり注力しなかったグラフィックス関係の組方で悩むことが多く,インターネットの情報を探索しつつ解決し,結構勉強になった。

過去の会報は A3 用紙の表にページ 1 と 4,裏にぶち抜きのページ 2 と 3 を配置する和綴イメージだった。これを中折にすると 1 枚だけの右綴小冊子となる訳だ。今回の版面設計も,これに合わせることにした。A3 横 2 ページ(見開きで 4 ページ)のファイルを作るのに,まず A4 縦の 2 ページ,A3 横の 1 ページ(見開き 2 ページ)を個別に LaTeX で組版し,PDF を生成した。Adobe Acrobat 7.0 を用いて,A4 縦 PDF の余白編集をしたあと A3 横見開きに合成した(2 UP 印刷)。A4 縦見開き合成 PDF と A3 横 PDF を,A3 横 2 ページ(見開きで合計 4 ページ)の PDF 1 ファイルに纏めて成果物とした。dvipdfmx による個別 PDF ファイルの合成には,pdftk ユーティリティを用いた。Acrobat 7.0 にも PDF 合成機能があるが,これだと文字の欠落が出てしまったので使わなかった(この原因が dvipdfmx にあるのか Adobe Acrobat にあるのかは不明)。

画像に文字をオーバーレイさせる方法を知ったのは今回の収穫。簡単にそのメモをここでしるしておく。

写真にコメントなどを上書きしてレイアウトしたいとき,Microsoft Word ではテキストボックスを画像の上に作成してテキストを入力し,枠と塗りつぶしを消去すればこれができる。LaTeX の場合は overpic パッケージにより実現可能である。teTeX ならはじめからインストールされているようである。

overpic.sty は graphicx パッケージを前提とする。プリアンブルには,次のように指定しておく。

\usepackage[dvips]{graphicx}% dvipdfmx なら dvipdfm オプション
\usepackage[abs]{overpic}

overpic 環境のなかで,ベースとなる画像ファイルを指定し,それに重ね打ちする文字を \put 命令でレイアウトする,というのが使い方の基本である。\put 命令にテキストを位置づける座標を指定する。その値の調整がやっかいではあるが,overpic 環境のオプションに grid を指定すれば,位置グリッドが確認できるので,これをもとに,\put(x 座標, y 座標) を決める。y 座標は文字ボックスのベースラインをポイントすることに注意。

簡単な例として,楽譜を背景にした合唱発表会の曲目一覧を作ってみた。背景画像は,デジカメで撮影した楽譜(バッハ・無伴奏パルティータ 2 番)の写真を Adobe Photoshop, Illustrator で加工し,EPS 形式で保存したものである。テキストの着色には color.sty を使用した。グリッド付と,それを外した本来の組版成果を示す。

overpic_test.jpg

原稿は以下のとおり。\put 命令で重ねる文字列は,複数の段落をなす場合を想定し,\parbox 命令に入れている。

% -*- coding: utf-8; -*-
% 合唱発表会曲目一覧(overpic.sty の試験)
%                      (c) 2009, Isao YASUDA, All Rights Reserved.
\documentclass[b5paper]{jsarticle}
\usepackage[dvips]{graphicx,color}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[abs]{overpic}
\pagestyle{empty}
\definecolor{blue}{cmyk}{0.94,0.54,0,0}% NavyBlue
\def\baselinestretch{0.8}%
\begin{document}
\parindent=0pt\relax%
\begin{minipage}[t]{80mm}
  \begin{overpic}[width=80mm]{musicnote.eps}% 画像指定。試験時 grid を指定
    \put(35,245){% 文字テキストの座標を指定
    \parbox[t]{6cm}{% 重ね打ちする内容
    \parindent=0pt\relax%
    \hspace{5zw}{\gtfamily 合唱発表会曲目}\\[1.1zw]
    \small\bfseries\color{blue}%
    \makebox[9zw][l]{1学年\quad 夢の世界を}\\
    \makebox[9zw][l]{\qquad 1--1\quad 夜汽車}\\
    \makebox[9zw][l]{\qquad 1--2\quad この地球のどこかで}\\
    \makebox[9zw][l]{\qquad 1--3\quad Let's search for tomorrow}\\[.5zw]
    \makebox[9zw][l]{2学年\quad COSMOS}\\
    \makebox[9zw][l]{\qquad 2--1\quad 明日に渡れ}\\
    \makebox[9zw][l]{\qquad 2--2\quad 遠い日の歌}\\
    \makebox[9zw][l]{\qquad 2--3\quad 時の旅人}\\
    \makebox[9zw][l]{\qquad 2--4\quad 予感}\\[.5zw]
    \makebox[9zw][l]{3学年\quad 信じる}\\
    \makebox[9zw][l]{\qquad 3--1\quad 君とみた海}\\
    \makebox[9zw][l]{\qquad 3--2\quad IN TERRA PAX}\\
    \makebox[9zw][l]{\qquad 3--3\quad 虹}\\[.5zw]
    \makebox[9zw][l]{昼休み合唱団}\\
    \makebox[9zw][l]{\qquad 青いベンチ}\\
    \makebox[9zw][l]{\qquad 瑠璃色の地球}\\
    \makebox[9zw][l]{\qquad 手紙}\\[.5zw]
    \makebox[9zw][l]{PTA\,\&\,職員}\\
    \makebox[9zw][l]{\qquad 君をのせて}%
    }}%
  \end{overpic}
\end{minipage}
\end{document}

今回 LaTeX で作成した文書は,おおむね妻の眼に適うものになった。とはいえ,LaTeX で文書を作ると,和文の斜体がないなどの事情について,ワープロのマナーに慣れた人から「え,どうして?」テキな不満をぶつけられることがある。和文には斜体という組方の伝統がないからと説明しても,どうも納得してもらえない。まあよい。LaTeX の版面の素晴らしさに惚れ込んでしまうと,吹出しやら,和文の斜体強調やら,波形下線やら,倍角文字やら,ボックス枠線やらが下品な装飾に見えて来るから不思議である。

息子が新型インフルにかかってしもた。かわいそうに,40 度近い熱で唸っている。吸引タイプの薬をもらってきた。新型インフル問題では,ここのところ罹患率がきわめて高くなり,ワクチン接種運用が混乱している。半年ほど前は宝くじ当籤レベルだったのに。あの当時の大阪などの学校閉鎖騒ぎはいったいなんだったのか。いまこの季節,受験生は戦々恐々だろう。その親もしかり。ああ,俺もなんだか頭が痛くなってきた。

* * *

本を読み飽きて,退屈しのぎに LaTeX で遊んだ。ルイス・キャロルの『鏡の国のアリス』に出てくる鏡の国では,すべてがあべこべ,本の文字も反転している。その鏡の国の文字を組んでみた。
 

alice-mirror.jpg

フォントは Garamond ファミリー。文字の反転は graphicx パッケージの \reflectbox 命令を使っている。

\documentclass[12pt]{article}
\usepackage{graphicx}
\usepackage[T1]{fontenc}
\pagestyle{empty}
\begin{document}
\usefont{T1}{ugm}{m}{n}% Garamond
\begin{center}
\itshape\Large%
\reflectbox{JABBERWOCKY}\\
\reflectbox{'Twas brillig, and the slithy toves}\\
\reflectbox{Did gyre and gimble in the wabe:}\\
\reflectbox{All mimsy were the borogoves,}\\
\reflectbox{And the mome raths outgrabe.}%
\end{center}
\end{document}

Profile

ISAO。システムエンジニア。昭和 30 年代を懐かしむオヤジ。ロシアに興味があります。
[more], [About our site]

Notice

この文書はフィクションであり,実在する個人,団体等とは一切関係ありません。

文書の記述内容は無保証です。不適切な表現があればコメントにてご指摘ください。

管理者が公序良俗に反すると判断したコメント,トラックバックは,断りなく削除される場合があります。

Links

About this archive

All Entries of Category TeX

Previous: MacOSX

Next: ars

Recent Entries in Main Index.
All Entries in Archive Index.

Web Pages

Powered by Movable Type 4.1