Re: pLaTeXでのBabel (ハンガリー語が組み込めない原因)

名前: トノ
日時: 2005-01-02 16:03:19
IPアドレス: 61.210.26.*

>>32158 , >>33328 稲垣さんのページに置いていただいている perl スクリプトですが、 コードだけでは素っ気ないので、最新の pTeX で不要になった部分を オプションにするとともにドキュメントらしきものを付け加えました。 最後の方に少々感傷的な駄文も付いていますがご容赦のほどを。 よろしければ差替えていただきたく > 稲垣さん #!perl #==== 8bt2ptex.pl ====================================================== # # TeX の 8-bit ハイフネーション・パターン・ファイルを pTeX 用に改変 # # 2005/01/02 # written by トノ # #======================================================================= foreach ( 'c', 'C' ) { # 有効なオプション・スイッチのリスト $possible_switch{$_} = 1; } foreach ( @ARGV ) { # 引数の解析 if ( /^\-(.)$/ ) { # オプション・スイッチか? if ( $possible_switch{$1} ) {# 有効なオプション・スイッチか? $switch{$1} = 1; } else { warn("Illegal switch: $_\nAborted"); exit(127); } } else { $source = $_; last; # 最初のファイル指定より後ろの引数は無視 } } if ( $source eq '' ) { warn("No file is specified.\nAborted"); exit(127); } if ( $switch{'c'} && $switch{'C'} ) {# -c と -C の同時指定か? warn("Conflict of switches.\nAborted"); exit(127); } open(SOURCE, $source) || die("Failed to open source file.\nAborted"); # 日本語化された Perl で <> 演算子による # 読込み結果をバイト単位に分割する方法が # 思いつかないので、read で読込むために # 敢えてファイル・ハンドルを割り当てる $line = ""; while ( read(SOURCE, $byte, 1) ) { unless ( $switch{'C'} ) { #**** 「Bad \patterns」への対処 $byte = sprintf("^^%x", ord($byte)) if ( $byte gt "~" ); } $line .= $byte; if ( $byte eq "\n" ) { # 1行分の終わりか? &process_line($line); # 「Invalid code 〜」への対処と結果出力 $line = ""; } } #**** 最終行に行末コードがない場合に備えて &process_line($line) unless ( $line eq "" ); exit(0); #============================================================= sub process_line { local($line) = ($_[0]); #**** 「Invalid code 〜」への対処 if ( $switch{'c'} || $switch{'C'} ) { $line =~ s/(\S)\\lccode/$1 \\lccode/g; # 「\lccode」の前に空白文字以外の # 文字があれば、それ以上深く考えずに # 半角スペースを挿入する # こんなに大雑把でいいのかしらん } print $line; } #======================================================================= __END__ #============================================================== #======================================================================= ==== DESCRIPTION ===================================================== ASCII pTeX では、p3.1.4 へのバージョン・アップにより、フォーマット・ ファイル作成時に一工夫[*1]すれば、TeX で用いられる 8 ビットの ハイフネーション・パターン・ファイルの多くが利用できるようになりました[*2]。 しかし、一部のハイフネーション・パターン・ファイルは、やはりそのままでは フォーマット・ファイル作成でエラーになることがあります。W32TeX[*3]に 含まれている中では、huhyph.tex(ハンガリー語用)、trhyph.tex(トルコ語用) および ukrhypmp.tex(ウクライナ語用)がこれに該当します。 エラーには次の 2 通りがあります。 <エラーA> ファイル冒頭でのコード・テーブルを設定する \lccode/\uccode 命令で Invalid code (XXXX), should be in the range 0..255. というエラー・メッセージ(「XXXX」の部分は不定)が表示される[*4]。 <エラーB> SJIS 用のフォーマット・ファイルを作成しようとすると、実際の ハイフネーション・パターンの設定部分(\patterns 命令の引数)で Bad \patterns. というエラー・メッセージが表示される[*5]。 この perl スクリプトは、これらのエラーが生じないように、ハイフネーション・ パターン・ファイルに改変を加えるものです。ただし、<エラーA> については、 pTeX p3.1.8 では生じなくなっているため、スクリプト実行時にオプション・ スイッチで指定された場合に限り対処するようになっています。 なお、p3.1.8 以降[*6]の pTeX で、日本語文字コードとして JIS または EUC を 指定してフォーマット・ファイルを作成する場合には、本スクリプトによる改変は 不要です。 ------------ *1 この点については、三重大学の奥村晴彦先生の運営による TeXWiki http://oku.edu.mie-u.ac.jp/~okumura/texwiki/ の中の「新 pTeX と Babel」という記事が参考になるでしょう。 *2 これは、 http://www.ascii.co.jp/pb/ptex/base/changes.html にある ASCII の更新情報のページで、ptex-src-3.1.4.tar.gz について ^^ 形式で入力された文字コードが漢字の第 1 バイトに当たる場合、 次の文字と共に漢字にしようとしてしまうのを修正。 と記されているところによるものと思われます。 *3 近畿大学の角藤亮先生が配布しておられる MS Windows 用の TeX システム *4 pTeX p3.1.4 で huhyph.tex の読込み時に生じます。 *5 trhyph.tex および ukrhypmp.tex の読込み時に発生します。また、pTeX p3.1.8 以降では huhyph.tex 処理時にも発生します(p3.1.4 では先に <エラーA> が生じるので顕在化しないようです)。 *6 p3.1.5〜p3.1.7 でどうなのか、私は全く把握できていません。 ==== REQUIREMENT ===================================================== バージョン 4 以降の Perl で動作すると思います。 私が確認したのは、MS Windows 98SE 上の JPerl 4.036、Perl 5.005_03 および JPerl 5.005_03 です。 MS Windows 上で動作する Perl は、いくつかありますが、本スクリプトの 実行に使うだけなら、謎の二面相さんが Windows 用に移植された日本語 Perl 4.036 が手軽に導入できるのでお薦めです。Vector では jplwin32.lzh および jplw32up.lzh(こちらは不具合修正差分)として配布されています。 URL = http://www.vector.co.jp/soft/dl/win95/util/se039039.html アーカイブを展開して差分適用し、jperl.exe と perlglob.exe を コマンド検索パスの通ったディレクトリー(環境変数 PATH に登録されて いるディレクトリー)にコピーすれば、DOS 窓で利用できるようになります。 ==== USAGE =========================================================== 基本的にはコマンドラインで、 perl 8bt2ptex.pl SOURCE のようにして使用します。SOURCE には、改変元のハイフネーション・パターン・ ファイルのファイル名を指定してください。本スクリプトや改変元のファイルが カレント・ディレクトリー以外にある場合はそれぞれディレクトリー名付きで 指定する必要があります。 上のようにすると、SOURCE を改変したものが標準出力に書き出されます。 <エラーA>(Invalid code 〜)への対処も行なう場合は、 perl 8bt2ptex.pl -c SOURCE のように、-c スイッチを付加て下さい。<エラーB>(Bad \patterns. 〜)への 対処を行なわず、<エラーA> への対処だけを行なう場合は、-C スイッチを 付加して下さい。-c と -C は同時には指定できません。 コマンドラインの指定に間違いがあるとエラー・レベル 127 を、改変元ファイルを 開くことが出来ないとエラー・レベル 63 を返します。 改変結果は標準出力(DOS プロンプト画面)に出力されますが、通常はこれを リダイレクトで別のファイルに書き出して利用することになるでしょう。例えば、 huhyph.tex を改変して huhyph-p.tex というファイルを得る場合、 perl 8bt2ptex.pl huhyph.tex > huhyph-p.tex などとします。リダイレクトによる書き出しは通常、既存ファイルを上書きして しまうので、リダイレクト先のファイルは、改変元とは別のファイル名にするか、 または別ディレクトリーのファイルにする必要があることに注意ください。 こうして得られた huhyph-p.tex を、$TEXMFMAIN/ptex 以下のディレクトリーに huhyph.tex というファイル名で格納しておくなどの方法[*7]で、pTeX が改変後の ものを先に見つけてくれるようにしてフォーマット・ファイルを作成してください。 ------------ *7 オリジナルのものと差替えてしまうのは避けた方がいいでしょう。 ==== MISCELLANEA ===================================================== 私(トノ)は、このスクリプトについて著作権を主張しません。 ==== MEMOIRS ========================================================= pTeX p3.1.4 で 8-bit のハイフネーション・パターン・ファイルが使えると いうことに気付き、2004 年 9 月、@nifty のフォーラム FTEX の会議室で 発言したのがきっかけとなり、奥村先生のページの掲示板 http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/ でやりとりするうち、一部のハイフネーション・パターン・ファイルで生じる エラーへの対策を思いついて作ったのが、このスクリプト(の原形)です。 以前の pTeX ではこれらのファイル(の多く)を利用できないことがネット上 あちらこちらで論じられているのは知っていたので、そういった方々がすぐにでも 反応なさるだろうと思ったのですが、しばらく経っても反響がうかがえません でした。ひょっとしてもっと前の pTeX で解決済みだったのかと情報を探して みましたが、見つかりません。自信の持てないことを、インターネット上の 完全にオープンな場所で言い出すのは相当勇気のいることで、その点 FTEX だと 顔馴染み感覚があって気軽に持ち出すことが出来ました。 思い返せば今から 10 年余り前、TeX なるものの評判を聞きながら、「縦パ」の 使いこなしに挫折し、TeX for Windows ではマシンの非力ゆえに諦めかけていた 私が、EastWind 版 TeX を求めて、後の FTEX の母体となる FPRINT のライブラリを 訪れたのが、FTEX でのお付き合いの始まりでした。やがて会議室も読ませて いただくようになり、さらにゴミ撒きもするようになり、と、慣れ親しんできた FTEX が間もなく終焉を迎えようとしています。ネット上から消滅するのです。 時流とはいえ寂しくてなりません。 ==== HISTORY ========================================================= 2004/10/06 initial version 2005/01/02 * 「Invalid code 〜」への対処を、オプションにした。 * ドキュメントを付けた。 ========================================================================

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)