TeX 漢文入力支援マクロについて このマクロは、Texにおける漢文入力を支援するものです。 TeXにおいて漢文を入力する為に、数種類のマクロが存在しますが、 このマクロは、    藤田眞作氏の『続LaTeX2e階梯・縦組編』星雲社 に収録された漢文入力マクロを併用します。このマクロは、氏のホームページである http://www.chem.kit.ac.jp/fujita/fujitas/fujita.html にも収録されていますが、利用には上書の購入をお勧めします。特にTeXを利用する縦書き関係の書式作成には、必須ともいえるものと思います。 氏の漢文スタイルは、 \kanbun[]{}{}{}{}[]<>() というタグを使用し、それぞれ \kanbun[@制御]{A親文字}{Bルビ}{C送り仮名}{D返り点}[E肩返り点](G句読点) を意味しますが、@EGについては、現在は未対応です。(今後対応します)。 何もない行でマクロを実行すると \kanbun[]{}{}{}{}[]<>() というタグを入力して終了します。 「人なり」と打ち込んで、このマクロを実行すると \kundoku{人}{}{ナリ}{}[]<>() と、最初の一字を親父とみなし、あとの「なり」はカタカナに自動変換します。ここが、このマクロの最大の特徴で、これにより漢文入力が飛躍的に速くなるのです。 この状態でマクロを実行すると \kundoku{人}{}{ナリ}{}[]<>() 読みかな 送りかな 役物 左送りかな  という選択メニューが出ますので、以下メニューを階層化して行けば、いいのです。 つまり、何も字のない場所だと空のタグを入力し、タグ上であれば、タグに内容が追加できるわけです。 ご意見、ご希望は、    masaaki.hikita@nifty.ne.jp YHX02241 または、FWINALのエディターの会議室にてお受けします。 この、マクロの転載等は、事前に御一報ください。 以下は、対応するkanbun.styです。 *****以下切り取って****************** % kanbun.sty by Shinsaku Fujita 1998/08/19 % Copyright (C) 1998 by Shinsaku Fujita, All rights reserved. % % 漢文の返り点などの組み方をサポートするマクロ集です。 % % 作成者: 藤田眞作 % 京都工芸繊維大学工芸学部物質工学科 % fujitas@chem.kit.ac.jp % % 藤田眞作著「続LaTeX2e階梯(縦組み編)」所載 % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\j@urnalname{kanbun} \def\versi@ndate{August 19, 1998} \def\versi@nno{ver1.00} \def\copyrighth@lder{SF} % Shinsaku Fujita %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \typeout{Option Style `\j@urnalname' (\versi@nno) <\versi@ndate>\space [\copyrighth@lder]} % ******** % * 警告 * % ******** % ルビ活字は、本文活字の1/2のものを用いるのが原則です。 % 原則をはずれる場合もなんとか対処できるようにしてありますが、 % 最初に警告を出しておきます。 % \setbox0=\hbox{漢} \setbox1=\hbox{\tiny あ} \dimen0=\wd0 \divide\dimen0 by2\relax \dimen1=\dimen0 \advance\dimen0 by.01zw \advance\dimen1 by-.01zw \ifdim\wd1<\dimen1\relax \typeout{ルビの活字が小さすぎます。}\fi \ifdim\wd1>\dimen0\relax \typeout{ルビの活字が大きすぎます。}\fi % % 返り点の定義 % % \reten レ (あまりうまくない) % 片かなのレを使うこと % % \ichreten 一 % レ % % \uereten 上 % レ % \def\reten{ \kern-1zw%全角スペース \lower.3zw\hbox{\vbox{% \hbox{\vbox to0.88zw{\vss\hbox to0.6zw{\hss$\backslash$\kern-.2zw}}}% \hrule height.01zw depth0.06zw}} \kern-1zw %全角スペース } \def\ichireten{ \kern-1zw%全角スペース \hbox{\hbox{一}\kern-.68zw\hbox{レ}} \kern-1zw%  %全角スペース } \def\uereten{ \kern-1zw%全角スペース \hbox{\hbox{上}\kern-.25zw\hbox{レ}} \kern-1zw%  %全角スペース } % % 親文字と振りがなとの間隔 % 標準は0pt。さらに開けたい場合は、プルアンブルで変更。 % \newdimen\kanbunaki \kanbunaki=0pt % % % 句読点の詰め組み % \def\kutoten#1#2{\kern-#1\hbox{#2}\kern#1} % % 音合符 % \def\ongofu#1#2{\leavevmode\vbox{\hbox{% \smash{\raise.1zw\hbox{#2}}}% \nointerlineskip \hbox{#1}}} \def\ongofuno{\ongofu{ }{ー}}%全角空白 \def\ongofuni{\ongofu{ニ}{ー}} \def\ongofuge{\ongofu{下}{ー}} % % 訓合符 % \def\kungofu#1#2{\leavevmode\vbox{\hbox{% \smash{\lower1zw\hbox{#2}}}% \nointerlineskip \hbox{\raise.2zw\hbox{#1}}}} \def\kungofuno{\kungofu{ }{ー}}%全角空白 \def\kungofuni{\kungofu{ニ}{ー}} \def\kungofuge{\kungofu{下}{ー}} % % 書式: % \kundoku[制御]{親文字}{ルビ}{送りがな}{返り点}[肩返り点](句読点) % \newif\if@nagairuby \@nagairubyfalse \def\kundoku{\@ifnextchar[%] {\@kundoku}{\@kundoku[1]}} \def\@kundoku[#1]#2#3#4#5{\@ifnextchar[%] {\@k@ndoku[#1]{#2}{#3}{#4}{#5}}{\@k@ndoku[#1]{#2}{#3}{#4}{#5}[]}} \def\@k@ndoku[#1]#2#3#4#5[#6]{\@ifnextchar<%> {\@k@nd@ku[#1]{#2}{#3}{#4}{#5}[#6]}{\@k@nd@ku[#1]{#2}{#3}{#4}{#5}[#6]<>}} \def\@k@nd@ku[#1]#2#3#4#5[#6]<#7>{\@ifnextchar(%) {\@k@nd@ku@[#1]{#2}{#3}{#4}{#5}[#6]<#7>}% {\@k@nd@ku@[#1]{#2}{#3}{#4}{#5}[#6]<#7>()}} % % 主処理命令 % % 書式: % \@k@nd@ku@[制御]{親文字}{ルビ}{送りがな}{返り点}% % [肩返り点]<左送りがな>(句読点) % \def\@k@nd@ku@[#1]#2#3#4#5[#6]<#7>(#8){% \leavevmode \ifhmode\edef\@x@sf{\the\spacefactor}\fi  \kern-1zw%全角スペース \hbox{\kanjiskip=0zw plus0.01zw minus0.01zw \def\temptopleft{#6}%左上の返り点(レ点のみ) \def\tempbottomleft{#5}%返り点 \def\tempkundoku{レ}% \@nagairubyfalse \setbox0=\hbox{\tiny #3}\dimen0=\wd0 \setbox1=\hbox{\tiny #4}\dimen1=\wd1 \ifdim\dimen0<.2zw\relax%ルビがほとんど空のとき \ifdim\wd1<.2zw%送りがながほとんど空のとき \dimen1=1zw \else%送りがなあり \advance\dimen1 by 0.5zw \fi \else \ifdim\dimen0<.6zw\relax%ルビが一文字のとき \ifdim\wd1<.2zw%送りかながほとんど空のとき \dimen1=1zw \else%送りがなあり \advance\dimen1 by\dimen0 \fi \else%ルビが二文字以上 \@nagairubytrue \advance\dimen1 by\dimen0 \fi \fi \setbox2=\hbox{\tiny #5}\dimen2=\wd2 \advance\dimen2 by1zw \setbox3=\hbox{\tiny #7}\dimen3=\wd3 \advance\dimen3 by.5zw \ifdim\dimen1>\dimen2 %文字幅をルビ+送りかなの長さにあわせる \@@kundoku{#1}{#2}{#3}{#4}{#5}{#6}{\dimen1}{#7}{#8}% \else%文字幅を親文字+返り点の長さにあわせる \@@kundoku{#1}{#2}{#3}{#4}{#5}{#6}{\dimen2}{#7}{#8}% \fi}% \ifhmode\spacefactor\@x@sf\fi% \kern-1zw %全角スペース \def\tempdelim{#8}%区切り記号の処理 \ifx\tempdelim\empty\else\hskip.5zw \spacefactor=3000\relax\fi} % % 内部処理命令 % % 書式 % \@@kundoku{制御}{親文字}{ルビ}{送りがな}{返り点}{肩返り点}{正味幅}{句読点} % \def\@@kundoku#1#2#3#4#5#6#7#8#9{% \leavevmode \def\hidarikana{#8}% \def\tempdelim{#9}% \setbox5=\hbox to#7{%箱5の中で組み立てる \vbox{% % ルビと送りがなの処理 \if@nagairuby \hbox to\dimen1{\hbox{\tiny #3}\hbox{\tiny #4}\hss}% \else \hbox to\dimen1{\hbox to.5zw{\hss\tiny #3\hss}\hbox{\tiny #4}\hss}% \fi % 区切り記号の処理 \nointerlineskip \kern\kanbunaki \ifx\tempdelim\empty\else \smash{\hbox to1zw{\hss\lower.5zw\hbox to0zw{\tate#9\hss}}}% \fi % 左送りがなの処理(かなり無理な処理) \nointerlineskip \dimen4=1.2zw \advance\dimen4 by\kanbunaki \ifx\hidarikana\empty\else \smash{% \hbox{\lower\dimen4\hbox to\dimen3{\kern.5zw\hbox{\tiny #8\hss}\hss}}}% \fi % 親文字と返り点の処理 \nointerlineskip \ifx\tempbottomleft\tempkundoku\relax \ifx\temptopleft\empty \ifcase#1\relax% オプション[0]のとき \hbox to1.5zw{\hbox to1zw{\hss#2\hss}\hss\lower.25zw\hbox{\tiny #5}}% \or%オプション[1}のとき(標準) \hbox to#7{\hbox to1zw{\hss#2\hss}\hss\lower.25zw\hbox{\tiny #5}}% \fi \else%左肩ツキのレ点 \hbox to#7{\lower.25zw\hbox to0zw{\hss\tiny#6}% \hbox to1zw{\hss#2\hss}\hss \lower.25zw\hbox{\tiny#5}}% \fi \else \ifx\temptopleft\empty \hbox to\dimen2{\hbox to1zw{\hss#2\hss}\lower.25zw\hbox{\tiny #5}\hss}% \else \hbox to\dimen2{\lower.25zw\hbox to0zw{\hss\tiny#6}\hbox to1zw{#2}% \lower.25zw\hbox{\tiny#5}\hss}% \fi\fi }}%箱5の作成終わり %箱5の長さ調整。左肩ツキのレ点の分を追加 \ifx\hidarikana\empty\else\dp5=.75zw\fi \ifx\temptopleft\empty\box5\relax\else\hbox{\kern.5zw\box5}\fi} % % 振り漢字(肩ツキ) % \furikanjikt{本文}{右振り漢字}{左振り漢字} % \let\furikanjikatuji=\scriptsize \def\furikanjikt#1#2#3{% \leavevmode %振り漢字の大きさの設定 \def\@furikanjikatuji{\furikanjikatuji}% %文字列の長さを比べる \setbox1=\hbox{#1}\dimen0=\wd1\dimen4=\ht0% \setbox2=\hbox{\@furikanjikatuji #2}% \ifdim\dimen0>\wd2\relax\else\dimen0=\wd2\fi \def\migifuri{#2}% \setbox3=\hbox{\@furikanjikatuji #3}% \def\hidarifuri{#3}% %最長文字列の寸法 \ifdim\dimen0>\wd3\relax\else\dimen0=\wd3\fi %深さの寸法 \ifdim\dimen4<\ht3\relax\else\dimen4=\ht3\fi %内容をbox5の中で組み立てる。 \setbox5=\vbox{% \ifx\migifuri\empty\else \hbox to\dimen0{\raise.3zw\hbox{\@furikanjikatuji #2}\hss}% \kern\kanbunaki \kern.1zw \fi \nointerlineskip \ifx\hidarifuri\empty\else \smash{% \dimen5=\dimen4 \advance\dimen5 by1.15zw \advance\dimen5 by\kanbunaki \hbox{\lower\dimen5\hbox to\dimen0{% \hbox{\@furikanjikatuji #3}\hss}}}% \fi \nointerlineskip \hbox to\dimen0{#1\hss}}%box5の終わり %box5の深さを追加 \ifx\hidarifuri\empty\else \dimen6=\dp5 \advance\dimen6 by\dimen4 \advance\dimen6 by\kanbunaki \advance\dimen6 by.45zw \dp5=\dimen6\fi \kern-1zw%全角スペース \box5\kern-1zw %全角スペース } % % 振り漢字 % 親文字に比べて、振り漢字が短いときのみ中ツキ % 長いときは肩ツキ % \furikanji{親文字}{右振り漢字}{左振り漢字} % \newif\if@nagaimigiruby \@nagaimigirubyfalse \newif\if@nagaihidariruby \@nagaihidarirubyfalse \let\furikanjikatuji=\scriptsize \def\furikanji#1#2#3{% \leavevmode \@nagaimigirubyfalse\@nagaihidarirubyfalse %振り漢字の大きさの設定 \def\@furikanjikatuji{\furikanjikatuji}% %文字列の長さを比べる \setbox1=\hbox{#1}% \dimen0=\wd1\dimen7=\wd1\dimen4=\ht0% \setbox2=\hbox{\@furikanjikatuji #2}% \ifdim\dimen0>\wd2\relax \else\@nagaimigirubytrue\dimen0=\wd2\fi \def\migifuri{#2}% \setbox3=\hbox{\@furikanjikatuji #3}% \def\hidarifuri{#3}% %最長文字列の寸法 \ifdim\dimen0>\wd3\relax\else\dimen0=\wd3\fi \ifdim\wd1>\wd3\relax\else\@nagaihidarirubytrue\fi %深さの寸法 \ifdim\dimen4<\ht3\relax\else\dimen4=\ht3\fi %内容をbox5の中で組み立てる。 \setbox5=\vbox{% %右振り漢字 \ifx\migifuri\empty\else \if@nagaimigiruby \hbox to\dimen0{\raise.3zw\hbox{\@furikanjikatuji #2}\hss}% \else \hbox to\dimen0{% \hbox{\raise.2zw\hbox to\dimen7{\hss \kanjiskip=0pt plus1fil minus1fill \@furikanjikatuji #2\hss}}% \hss}% \fi\kern\kanbunaki\kern.1zw\fi %左振り漢字 \nointerlineskip \ifx\hidarifuri\empty\else \if@nagaihidariruby \smash{% \dimen5=\dimen4 \advance\dimen5 by1.15zw \advance\dimen5 by\kanbunaki \hbox{\lower\dimen5\hbox to\dimen0{% \hbox{\@furikanjikatuji #3}\hss}}}% \else \smash{% \dimen5=\dimen4 \advance\dimen5 by1.15zw \advance\dimen5 by\kanbunaki \hbox{% \lower\dimen5\hbox to\dimen0{% \hbox to\dimen7{\hss \kanjiskip=0pt plus1fil minus1fill \@furikanjikatuji #3\hss}% \hss}% }}% \fi\fi \nointerlineskip \hbox to\dimen0{#1\hss}}%box5の終わり %box5の深さを追加 \ifx\hidarifuri\empty\else \dimen6=\dp5 \advance\dimen6 by\dimen4 \advance\dimen6 by.45zw \advance\dimen6 by\kanbunaki \dp5=\dimen6\fi \kern-1zw%全角スペース \hbox{\box5}\kern-1zw %全角スペース } % % 振り漢字 % 親文字に比べて、振り漢字が短いときのみ中ツキ % 振り漢字の文字の大きさを\tinyとする。 % 長いときは肩ツキ % \FuriKanji{親文字}{右振り漢字}{左振り漢字} % \def\FuriKanjikt#1#2#3{% {\let\furikanjikatuji=\tiny \furikanjikt{#1}{#2}{#3}}} % % 多行割 % 文字の大きさ\scriptsize(可変) % \tagyobox{項目1 \\ 項目2 \\ ...} % \def\tagyostretch{1.0} \def\tagyobox#1{% \begingroup \kern-1zw%全角空白 \tabcolsep=0pt \furikanjikatuji%標準は\scriptsize \def\arraystretch{\tagyostretch}% \begin{tabular}{l}#1 \end{tabular}\kern-1zw %全角空白 \endgroup} % % 複多行割 % 文字の大きさ\tiny % \fukutagyobox{項目1 \\ 項目2 \\ ...} % \def\fukutagyobox#1{% \begingroup\let\furikanjikatuji=\tiny \tagyobox{#1}\endgroup} % % 多行割環境 % 文字の大きさ\scriptsize(可変) % \begin{tagyo} 項目1 \\ 項目2 \\ ... \end{tagyo} % \newenvironment{tagyo}% {\begingroup \kern-1zw%全角空白 \tabcolsep=0pt \furikanjikatuji%標準は\scriptsize \def\arraystretch{\tagyostretch}% \begin{tabular}{l}} {\end{tabular}\kern-1zw %全角空白 \endgroup} % % 複多行割環境 % 文字の大きさ\tiny % \begin{fukutagyo} 項目1 \\ 項目2 \\ ... \end{fukutagyo} % \newenvironment{fukutagyo}% {\begingroup \kern-1zw%全角空白 \tabcolsep=0pt\tiny \def\arraystretch{\tagyostretch}% \begin{tabular}{l}} {\end{tabular}\kern-1zw %全角空白 \endgroup} \endinput