% tatesuji.sty 
% by Shinsaku Fujita 
% Copyright (C) S. Fujita (1999, 2009). All rights reserved. 
% Version 1.00 1999/12/17
% Version 1.00a 2009/10/01 Bug Fix
% Version 1.00b 2009/10/04 Bug Fix
%
%  作成者: 藤田眞作
%          fujitas@chem.kit.ac.jp
%
%   藤田眞作著「入門・縦横文書術」所載
%
%\typeout{Option Style `tatesuji.sty' by S. Fujita}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\def\j@urnalname{tatesuji}
%\def\versi@ndate{December 17, 1999}
%\def\versi@nno{ver1.00}
%\def\copyrighth@lder{SF} % Shinsaku Fujita
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\j@urnalname{tatesuji}
\def\versi@ndate{October 4, 2009}
\def\versi@nno{ver1.00b}
\def\copyrighth@lder{SF} % Shinsaku Fujita
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\typeout{Option Style `\j@urnalname' (\versi@nno) <\versi@ndate>\space 
[\copyrighth@lder]}
\typeout{藤田眞作著「入門・縦横文書術」所載}
%
% pLaTeXe vs LaTeX
%
\@ifundefined{tbaselineshift}
{\tbaselineshift=0pt}{}
%
% \kanjiが廃止されているので，あらたに作成
% 2009/10/04 by S. Fujita
%
\newcount\TEMPcntA
\def\kanji{\afterassignment\@@kanji\TEMPcntA=}
\def\@@kanji{\iftdir\expandafter\kansuji\the\TEMPcntA
\else \the\TEMPcntA\fi}
%
%四桁の数字を単位語付の和数字に直す。
% 1998 ---> 千九百九十八
%ただし、\ketaspectrueのときは、
% 1998 ---> 一千九百九十八
%横組のときは、アラビア数字をそのまま出力
% by Shinsaku Fujita 1999/12/5
% Bug fix 2009/10/1 \ifcase#2 \ifmukozero... 空白を入れる S. Fujita
% Bug fix 2009/10/4 アルゴリズム変更 \ifallzero, \ifjoizero S. Fujita
%
\newif\ifallzero \allzerofalse
\newif\ifjoizero \joizerofalse
\newif\ifmukozero \mukozerofalse
\def\yonketa#1#2#3#4\@nil{%
\allzerofalse
\TEMPcntA=#1 
\advance\TEMPcntA by#2 \advance\TEMPcntA by#3 \advance\TEMPcntA by#4
\ifnum\TEMPcntA=0\relax \global\allzerotrue \else \global\allzerofalse\fi
\iftdir%縦組
\ifcase#1\relax\or\ifketaspec 一千\else 千\fi\else\kanji#1 千\fi
\ifcase#2\relax\or 百\else\kanji#2 百\fi
\ifcase#3\relax\or 十\else\kanji#3 十\fi
\ifcase#4\relax\else\kanji#4\fi
\else%横組
\joizerofalse\global\mukozerofalse
\ifcase#1 \joizerotrue \else#1\joizerofalse\fi
\ifcase#2 \ifjoizero \joizerotrue \else#2\joizerofalse\fi
\else#2\joizerofalse\fi
\ifcase#3 \ifjoizero \joizerotrue \else#3\joizerofalse\fi
\else#3\joizerofalse\fi
\ifcase#4 \ifjoizero \joizerotrue \else#4\joizerofalse\fi
\else #4\joizerofalse\fi
\fi
}
%
%四桁の数字を単位語付の領収書用数字に直す。
% 1998 ---> 壱千九百九拾八
%ただし、\ketaspectrueのときも同じ
%横組のときは、アラビア数字をそのまま出力
% by Shinsaku Fujita 1999/12/5
% Bug fix 2009/10/1 \ifcase#2 \ifmukozero... 空白を入れる S. Fujita
% Bug fix 2009/10/4 アルゴリズム変更 \ifallzero, \ifjoizero S. Fujita
%
%\def\ryoshuyon#1#2#3#4/{\iftdir%縦組
\def\ryoshuyon#1#2#3#4\@nil{%
\allzerofalse
\TEMPcntA=#1 
\advance\TEMPcntA by#2 \advance\TEMPcntA by#3 \advance\TEMPcntA by#4
\ifnum\TEMPcntA=0\relax \global\allzerotrue \else \global\allzerofalse\fi
\iftdir%縦組
\ifcase#1\relax
\or 壱千\or 弐千\or 参千\else\kanji#1 千\fi
\ifcase#2\relax
\or 壱百\or 弐百\or 参百\else\kanji#2 百\fi
\ifcase#3\relax
\or 壱拾\or 弐拾\or 参拾\else\kanji#3 拾\fi
\ifcase#4\relax
\or 壱\or 弐\or 参\else\kanji#4\fi
\else%横組
\joizerofalse\global\mukozerofalse
\ifcase#1 \joizerotrue \else#1\joizerofalse\fi
\ifcase#2 \ifjoizero \joizerotrue \else#2\joizerofalse\fi
\else#2\joizerofalse\fi
\ifcase#3 \ifjoizero \joizerotrue \else#3\joizerofalse\fi
\else#3\joizerofalse\fi
\ifcase#4 \ifjoizero \joizerotrue \else#4\joizerofalse\fi
\else #4\joizerofalse\fi
\fi
}
%
%四桁の数字を和数字に直す。
% 1998 ---> 一九九八
%横組のときは、アラビア数字をそのまま出力
% by Shinsaku Fujita 1999/12/5
%
\let\susihenkan=\kanji%置き換えておく
%\def\y@nketa#1#2#3#4/{%
\def\y@nketa#1#2#3#4\@nil{%
\ifcase#1 \ifmukozero\else\relax\susihenkan#1\fi
\else\susihenkan#1\global\mukozerofalse\fi
\ifcase#2 \ifmukozero\else\relax\susihenkan#2\fi
\else\susihenkan#2\global\mukozerofalse\fi
\ifcase#3 \ifmukozero\else\relax\susihenkan#3\fi
\else\susihenkan#3\global\mukozerofalse\global\mukozerofalse\fi
\susihenkan#4\global\mukozerofalse}
%
%三桁の数字を和数字に直す。
% 998 ---> 九九八
%横組のときは、アラビア数字をそのまま出力
% by Shinsaku Fujita 1999/12/5
%
%\def\s@nketa#1#2#3/{%
\def\s@nketa#1#2#3\@nil{%
\ifcase#1 \ifmukozero\else\relax\susihenkan#1\fi%\relaxがないとだめ????
\else\susihenkan#1\global\mukozerofalse\fi
\ifcase#2 \ifmukozero\else\relax\susihenkan#2\fi
\else\susihenkan#2\global\mukozerofalse\fi
\susihenkan#3\global\mukozerofalse}
%
%単位語と位取りの点
% by Shinsaku Fujita 1999/12/5
%
\def\temptanni{　\kern-1zw{%
\hbox to1zw{\hss\footnotesize\rensuji{禾\kern-.4zw 予}\hss}}\kern-1zw　}
%
\def\@tanni#1{\ifcase#1 \or 万\or 億\or 兆\or 京\or 垓\or
\temptanni\or%%%%禾予
穣\or 溝\or 澗\or 正\or 載\or 極\fi}
\def\t@nni#1{\ifcase#1\else\iftdir\hbox to0.5zw{、\hss}\else
\hbox{,}\fi\fi}
\def\t@@nni#1{\ifcase#1\else\hbox{,}\fi}
%
%カウンターとスイッチ
% by Shinsaku Fujita 1999/12/5
%
\newcount\@tempcntc
\newcount\ketasuu
\newif\ifketaspec \ketaspecfalse
%
% \tatesuji命令
% [0] 十五、単位語付
% [1] 一五、単位語付
% [2] 一五、単位語付、ただし、一千万、一千億など一をいれる
% [3] 三桁区切り
% [4] 四桁区切り
% [5] 領収書
% [6] 縦組でも三桁区切りのアラビア数字
% [8] 縦組でも四桁区切りのアラビア数字
% by Shinsaku Fujita 1999/12/5
% Bug fix 2009/10/4 アルゴリズム変更 \ifallzeroにより
%          0000のときに単位語を削除する．S. Fujita
%
\def\tatesuji{\@ifnextchar[{\t@tesuji}{\t@tesuji[0]}}
\def\t@tesuji[#1]#2{\ifcase#1\relax
\ketasuu=4 \let\@susi=\yonketa \let\tanni=\@tanni 
\or \ketasuu=4 \let\@susi=\y@nketa \let\tanni=\@tanni
\or \ketaspectrue \ketasuu=4 \let\@susi=\yonketa \let\tanni=\@tanni
\or \ketasuu=3 \let\@susi=\s@nketa \let\tanni=\t@nni
\or \ketasuu=4 \let\@susi=\y@nketa \let\tanni=\t@nni
\or \ketasuu=4 \let\@susi=\ryoshuyon \let\tanni=\@tanni
\or \ketasuu=3 \let\susihenkan=\relax
\let\@susi=\s@nketa \let\tanni=\t@@nni
\or%%%
\or \ketasuu=4 \let\susihenkan=\relax
\let\@susi=\y@nketa \let\tanni=\t@@nni
\else \ketasuu=4 \let\@susi=\y@nketa \let\tanni=\t@nni\fi
\@tempcnta=0\relax\def\commadel{,}%
\@tfor\member:=#2\do{\ifx\member\commadel\else
\global\advance\@tempcnta by1\fi}%
\@tempcntb=\@tempcnta
\divide\@tempcnta by\ketasuu
\@tempcntc=\@tempcnta
\multiply\@tempcnta by\ketasuu
\advance\@tempcntb -\@tempcnta
\@tempcnta=0
\ifnum\ketasuu=4\relax
\ifcase\@tempcntb\relax
\@tempcnta=0 \edef\tempbbb{}\advance\@tempcntc by-1\relax
\global\mukozerofalse
\or\@tempcnta=3 \edef\tempbbb{000}\global\mukozerotrue
\or\@tempcnta=2 \edef\tempbbb{00}\global\mukozerotrue
\or\@tempcnta=1 \edef\tempbbb{0}\global\mukozerotrue\fi
\else\ifcase\@tempcntb\relax
\@tempcnta=0 \edef\tempbbb{}\advance\@tempcntc by-1\relax
\global\mukozerofalse
\or\@tempcnta=2 \edef\tempbbb{00}\global\mukozerotrue
\or\@tempcnta=1 \edef\tempbbb{0}\global\mukozerotrue\fi\fi
%\@tfor\member:=#2\do{%
\expandafter\@tfor\expandafter\member\expandafter:%
\expandafter=#2\do{%
\ifx\member\commadel\else
\advance\@tempcnta by1\relax
\ifnum\@tempcnta<\ketasuu
\edef\tempbbb{\tempbbb\member}%
\else\ifnum\@tempcnta=\ketasuu\relax
\edef\tempbbb{\tempbbb\member}%
\expandafter\@susi\tempbbb\@nil\relax
\ifallzero\else\tanni{\@tempcntc}\fi%2009/10/4 by S. Fujita
\advance\@tempcntc by-1\relax
\edef\tempbbb{}%
\@tempcnta=0\relax
\fi\fi\fi}}
%
% \Tatesuji命令
%  \tatesuji命令をカウンター出力命令としたもの
%  オプション引数の機能は同じ
%
\def\Tatesuji{\@ifnextchar[{\T@tesuji}{\T@tesuji[0]}}
\def\T@tesuji[#1]#2{%
\edef\tempaaa{\the\csname c@#2\endcsname}%
\expandafter\t@tesuji\expandafter[\expandafter#1%
\expandafter]\expandafter{\tempaaa}}
%%
%%  \@@tatesuji
%%  \tatesuji命令をページカウンター出力命令とした内部命令
%%  オプション引数はとらない
%%  不調につきコメントアウト
%% 
%\newcount\@tempcntd
%\def\@@tatesuji#1\@nil{%
%\ketasuu=4 \let\@susi=\yonketa \let\tanni=\@tanni
%\@tempcntd=#1 \edef\tempkkk{\the\@tempcntd}%
%\@tempcnta=0\relax
%\expandafter\@tfor\expandafter\member\expandafter:%
%\expandafter=\tempkkk\do{\global\advance\@tempcnta by1\relax}%
%\@tempcntb=\@tempcnta
%\divide\@tempcnta by\ketasuu
%\@tempcntc=\@tempcnta
%\multiply\@tempcnta by\ketasuu
%\advance\@tempcntb -\@tempcnta
%\@tempcnta=0
%\ifnum\ketasuu=4\relax
%\ifcase\@tempcntb
%\@tempcnta=0\edef\tempbbb{}\advance\@tempcntc by-1\relax
%\mukozerofalse
%\or\@tempcnta=3\edef\tempbbb{000}\mukozerotrue
%\or\@tempcnta=2\edef\tempbbb{00}\mukozerotrue
%\or\@tempcnta=1\edef\tempbbb{0}\mukozerotrue\fi
%\else\ifcase\@tempcntb
%\@tempcnta=0\edef\tempbbb{}\advance\@tempcntc by-1\relax
%\mukozerofalse
%\or\@tempcnta=2\edef\tempbbb{00}\mukozerotrue
%\or\@tempcnta=1\edef\tempbbb{0}\mukozerotrue\fi\fi
%\expandafter\@tfor\expandafter\member\expandafter:%
%\expandafter=\tempkkk\do{%
%\advance\@tempcnta by1\relax
%\ifnum\@tempcnta<\ketasuu
%\edef\tempbbb{\tempbbb\member}%
%\else\ifnum\@tempcnta=\ketasuu\relax
%\edef\tempbbb{\tempbbb\member}%
%%\expandafter\@susi\tempbbb/\relax
%\expandafter\@susi\tempbbb\@nil\relax
%\tanni{\@tempcntc}\advance\@tempcntc by-1\relax
%\edef\tempbbb{}%
%\@tempcnta=0\relax\fi\fi}}
%%
%% \@Tatesuji命令
%%  \tatesuji命令をページカウンター出力命令としたもの
%%  オプション引数はとらない
%%  不調につきコメントアウト
%%
%\def\@Tatesuji#1{\@@tatesuji#1\@nil}
%
%西暦縦横変換 by S. Fujita 1999/12/5
% \seireki1999/11/2/--->一九九九年一一月二日
%
\def\seireki#1/#2/#3/{%
\kanji#1年\kanji#2月\kanji#3日}
%
%西暦縦横変換 by S. Fujita 1999/12/5
% \SeiReki1999/11/2/--->一九九九年十一月二日
%
\def\futaketa#1#2/{\ifcase#1 \or\relax\else\kanji#1\fi 十%
\ifcase#2 \else\kanji#2\fi}
\def\futaketacheck#1{\@tempcnta=0\relax
\@tfor\member:=#1\do{\global\advance\@tempcnta by1}%
\ifcase\@tempcnta 
0?\typeout{Month empty: no such cases}%
\or \kanji#1%
\or \expandafter\futaketa#1/\relax
\or ??\typeout{Month too large: no such cases}\fi}
\def\SeiReki#1/#2/#3/{\iftdir\kanji#1年\futaketacheck{#2}月
\futaketacheck{#3}日\else#1年#2月#3日\fi}
%
%和暦縦横変換 by S. Fujita 1999/12/5
% \hizuke11/11/2/--->平成一一年一一月二日
%
\def\hizuke{\@ifnextchar [{\@hizuke}{\@hizuke[平成]}}
\def\@hizuke[#1]#2/#3/#4/{\def\tempaaa{#2}\def\tempbbb{元}%
#1\ifx\tempaaa\tempbbb#2\else\rensuji{#2}\fi
年\rensuji{#3}月\rensuji{#4}日}
%
%和暦縦横変換 by S. Fujita 1999/12/5
% \Hizuke11/11/2/--->平成十一年十一月二日
%
\def\Hizuke{\@ifnextchar [{\@Hizuke}{\@Hizuke[平成]}}
\def\@Hizuke[#1]#2/#3/#4/{\def\tempaaa{#2}\def\tempbbb{元}%
#1\ifx\tempaaa\tempbbb
#2年\else\iftdir\futaketacheck{#2}年\else#2年\fi\fi
\iftdir\futaketacheck{#3}月
\futaketacheck{#4}日\else#3月#4日\fi}
%
% 西暦和暦変換 by S. Fujita 1999/12/5
% \Wareki1999/11/2/--->平成十一年十一月二日
%
\def\@Wareki#1/#2/#3/{%
\ifcase#1 \or 元年
\else\iftdir\futaketacheck{#1}年\else#1年\fi\fi
\iftdir\futaketacheck{#2}月
\futaketacheck{#3}日\else#2月#3日\fi}
\def\Wareki#1/#2/#3/{\@tempcnta=#1
\ifnum\@tempcnta>1988\advance\@tempcnta by -1988\relax
平成\expandafter\@Wareki\the\@tempcnta/#2/#3/\relax
\else\ifnum\@tempcnta>1925\advance\@tempcnta by -1925\relax
昭和\expandafter\@Wareki\the\@tempcnta/#2/#3/\relax 
\else \ifnum\@tempcnta>1911\advance\@tempcnta by -1911\relax
大正\expandafter\@Wareki\the\@tempcnta/#2/#3/\relax
\else\ifnum\@tempcnta>1867\advance\@tempcnta by -1867\relax
明治\expandafter\@Wareki\the\@tempcnta/#2/#3/\relax
\else \expandafter\SeiReki\the\@tempcnta/#2/#3/
\fi\fi\fi\fi}
%
% 連数字縦並び
% 「続\LaTeX2e階梯・縦組編」第21章末尾所載
%
\def\rensujiwake#1{\@tfor\member:=#1\do{%
\expandafter\rensuji{\member}\hskip-\rensujiskip}%
\hskip\rensujiskip}
\endinput
