TeXソースのテンプレートに、顧客データベース等からデータが抽出され差し込みされて、印刷物を出力するというバッチ処理の中で、使ってます。(多分に漏れず人名が厄介です)「▼吉」やコード記載などは残念ながら、データ入力や表示のユーザーインターフェースとして使えませんでした。
そこで、utf82texのプリプロセッサを使っていたのですが、文字抜けが生じることに気づいた次第です。
(環境がOSXでしたのでUTF-8でのデータのやり取りが簡易だった、というだけでなくutf82tex以外の選択肢を知りませんでした。TeXWikiのpTeXと多言語処理にはutf82texの方が詳しく掲載されていたもので^^)
このような事情から、奥村先生のレスが参考になりそうです。
(utf82texとutf8toutfとの比較記事があるかと思い検索してみましたが,残念ながら見つけることができませんでした。)
ありがとうございました。
従来の utf82tex は U+20000 超のエリア: Unicode CJK Unified Ideographs Extension B(CJK 統合漢字拡張 B)の文字をサポートしておりませんでした。「つちよし」などもこの領域にあります。utf82tex は,もともと欧文変換用にできており,漢字・ワイド記号文字の取り扱いにおいて考慮の足りないところがありました。
CJK 統合漢字拡張 B 領域の 1,939 文字をサポートした utf82tex-0906 をリリースしましたので,よろしければお使いください。OTF パッケージ開発版の \CID 命令に変換します。「つちよし」なら \CID{13706} で出力します。中国語文字の場合は \CIDC{CID番号} \CIDT{CID番号} に変換するようになっています。知られているだいたいの漢字は変換できるはずです。従来の▼指定で登録異体字を出力する機能もまだ活きています。http://yasuda.homeip.net/dl/dl.html から utf82tex-0906.{zip, tar.gz} をダウンロードしてください。
Windows Vista のおかげで拡張領域の漢字も当たり前のように使われるようになったのですね。utf82tex は upLaTeX の登場により,タイ語,教会スラヴ語など特殊用途以外では,もう誰も使わないと思っていたのですが,まだ使ってくださる方がいると知り,上記のとおり改修いたしました。
なお,UCS-CID 変換テーブルの構築では,Unicode 5.1 Unihan database と Adobe Reader V8 添付 CMap(UniJIS-UTF16, UniGB-UTF16, UniCNS-UTF16, UniKS-UTF16)とをベースにしています。角藤先生の utf8toutf.c のテーブルも参考にさせていただきました。
それでは失礼します。
早速のご返信ありがとうございました。
さきほどの記事に書き忘れました事項を追記します。
新版の詳細ドキュメントは,
http://yasuda.homeip.net/tex/utf82texdoc.pdf
です。Unicode 文字変換仕様をしるしています。
なお,旧版をお使いいただいていた方は
- modules/utf82tex
- tables/cjk-tbl
- config/utf82texrc
を旧ファイルに上書き,ないし新規追加する必要があります。
もちろん gmake utf82tex-install でも OK です。
cjk-tbl は今回追加したテーブルです。
cjk-tbl の冒頭コメントにテーブル作成概略を書いておきました。
それではご自愛ください。
ちなみに、v0.3 以降の PXfltsrc パッケージでは
\documentclass{jsarticle} \usepacakge{otf} \usepackage{pxbase} \usepackage[utf8,useux,useaj]{pxfltsrc} \begin{document} \filterstart \begin{itemize} \item 森鷗外 \item 髙田万由子 \item 𠮷澤ひとみ \end{itemize} \end{document}
でできます。
まあ、話題にもなってないわけですが ;-)
安田さん、奥村先生、こんにちは。
PXfltsrc は次のような目的を念頭において作られています。
- PTEX_IN_FILTER の機能を W32TeX でも使いたい。
- それを使って、読込時の漢字コード変換がしたい。
- JIS X 0208 に含まれるギリシャ・ロシア文字を UTF-8 のバイト列に変換したい。
- JIS X 0213 の範囲の文字を(直接書いた形で)処理できるようにしたい。
従って、一番大事なのは、実は外部フィルタ呼出の機能だったりします。よく utf82tex で実験させて頂きました。 ;-)
自前で行っている変換については、基本的に「TeX でできることは TeX に任せる」という方針で、UTF-8 のバイト列で扱うことを理想としています。従って、useaj
(BMP の外の文字を \AJ{nnnnn}
に変換)は仕方がない(BMP 外の文字は pTeX では扱えない)として、useux
(0208 の外の文字を \Ux{xxxx}
に変換)は本来の目的からすると邪道ということになります。useux
を使わないと次のようになります。
\documentclass{jsarticle} \usepackage{otf} % \UTF と \CID を処理する \usepackage{pxbase} % \Ux と \AJ を各々 otf の \UTF と \CID に投げる \usepackage[bxutf8]{inputenc} % UTF-8 バイト列を \Ux に変換 \usepackage[utf8,useaj]{pxfltsrc} % SMP 文字を \AJ に変換 \begin{document} \filterstart \begin{itemize} \item 森鷗外 \item 髙田万由子 \item 𠮷澤ひとみ \end{itemize} \end{document}
(勿論、「ツチ吉」がなければ pxfltsrc は不要です。)
ただ、このように多くのパッケージを組み合わせなければいけないというのは、一般の LaTeX ユーザからすれば非常に使いにくいものであることは確かです。(プログラマの視点からすれば自然だけど ;-) ) useux
の存在意義はその辺りにあるのかなと思います。PXfltsrc の v0.4 では pxbase の併用も不要にしてしまいました。
私は,最近の LaTeX 事情に疎くなってしまいました。
その間に,日本語 pTeX の世界でも Unicode 対応が
進んでいることを upLaTeX や PXfltsrc で実感しました。
JISX 0213-2004 について,システム屋である私は,JIS83 と同様,
一時期「余計なことしやがって」モードだったのですが,
使える漢字の幅がどんどん広がって,普及するとさすがに便利に
なったと認めないわけにはいきませんね。
私はちょうど教会スラヴ語 LaTeX パッケージ OldSlav の
Unicode サポートをやろうと思っていたところで,
Dominique Unruh 氏の Unicode support for LaTeX にある
utf8x.def を前提にしようと考えていました。
ZR さんの試みも参考にさせていただきますね。
それでは。
ご助言ありがとうございました。永らく放置してすみません。
教会スラブ語の新・旧約聖書をロシアから入手しまして,やっと教会スラヴ語パッケージ OldSlav の改訂に着手する元気が出て来ました。Babel 言語として使えるところまでできましたので,すでに OldSlav をお使いいただいているスキ者ユーザー様限定で,私のサイトにお試しファイルを公開しました。
- http://yasuda.homeip.net/oldslav/ocscommon.def
- http://yasuda.homeip.net/oldslav/oldchurchslavonic.ldf
現代ロシア語で使われる文字のほか,ѣ, є, і, ї , ѵ, ѷ, ѡ, ѻ, ѿ, ѧ, ѩ, ѳ, ѹ, etc., etc., --- 文字化けしていたらすみません --- Unicode U+0400--U+04FF 領域で定義された古スラヴ文字を直接入力することができます。SlavTeX 互換が基本なので,Utf82TeX でサポートしている記法で入力できます(OldSlav の既存のドキュメントに説明があります)。フォントエンコーディングは変えていないので,ハイフネーションも従来通り機能します。ただし,ドキュメントやらまだ手が付いていませんので,そのうち整備してきちんとアーカイブにしたいと思います。
ご指摘いただきました Unicode 合成文字機能の対応は,今回見送りとしました。アクセントや略号符は従来どおり SlavTeX 互換のままです。いまの Unicode で定義されているアクセントや略号符だと中途半端で,文字合成まで対応する気力が起きません。また教会スラヴ語の複雑な複式アクセント,気息記号や略号符付きのテキストを表示できるテキストエディタ環境が現実的にあるとも思われない,というのがその理由です。(その前に時間がないというのが最大の理由ですけど)
この OldSlav UTF-8 モードは,残念ながら,日本語 LaTeX では ttk さんの upLaTeX でしか使えません。土村さんの UTF-8 対応だとキリル文字が JISX-0208 に読み替えられてしまい,欧文として扱われません。pdfLaTeX でも OK です。一応,inputenc.sty なしでも,utf8.def,utf8x.def(Dominique Unruh 氏 unicode パッケージ)と併用しても,動作するようにしました。 Babel の \languageattribute で utf8 オプションを指定します。
それではご自愛ください。
このあたり、誤解が多いようなので弁明させていただきます。
ptex では 「\α」のようなマクロが定義できてしまいます。これが大問題です。互換性維持のために ptex に UTF-8 文字を処理させるにしても、ShiftJIS/EUC-JP で2バイト文字であったものは JIS X 0208 に読みかえざるをえませんでした。
しかしながら逃げ道があります。「α」を「^^ce^^b1」と表記します。TeX では同一視されますが、私の UTF-8→JIS 変換では処理が異り、^^ならば JIS には変換されません。
ですので、「自分は \α などというマクロは使わない」と決心していただいた UNIX ユーザさんには、「α」→「^^ce^^b1」のような変換フィルタ(perl で数行でしょう)を PTEX_IN_FILTER に登録していただければ、気にせずに「α」と書いていただけるようになります。
安田さんの Utf82TeX にこの機能を追加していただければ、PTEX_IN_FILTER に登録していただくのに、まさにふさわしいフィルタになると思っています。
いつも ptetex のお世話になっています。
>ptex では 「\α」のようなマクロが定義できてしまいます。これが
>大問題です。互換性維持のために ptex に UTF-8 文字を処理させ
>るにしても、ShiftJIS/EUC-JP で2バイト文字であったものは JIS X
>0208 に読みかえざるをえませんでした。
おっしゃるとおり,私はまったく誤解していました。互換性維持の件,理解しました。
Cyrillic, Greek と Greek Extended エリアの文字を ^^HEX 変換するよう Utf82TeX を手直しして試してみました。たしかに ^^HEX 記法だと古典ギリシア語を含め欧文としてきちんと処理されますね。
土村さんの ptetex UTF-8 対応,ttk さんの upLaTeX 以来 Utf82TeX の意義は失われたと思っておりましたが, まだ使いようがありそうです。
拙作 OldSlav の UTF-8 対応は Unicode Cyrillic 開始文字 X"D0" などをアクティブにしてキリル文字を処理しており,ptetex だと,"<ѣ" のようなアクティブ・アクセント命令で問題が出ました。土村さんのお話で,「自分は \α などというマクロは使わない」オプションを追加して ptetex でも動作するようにしたいと思います。
それでは。
安田さん、こんにちは。ZRです。
UTF-8 対応の OldSlav と PXfltsrc の組み合わせを試してみました。 結果、以下のような文書で正しく処理できています。
\documentclass[a4paper]{jsarticle} % 注意: このファイルのエンコーディングが UTF-8 で、かつ % platex -kanji=utf8 の場合は、\filterinencoding 指定は不要 \usepackage[ucyrl]{pxfltsrc} % キリル文字を欧文扱い % ocscommon.def の中のキリル文字を欧文扱いで通すために % 入力ファイルへのフィルタを有効にする. % なお新版の ocscommon.def のエンコーディングは UTF-8. \filterinput\filterinencoding{utf8} \usepackage[oldchurchslavonic,english]{babel} \nofilterinput \languageattribute{oldchurchslavonic}{utf8}% \usepackage{bxbase} \bxcaptionlanguage{default} % キャプション言語変更を抑止 %%〈^〉の catcode 変更を抑止する (残念...) \addto\extrasoldchurchslavonic{\catcode`\^=7\relax} \begin{document} \filterinencoding{auto} % このファイル自体はエンコーディング自動判別 \filterstart \newcommand{\ocsTeX}% 嘘です ;-) {\OCSTVERDO\kern-.15em\oksija\OCSestd\kern-.05em\OCSHER} 初めに{\TeX}ありき。{\TeX}は神と共にありき。 \begin{otherlanguage*}{oldchurchslavonic} Въ н\^{а}ч'алэ б`э {\ocsTeX}ъ, <и {\ocsTeX}ъ б`э къ б_гу. \end{otherlanguage*} \end{document}
★ あと、oldchurchslavonic.ldf の
\input ocscommon.def%
の行を
\input{ocscommon.def}
に変更する。
対処が必要だった点を述べておきます。
- ocscommon.def には直接 UTF-8 で書かれたキリル文字があり、
これが和文扱いされないようにする必要がある。
PXfltsrc では
\filterinput
を実行すると 以降外部から読まれるファイルにもフィルタが適用されるようになる。 しかし、それには LaTeX 形式の\input{file}
で読み込む必要があり、 残念ながら、ocscommon.def の読み込みは plain TeX の\input file
だったため、 ここを修正しないと上手くいかなかった。 勿論、これは PXfltsrc 特有の事情であり、PTEX_IN_FILTER
でフィルタ適用させる場合には関係がない。 しかし、もしかしたら 「ocscommon.def へのフィルタ適用の不要にするために、 このファイル中のキリル文字を予め^^ab
形式に直しておく」 といいかも知れない。 - そもそも、oldchurchslavonic は 〈^〉 をアクティブにするので、
するので、
^^ab
に変換しても上手くいかないのだった。:-( 取りあえず^а
は\^{а}
で代用できるので、 〈^〉 のカテゴリコードを元に戻して対処した。 (なお、\^а
だと\^^^d0^^b0
となり^^^
がコード 0x1e の文字とみなされるので駄目である。) これを考慮すると、〈^〉 だけアクティブにしないような設定の選択があれば よいかも知れない。
他にも言いたいことがあるのですが、それはまたの機会とさせて下さい。 それでは。
こんな誰が使うのかもわからない---利用者は稲垣さんと私だけだと思います---言語パッケージをお試しいただきありあがとうございます。またいろいろご指摘もくださり恐縮します。
まだドキュメントがきちんとできていないのですが,お試し版一式アーカイブ oldslav-1.1rc.zip を私のサイトの書庫におきました。
http://yasuda.homeip.net/archives/oldslav-1.1rc.zip
\input の件は訂正してあります。
土村さんの ptetex3 でも制限付で UTF-8 入力ができるようにしました(私が使っているのはもう2年以上前に組込んだ ptetex3 + upLaTeX なんですけど)。
\languageattribute{oldchurchslavonic}{slavdate,ptetex,utf8}
のように ptetex オプションが必要です。このモードはアクセント命令用文字(^, ~, <, ', `, ", _, |)をアクティブにしません。アクセント付加で \ を付ける通常のやり方です。^ をアクティブにする場合の問題は,これで回避できるかも知れません。もともと SlavTeX は独自 TeX フォーマットを生成して唯我独尊状態で動くシステムで(ロシア人は平気でキリル文字からなるマクロを書きます),私の移植も他のパッケージとの相性がどうにも心配です。いろいろな言語パッケージと混在試験をしているつもりではありますが...
ただし,ptetex 付の場合,アクセント付加対象文字をグルーピングしないといけません(ご指摘のとおり)。また,アクセント位置をごちゃごちゃ調整している処理がすっとばされて \DeclareTextAccent 処理にお任せになり,一部文字のアクセント位置がいまひとつの見栄えになってしまいます。これは UTF-8 の取り扱いについて私自身が未熟のためで,そのうち手直ししたいと思います。
今回 UTF-8 対応以外の追加として,教会スラヴ語聖書ではじめて見た文字付略号符のフォントを自作してパッケージに同梱しました。METAFONT から Type1 変換してあります。あと,教会スラヴ語のハイフネーション文字はアンダースコアのほうが古風なので,このグリフも追加して,ハイフンと入れ替えてあります。あと,\russiantext, \textrussian#1 で T2D, X2, XS フォントエンコーディングのキリル文字を使えるようにしました。fontenc.sty で利用するキリルエンコーディングを宣言しておく必要があります。
それでは。
>\languageattribute{oldchurchslavonic}{slavdate,ptetex,utf8}
>のように ptetex オプションが必要です。このモードはアクセント命令用文字
>(^, ~, <, ', `, ", _, |)をアクティブにしません。アクセント付加で \ を付ける
>通常のやり方です。^ をアクティブにする場合の問題は,これで回避できるかも
>知れません。もともと...
ptetex とともに inhibitslavactive を指定しないと ^ をアクティブにしてしまいます。
\languageattribute{oldchurchslavonic}{inhibitslavactive,slavdate,ptetex,utf8}
混乱させるようなことを書いてしまいすみません。
それでは。
早速対応していただきましてありがとうございます。細かいことですが1点だけお願いがあります。
> ptetex とともに inhibitslavactive を指定しないと ^ をアクティブにしてしまいます。
> \languageattribute{oldchurchslavonic}{inhibitslavactive,slavdate,ptetex,utf8}
私の UTF-8 対応ですが、ディストリビューションの ptetex3 だけでなく、その後継となるディストリビューションの ptexlive にも入れています。
拡張に関するライブラリを ptexenc と命名しておりますので、オプション名には ptetex よりかは ptexenc を用いていただけますと、ptexlive ユーザにもわかりやすと思います。ご検討いただけましたら幸いです。
>私の UTF-8 対応ですが、ディストリビューションの ptetex3 だけで
>なく、その後継となるディストリビューションの ptexlive にも入れて
>います。
>
>拡張に関するライブラリを ptexenc と命名しておりますので、オプ
>ション名には ptetex よりかは ptexenc を用いていただけますと、
>ptexlive ユーザにもわかりやすと思います。ご検討いただけましたら
>幸いです。
私はもう最近の事情に着いて行けてません。ptexlive が出ていたんですね。もう私は2年もシステムを更新しておりませず,お恥ずかしい。時間を見つけてぜひ ptexlive でも OldSlav を確認して,対応したいと存じます。
それではご自愛ください。
安田さん、こんばんは。
現在の OldSlav について気になっている点をまとめました。 なるべく簡潔に書こうとした結果、不躾な物言いになってしまいましたがご容赦下さい。
- OCS の月名の字上符について
出力例を見ると「アクセントが2つある」単語(例えば А̑прíлїа)があります。 OCS の単語の知識は皆無ですが、OCS の字上符の体系が古典ギリシャ語のものに由来することを知っているので、先頭の〈 ̑〉(曲アクセント)は本来は〈 ̓〉(無気記号)であることが容易に推測されます。 そう思ってOldSlavのサンプル出力を見ていると、「無気記号が曲アクセントになっている」単語が結構あります。 私の持っている知識から推測して、底本の書体では無気記号が(基底の文字によって)曲アクセントに近い字形になっていて、それを再現したい為に曲アクセント(
と判断しています。 ただ、私の考えとしては、SlavTeX のフォントはそれとして独立の書体であり、そこでは両記号は明白な区別をもっているので、このような扱いをあまり好ましく思っていません。 そう考える者にとっては、\kamora
)として表記している\today
で「本来の字上符を伴う出力」が実現できないのは不便であると思われます。 - г. について
あと、日付表示について、「『年』を(現代ロシア語のように) г. と略記する」のは典拠があるのでしょうか。 何となく「ドットで省略を表す」のが不自然に思えたので。あまり関係ない話ですが、先日 GUST のサイトを見ていて(読めもしない)ポーランド語のページを何気なく開いたら、周りはラテン文字なのに『年』が г. になっていて驚きました。
- 短い命令語の衝突
「\<
が衝突している」のをバグとみなすならば、\omega
や\a
が衝突するのも問題でしょう。 (短い命令語をグローバルに定義するのは潜在的な衝突の原因になるので私は可能な限り避けています。) あと、ocscommon.def で定義されている\!
も衝突しています。 - Babel の省略記法
Babel の省略記法("
や^
単独でアクセント命令となる)における catcode の扱いには独特の「作法」があり、それを守らないと Babel の省略記法の機構が壊れてしまいます。 複式アクセントギリシャ語がよく他の言語と不整合を起こすのはこの作法を守っていないからです。 (これは「相性問題」ではなくバグの一種だと私は思います。) Babel 版の OldSlav も同じ問題を抱えています。\documentclass{article} \usepackage[oldchurchslavonic,esperanto,english]{babel} \begin{document} \selectlanguage{oldchurchslavonic} \selectlanguage{esperanto} Feli^can novan jaron! \end{document}
基本的に自分で catcode を変更するのは避けて、\initiate@active@char
や\bb,@activate
を使うべきなのですが、Babel なしの場合と共通処理にしたいばあいはそれが無理なので、Babel の省略記法の機構を理解してそれを壊さないような コーディングをする必要がありそうです。 - inputenc との共存
オリジナルフォーマット(fmt)の SlavTeX では 8bit バイトを自前で扱おうとしていますが、これと inputenc の処理は。特に共存を考慮しない限り衝突することになります。\documentclass{jsarticle} \usepackage[utf8]{inputenc} \usepackage[multi]{otf} % utf8 + OTF でハングル出力をしたい;=U+AC00 \DeclareUnicodeCharacter{AC00}{\UTFK{AC00}} \usepackage[oldchurchslavonic,nippon]{babel} \begin{document} 가가가 \end{document}
UTF-8 の inputenc がキリル文字やギリシャ文字しか扱わない場合は(偶然)この問題は露呈しないので、実際にはあまり問題にならないのかも知れません。
細かい観点でチェックしていただき,ありがとうございます。
感謝感激です。
---
「1. OCS の月名の字上符について」の件
ご指摘のとおり,確かに月名中の kamora は間違いです。
kamora は名詞の単複形の明示のためのアクセント記号
のはずで,かつギリシア語と同様に語頭に母音字がくると
付く zvatelco(気息記号)が正しいと思います。
二つの記号はよく似ているのでごっちゃにして
しまっているところが多いかもしれません。
ドキュメントと合わせ,見直して訂正版を出します。
定義を確認したところ,1, 4, 6, 7, 10 月は
訂正が必要ですね。
教会スラヴ語文献での月名はきちんとした学術文献を見いだせないまま実装しております。昔のスラヴの暦法はあまりに特殊ですので,グレゴリオ暦で外来語として入って来た語を採用しています。19 世紀に正教会で使われた写本(*1)を典拠としておりますが,OldSlav で表示される語末 ij の月名の生格形語末が a(U+) であったり ja(U+0469 iotified little yus)であったりする例があり(*2),とりあえず(*1)の写本に従っています。
(*1) http://alebedev.narod.ru/lib/lib22.html
(*2) http://www.halgal.com/churchslavicdmy.html
---
「2. г. について」
典拠がある訳ではありません。ロシア語のマナーをそのまま踏襲してしまっております。"г." なしで教会スラヴ語年表示だけにするか,省略せず года とすべきだったかも知れません。もう少し勉強してからなんらかの訂正をしたいと思います。
---
「3. 短い命令語の衝突」
他の環境の命令をなるたけ潰さないようにするのがもともと設計方針ですので,これはバグだと思っております。lstenc.def 等に入れた命令や,バックアップの仕方などを見直すつもりでおります。ちょっと時間がかかるかも知れません。
---
「4. Babel の省略記法」
これは私が Babel のマナーについて知識が足りないのでそうなっています。どこかで気合いをいれて見直したいと思いますが,さしあたって自分的には優先度が低いです。
---
「5. inputenc との共存」
utf8.def との共存ですね。ハングル,中国語との混在はまったく意識がありませんでした。これは課題とします。
ほかに,現在の OldSlav は utf8.def 利用環境において,フランス語のアクサン・シルカンフレクス月文字やヴェトナム語のダブルアクセント付き文字などで問題が出ます。そのときは unicode パッケージの utf8x.def を使ってみてもらえらばと思います。私は T2D キリル文字,古典ギリシア語にこだわりがある関係で utf8x.def をよく使っています。
---
以上,私のいまの考えを述べさせていただきました。Deep なご指摘で重い課題が多いのですが,命令の重複問題,\today 問題を最優先にしたいと思っています。
またなにかありましたらぜひお知らせください。
他の外国語と混在したときの問題など,ユーザー様からこの場やメールでどしどしご指摘いただけると,作者として望外の喜びです。
それでは,ご自愛ください。
ちょっとこのスレッドの話題からかなり逸脱してしまっておりますけど,ご指摘いただいた OldSlav の問題のうちいくつか対応いたしましたのでお知らせします。もちろん完全にはほど遠いですけど。
【OCS日付様式について】
聖書の例から月名を見直しました。月名称は小文字にし,アクセント・綴りを訂正してあります。"г." は付けないことにしました。(私の参照しうる教会スラヴ語文献での年月表示は,「創世より xxxx,イエス・キリストの肉体の生まれしより yyyy の年,mart の月」云々というものばかりで,簡潔な例が見当たりません)
【短い命令語の衝突】
エンコーディング定義ファイルには教会スラヴ語 OCSxxx 以外のシンボルは削除し,グローバルに変更されてしまうことを回避するようにしました。
\OMEGA は数式で使うのに必須と思われるので,\OMEGAD に名前を変えています。\! など SlavTeX の残骸もあまり必要性がないので外しました。
あらゆる命令の重複を心配してもしようがありませんし短い命令は便利でもあり,マニュアルに書いた命令はだいたい残してあります。教会スラヴ語環境に入った段階で命令を退避して,抜ける時に戻す処理をすることで,他者のマクロをなるたけ壊さないようにしています。
【inputenc との共存】
8 bit を独自に処理しているところを狭めて,ZR さんがあげてくださった韓国語の例は通るようにしました。
もちろん,完全には遠いと思います。どのレベルまで試験するか悩んでいます。個別に見直してゆくしかかないかなと考えています。
このためキリル CP866 8 bit 入力の互換性を犠牲にしています。まあ,これはもはや誰も興味がないと思いますので,今後は inputenc に cp1251 などを指定した場合の対応などに注力したいと思っています。
改訂版をアップしました(ずぼらなのでアーカイブ名は変えてません)。フォントなども訂正していますので,一式入替える必要があります。
それでは。
土村さん、こんにちは。ZRです。
ptex では 「\α
」のようなマクロが定義できてしまいます。これが大問題です。
これなのですが、なぜ「\α
」が特に問題になるのかが解らないでいます。
もし EUC-JP の pTeX 文書 A とそれを UTF-8 に変換した文書 B
があって、「A をアスキーオリジナルの pTeX で組版したものと B を ptexenc
拡張の pTeX で組版したものが完全に一致する」ことを要求するならば、
そもそも JIS X 0208 にあるキリル文字を和文扱いにする以外の選択肢は
最初からないはずです。
ということは、この \α
の話は、「完全な互換性を求めない時に、それでも大きな問題になる事項」
ということでしょうか。
私は、Utf82TeX の(少なくとも作られた当初の)目的は、 「UTF-8 が扱えない pTeX でも、UTF-8 で書いた多言語文書を組版できるようにする」 ことであったと想像しています。 従って Utf82TeX の処理は 「0208 にない文字、あるいは 0208 のギリシャ・キリル文字を LaTeX 標準表記(LICR)ないし ASCII 翻字に変換する」 ことが基本になっています。 実は、OldSlav の(SlavTeX 表記の)UTF-8 対応も、 この方式ではずっと以前に行われていました(Utf82TeX の -s オプション)。 だから、今回の拡張は 「欧文 LaTeX (と upLaTeX)ではフィルタなしで動かせるようにする」 ことが目的だったのでしょう。
これに対して、私の PXfltsrc は「ptexenc 拡張の pTeX」があることを前提にして、 文書を「-kanji=utf8 指定と utf8(utf8x) 入力エンコーディング」で扱える状態にもっていく (その後のことは LaTeX で処理する)ことを目的としています。 従って、
\usepackage[ucyrl,ugrek]{pxfltsrc} % ギリシャ・キリル文字を欧文扱い
が行うのは ^^ab
形式への変換です。
あと、PXfltsrc はフィルタを \write18
で呼び出します。
このことのメリットの 1 つとして
どの変換を有効にするかを LaTeX 文書内で指定できることがあると思います。
しかし、PXfltsrc で使っているスクリプト pxfltsrc.pl は通常の意味での
フィルタプログラムとしても使うことができるので、
もし常時有効にしたい設定がある場合は、
PTEX_IN_FILTER
で使うこともできるはずです。
#(ギリシャ・キリル文字は常に欧文扱いにしたい、入力文字コードは自動判別) PTEX_IN_FILTER=perl -S pxfltsrc.pl +ucyrl,ugrek,inauto
ところで、PTEX_IN_FILTER
で指定するフィルタプログラムの出力の
文字コードは jis(ISO-2022-JP)にしておけばよいのでしょうか。
> これなのですが、なぜ「
\α
」が特に問題になるのかが解らないでいます。 もし EUC-JP の pTeX 文書 A とそれを UTF-8 に変換した文書 B があって、「A をアスキーオリジナルの pTeX で組版したものと B を ptexenc 拡張の pTeX で組版したものが完全に一致する」ことを要求するならば、 そもそも JIS X 0208 にあるキリル文字を和文扱いにする以外の選択肢は 最初からないはずです。確かに、互換性に関してシビアな TeX の世界では、2バイト文字はすべて和文扱いにするしかありませんね、マクロがどうこうという以前に。すっかりこのことが頭から抜けていました。
しかしながら、キリル文字やいくつかの記号は和文扱いにしないで欲しい、というリクエストを何度もいただきましたし、今でも「ptexenc はこれだからだめ」のような指摘をされています。
#もちろん、この要望に従えば、今度は「互換性がない」と叩かれるのでしょう。
こんな無茶な要望があるのは、キリル文字なんかを和文扱いにしないでおけば、platex+ptexenc と latex の動作が近くなるからだという気がします。EUC/SJIS と UTF-8 で、組み版結果は若干変化するものの、コンパイルぐらいはできる、と皆さんが思っているからでしょう。
私がなぜマクロ名のことを大きく取り上げているかといえば、これがコンパイルがエラーで止まってしまう大きな問題であるからです。「latex との互換性を重視して pTeX の互換性を犠牲にしましょう」という選択肢が成り立たないことを理解してもらいたいからです。
> ところで、
PTEX_IN_FILTER
で指定するフィルタプログラムの出力の 文字コードは jis(ISO-2022-JP)にしておけばよいのでしょうか。JIS で構いません。そして JIS で表現できない UTF-8 文字は ^^ にエンコードしてもらえたら完璧です。ptexlive では入出力を UTF-8 に揃えていますので、フィルタ出力も UTF-8 でよいのですが(そして ^^ エンコードが不要なのですが)、ptetex3 では ptex が SJIS や EUC を受け取る可能性もありますので、フィルタ出力は JIS にしていただくのが一番安全です。