名前: 永遠の初心者 日時: 2006-07-19 09:11:16 IPアドレス: 218.228.138.*
TeXの口と胃の区別が付かない、永遠の初心者です。 XeTeXで漢文をタイプセットしようとしています。 一からマクロを書く実力はないので、keyvalを使って、楽をすることにしました。 \RequirePackage{keyval} \define@key{kunten}{f}[]{\@namedef{furig@n@}{#1}}\setkeys{kunten}{f=\relax} \define@key{kunten}{o}[]{\@namedef{okurig@n@}{#1}}\setkeys{kunten}{o=\relax} \define@key{kunten}{s}[]{\@namedef{s@idoku}{#1}}\setkeys{kunten}{s=\relax} \newif\ifk@rig@ne\k@rig@nefalse \newcount\depth@k@eriten\depth@k@eriten=0 \newcount\ordin@l@k@eriten\ordin@l@k@eriten=0 \define@key{kunten}{k}[]{\@namedef{k@rig@ne}{#1}}\setkeys{kunten}{k=false} \define@key{kunten}{d}[]{\depth@k@eriten=#1}\setkeys{kunten}{d=0} \define@key{kunten}{n}[]{\ordin@l@k@eriten=#1}\setkeys{kunten}{n=0} \def\k@nbun#1[#2]{{\setkeys{kunten}{#2}\csname k@rig@ne\k@rig@ne\endcsname% \leavevmode%%ここに訓点の処理ルーティンを書く。 }} とでもしておいて、漢字コードをアクティブにします。 %% CJK Unified Ideographs Extension A \@tempcnta "3400\relax \loop\catcode\@tempcnta \active \ifnum\@tempcnta < "4DB5\relax \advance\@tempcnta \@ne \repeat %% CJK Unified Ideographs \@tempcnta "4E00\relax \loop\catcode\@tempcnta \active \ifnum\@tempcnta < "9FA5\relax \advance\@tempcnta \@ne \repeat %% CJK Compatibility Ideographs \@tempcnta "F900\relax \loop\catcode\@tempcnta \active \ifnum\@tempcnta < "FA2D\relax \advance\@tempcnta \@ne \repeat %% CJK Unified Ideographs Extension B \@tempcnta "D840\relax \loop\catcode\@tempcnta \active \ifnum\@tempcnta < "D869\relax \advance\@tempcnta \@ne \repeat %% CJK Compatibility Ideographs Supplement \catcode"D87E \active さて、問題はこのようにして、アクティブにした文字をどのように定義するかです。 \def^^^^4e00{\@ifnextchar[{\k@nbun{^^^^4e00}}{\char"4e00}} もしくはUTF8で \def一{\@ifnextchar[{\k@nbun{一}}{\char`一}} と言った行を数万行ひたすら繰り返すのはファイルサイズを考えても、 あまり賢明には思えません。何か良い工夫はないでしょうか? TeXnicianの方々の御知恵を拝借致したく存じます。
この書き込みへの返事: