OSDN Git Service

Complete lltjext.sty (and \vcenter)
[luatex-ja/luatexja.git] / src / lltjext.sty
1 %
2 % lltjext.sty: derived from plext.sty in pLaTeX.
3 %
4 \NeedsTeXFormat{LaTeX2e}
5 \ProvidesPackage{lltjext}
6    [2014/07/26 v1.2-ltj-1 ...]
7 \RequirePackage{luatexja}
8
9 \newif\if@rotsw
10 %%% array and tabular
11 \def\array{\let\@acol\@arrayacol \let\@classz\@arrayclassz
12  \let\@classiv\@arrayclassiv
13  \let\\\@arraycr\let\@halignto\@empty\X@tabarray}
14 \def\tabular{\let\@halignto\@empty\X@tabular}
15 \@namedef{tabular*}{\@ifnextchar<%>
16    {\@stabular}{\@stabular<Z>}}
17 \def\X@tabarray{\@ifnextchar<%>
18    {\p@tabarray}{\p@tabarray<Z>}}
19 \def\X@tabular{\@ifnextchar<%>
20    {\p@tabular}{\p@tabular<Z>}}
21 \def\@stabular<#1>#2{\def\@halignto{to#2}\p@tabular<#1>}
22 \def\p@tabular<#1>{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
23    \let\@classz\@tabclassz
24    \let\@classiv\@tabclassiv \let\\\@tabularcr\p@tabarray<#1>}
25 \def\p@tabarray<#1>{\m@th\@ifnextchar[%]
26    {\p@array<#1>}{\p@array<#1>[c]}}
27
28 \def\p@array<#1>[#2]#3{%
29   \let\box@dir\relax
30   \if #1z\relax
31     \ifnum\ltjgetparameter{direction}=3\relax
32       \let\box@dir\utod\@tempcnta=\zstrutbox
33     \fi
34   \else
35     \if #1y\relax
36        \let\box@dir\yoko\@tempcnta=\strutbox
37     \else\if #1t\relax
38        \let\box@dir\tate\@tempcnta=\tstrutbox
39     \else\if #1d\relax
40        \let\box@dir\dtou\@tempcnta=\dstrutbox
41     \else\if #1u\relax
42        \let\box@dir\utod\@tempcnta=\zstrutbox
43     \fi\fi\fi\fi
44   \fi
45   \ifx\box@dir\relax
46     \ifcase\ltjgetparameter{direction}
47        \or   \let\box@dir\dtou\@tempcnta=\dstrutbox% dtou
48        \or\or\let\box@dir\tate\@tempcnta=\tstrutbox% tate
49        \or   \let\box@dir\yoko\@tempcnta=\strutbox% yoko
50        \else \let\box@dir\utod\@tempcnta=\zstrutbox% utod
51     \fi
52   \fi
53   \setbox\@arstrutbox\hbox{%
54     \box@dir
55     \vrule\@height\arraystretch\ltjgetht\@tempcnta
56           \@depth\arraystretch\ltjgetdp\@tempcnta \@width\z@}%
57   \fork@array@option<#1>[#2]%
58   \@mkpream{#3}\edef\@preamble{\ialign \noexpand\@halignto
59   \bgroup \tabskip\z@skip \@arstrut \@preamble \tabskip\z@skip \cr}%
60   \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
61   \let\tabularnewline\\%
62   \@begin@alignbox\bgroup\box@dir\adjustbaseline
63     \let\par\@empty
64     \let\@sharp##\let\protect\relax
65     \lineskip\z@skip\baselineskip\z@skip\@preamble}
66 \def\endarray{\crcr\egroup\egroup\@end@alignbox}
67 \def\endtabular{\crcr\egroup\egroup\@end@alignbox$\egroup}
68 \expandafter \let \csname endtabular*\endcsname = \endtabular
69 \def\fork@array@option<#1>[#2]{%
70 \ifnum\ltjgetparameter{direction}=4 % yoko
71   \ifx\box@dir\yoko
72     \if #2t\relax
73        \let\@begin@alignbox\vtop
74        \let\@end@alignbox\relax
75     \else\if #2b\relax
76        \let\@begin@alignbox\vbox
77        \let\@end@alignbox\relax
78     \else
79        \let\@begin@alignbox\vcenter
80        \let\@end@alignbox\relax
81     \fi\fi
82   \else
83     \if #2t\relax
84        \def\@begin@alignbox{\vtop\bgroup\kern\z@\vbox}%
85        \def\@end@alignbox{\egroup}%
86     \else\if #2b\relax
87        \let\@begin@alignbox\vbox
88        \let\@end@alignbox\relax
89     \else
90        \let\@begin@alignbox\vcenter
91        \let\@end@alignbox\relax
92     \fi\fi
93   \fi
94 \else\ifnum\ltjgetparameter{direction}=1 % dtou
95   \ifx\box@dir\yoko
96     \if #2t\relax
97        \def\@begin@alignbox{\vtop\bgroup\kern\z@\vbox}%
98        \def\@end@alignbox{\egroup}%
99     \else\if #2b\relax
100        \let\@begin@alignbox\vbox
101        \let\@end@alignbox\relax
102     \else
103       \let\@begin@alignbox\vcenter
104         \let\@end@alignbox\relax
105     \fi\fi
106   \else\ifx\box@dir\dtou
107     \if #2t\relax
108        \let\@begin@alignbox\vtop
109        \let\@end@alignbox\relax
110     \else\if #2b\relax
111        \let\@begin@alignbox\vbox
112        \let\@end@alignbox\relax
113     \else
114        \let\@begin@alignbox\vcenter
115        \let\@end@alignbox\relax
116     \fi\fi
117   \else % 180 度回転→vtop, vbox を入れ替える
118     \if #2t\relax
119        \let\@begin@alignbox\vbox %%% !!!
120        \let\@end@alignbox\relax
121     \else\if #2b\relax
122        \let\@begin@alignbox\vtop %%% !!!
123        \let\@end@alignbox\relax
124     \else
125        \let\@begin@alignbox\vcenter
126        \let\@end@alignbox\relax
127     \fi\fi
128   \fi\fi
129 \else % tate, utod
130   \ifx\box@dir\yoko
131     \if #2t\relax
132       \def\@begin@alignbox{\vtop\bgroup\kern\z@\vbox}%
133       \def\@end@alignbox{\egroup}%
134     \else\if #2b\relax
135       \def\@begin@alignbox{\vbox\bgroup\vbox}%
136       \def\@end@alignbox{\kern\z@\egroup}%
137     \else
138       \let\@begin@alignbox\vcenter
139       \let\@end@alignbox\relax
140     \fi\fi
141   \else\ifx\box@dir\dtou % 180 度回転→vtop, vbox を入れ替える
142     \if #2t\relax
143       \let\@begin@alignbox\vbox %%% !!!
144       \let\@end@alignbox\relax
145     \else\if #2b\relax
146       \let\@begin@alignbox\vtop %%% !!!
147       \let\@end@alignbox\relax
148     \else
149       \let\@begin@alignbox\vcenter
150       \let\@end@alignbox\relax
151     \fi\fi
152   \else
153     \if #2t\relax
154        \let\@begin@alignbox\vtop
155        \let\@end@alignbox\relax
156     \else\if #2b\relax
157        \let\@begin@alignbox\vbox
158        \let\@end@alignbox\relax
159     \else
160        \let\@begin@alignbox\vcenter
161        \let\@end@alignbox\relax
162     \fi\fi
163   \fi\fi
164 \fi\fi%
165 }
166
167 %%% caption
168 \newbox\@floatbox
169 \newdimen\floatwidth
170 \newdimen\floatheight
171 \newdimen\floatruletick \floatruletick=0.4pt
172 \newdimen\captionfloatsep \captionfloatsep=10pt
173 \def\caption@dir{Z}
174 \let\captiondir\relax
175 \newdimen\captionwidth \captionwidth\z@
176 \def\caption@posa{Z}
177 \def\caption@posb{Z}
178 \newbox\@captionbox
179 \def\captionfontsetup{\normalfont\normalsize}
180 \def\layoutfloat{\@ifnextchar(%)
181    {\X@layoutfloat}{\X@layoutfloat(-5\p@,-5\p@)}}
182 \def\X@layoutfloat(#1,#2){\@ifnextchar[%]
183    {\@layoutfloat(#1,#2)}{\@layoutfloat(#1,#2)[c]}}
184 \long\def\@layoutfloat(#1,#2)[#3]#4{%
185   \setbox\z@\hbox{#4}%
186   \floatwidth=#1 \floatheight=#2 \edef\float@pos{#3}%
187   \ifdim\floatwidth<\z@
188      \floatwidth\ltjgetwd\z@\floatruletick\z@
189   \fi
190   \ifdim\floatheight<\z@
191      \floatheight\ltjgetht\z@\advance\floatheight\ltjgetdp\z@\relax
192      \floatruletick\z@
193   \fi
194   \setbox\@floatbox\vbox to\floatheight{\offinterlineskip
195     \hrule width\floatwidth height\floatruletick depth\z@
196     \vss\hbox to\floatwidth{%
197       \vrule width\floatruletick height\floatheight depth\z@
198       \hss\vbox to\floatheight{\hsize\floatwidth\vss#4\vss}\hss
199       \vrule width\floatruletick height\floatheight depth\z@
200     }\hrule width\floatwidth height\floatruletick depth\z@}}
201 \def\DeclareLayoutCaption#1<#2>(#3)[#4#5]{%
202   \expandafter
203   \ifx\csname #1@layoutcaption\endcsname\relax \else
204     \@latex@info{Redeclaring capiton layout setting of '#1'}%
205   \fi
206   \expandafter
207   \gdef\csname #1@layoutcaption\endcsname{%
208      \if Z\caption@dir\def\caption@dir{#2}\fi
209      \ifdim\captionwidth=\z@ \captionwidth=#3\relax\fi
210      \if Z\caption@posa\def\caption@posa{#4}\fi
211      \if Z\caption@posb\def\caption@posb{#5}\fi}}
212 \@onlypreamble\DeclareLayoutCaption
213 \DeclareLayoutCaption{figure}<y>(.8\linewidth)[cd]
214 \DeclareLayoutCaption{table}<y>(.8\linewidth)[cu]
215 \def\layoutcaption{\def\caption@dir{Z}\captionwidth\z@
216   \def\caption@posa{Z}\def\caption@posb{Z}%
217   \@ifnextchar<\X@layoutcaption{%
218     \@ifnextchar(\@ilayoutcaption{%
219       \@ifnextchar[\@iilayoutcaption\relax}}}
220 \def\X@layoutcaption<#1>{\def\caption@dir{#1}%
221   \@ifnextchar(\@ilayoutcaption{%
222     \@ifnextchar[\@iilayoutcaption\relax}}
223 \def\@ilayoutcaption(#1){\setlength\captionwidth{#1}%
224   \@ifnextchar[{\@iilayoutcaption}{\relax}}
225 \def\@iilayoutcaption[#1#2]{%
226   \def\caption@posa{#1}\def\caption@posb{#2}}
227 \def\pcaption{\refstepcounter\@captype \@dblarg{\@pcaption\@captype}}
228 \long\def\@pcaption#1[#2]#3{%
229   \addcontentsline{\csname ext@#1\endcsname}{#1}{%
230     \protect\numberline{\csname the#1\endcsname}{\ignorespaces#2}}%
231   \ifvoid\@floatbox
232      \latex@error{Use with `\protect\layoutfloat'.}\@eha
233   \fi
234   \make@pcaptionbox{#3}%
235   \@pboxswfalse
236   \setbox\@tempboxa\vbox{\hbox to\hsize{\if l\float@pos\else\hss\fi
237     \if l\caption@posb\box\@captionbox\kern\captionfloatsep\fi
238     \if t\caption@posa\vtop
239     \else\if b\caption@posa\vbox
240     \else\ifmmode\vcenter \else\@pboxswtrue $\vcenter \fi\fi\fi
241     {\if u\caption@posb\box\@captionbox\kern\captionfloatsep\fi
242      \unvbox\@floatbox
243      \if d\caption@posb\kern\captionfloatsep\box\@captionbox\fi}%
244     \if r\caption@posb\kern\captionfloatsep\box\@captionbox\fi
245     \if@pboxsw \m@th$\fi \if r\float@pos\else\hss\fi}}%
246   \par\vskip.25\baselineskip
247   \box\@tempboxa}
248 \def\make@pcaptionbox#1{%
249   \expandafter
250   \ifx\csname\@captype @layoutcaption\endcsname\relax
251      \@latex@warning{Default caption layout of `\@captype' unknown.}%
252        \def\caption@dir{Z}\captionwidth\z@
253        \def\caption@posa{Z}\def\caption@posb{Z}%
254   \else
255      \csname \@captype @layoutcaption\endcsname
256   \fi
257   \@tempswafalse
258   % tempswa\hline 基本組の組方向とキャプションの組方向が直交するか?
259   \if y\caption@dir \let\captiondir\yoko
260     \ifodd\ltjgetparameter{direction}\relax\@tempswatrue\fi
261   \else\if z\caption@dir \let\captiondir\relax
262     \ifnum\ltjgetparameter{direction}=3\relax\let\captiondir\utod\fi
263   \else\if d\caption@dir \let\captiondir\dtou
264     \ifodd\ltjgetparameter{direction}\else\@tempswatrue\fi
265   \else\if u\caption@dir \let\captiondir\utod
266     \ifodd\ltjgetparameter{direction}\else\@tempswatrue\fi
267   \else\if t\caption@dir \let\captiondir\tate
268     \ifodd\ltjgetparameter{direction}\else\@tempswatrue\fi
269   \fi\fi\fi\fi\fi
270   \setbox0\hbox{\hbox{\captiondir
271      \captionfontsetup\parindent\z@\inhibitglue
272      \csname fnum@\@captype\endcsname  #1}}%"
273   \if@tempswa\@tempdima\ltjgetht0\relax\else\@tempdima\ltjgetwd0\relax\fi
274   \ifdim\@tempdima>\captionwidth \@tempdima\captionwidth \fi
275   \@pboxswfalse
276   \setbox0\hbox{%
277     \if u\caption@posb\vbox
278     \else\if d\caption@posb\vbox
279     \else\if t\caption@posa\vtop
280     \else\if b\caption@posa\vbox
281     \else\ifmmode\vcenter\else\@pboxswtrue $\vcenter\fi
282     \fi\fi\fi\fi
283     {\hsize\@tempdima\kern\z@
284     \vbox{\captiondir\hsize\@tempdima
285       \captionfontsetup\parindent\z@\inhibitglue
286       \csname fnum@\@captype\endcsname  #1}\kern\z@
287     }\if@pboxsw \m@th$\fi}%
288   \let\to@captionboxwidth\relax
289   \if l\caption@posb \else\if r\caption@posb\else
290   \def\to@captionboxwidth{to\floatwidth}\fi\fi
291   \setbox\@captionbox\hbox\to@captionboxwidth{%
292      \if t\caption@posa\else\hss\fi
293      \unhbox0\relax
294      \if b\caption@posa\else\hss\fi}}
295
296 %%% minipage and parbox
297 \def\minipage{\@ifnextchar<%>
298    {\X@minipage}{\X@minipage<Z>}}
299 \def\X@minipage<#1>{\@ifnextchar[%]
300    {\@iminipage<#1>}{\@iiiminipage<#1>{c}\@empty[s]}}
301 \def\@iminipage<#1>[#2]{\@ifnextchar[%]
302    {\@iiminipage<#1>{#2}}{\@iiiminipage<#1>{#2}\@empty[s]}}
303 \def\@iiminipage<#1>#2[#3]{\@ifnextchar[%]
304    {\@iiiminipage<#1>{#2}{#3}}{\@iiiminipage<#1>{#2}{#3}[#2]}}
305 \def\@iiiminipage<#1>#2#3[#4]#5{%
306   \leavevmode\bgroup
307   \setlength\@tempdima{#5}%
308   \def\@mpargs{<#1>{#2}{#3}[#4]{#5}}%
309   \let\box@dir\relax
310   \if #1z\relax
311     \ifnum\ltjgetparameter{direction}=3\relax
312       \let\box@dir\utod
313     \fi
314   \else
315     \if #1y\relax     \let\box@dir\yoko
316     \else\if #1t\relax\let\box@dir\tate
317     \else\if #1d\relax\let\box@dir\dtou
318     \else\if #1u\relax\let\box@dir\utod
319     \fi\fi\fi\fi
320   \fi
321   \ifx\box@dir\relax
322     \ifcase\ltjgetparameter{direction}\relax
323        \or   \let\box@dir\dtou
324        \or\or\let\box@dir\tate
325        \or   \let\box@dir\yoko
326        \else \let\box@dir\utod
327     \fi
328   \fi
329   \setbox\@tempboxa\vbox\bgroup\box@dir
330     \adjustbaseline
331     \color@begingroup
332       \hsize\@tempdima
333       \textwidth\hsize \columnwidth\hsize
334       \@parboxrestore
335       \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}%
336       \c@mpfootnote\z@
337       \let\@footnotetext\@mpfootnotetext
338       \let\@listdepth\@mplistdepth \@mplistdepth\z@
339       \@minipagerestore
340       \global\@minipagetrue %% \global added 24 May 89
341       \everypar{\global\@minipagefalse\everypar{}}}
342 \def\endminipage{%
343     \par
344     \unskip
345     \ifvoid\@mpfootins\else
346       \vskip\skip\@mpfootins
347       \normalcolor
348       \footnoterule
349       \unvbox\@mpfootins
350     \fi
351     \global\@minipagefalse   %% added 24 May 89
352   \color@endgroup
353   \egroup
354   \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}\egroup}
355 \def\parbox{\@ifnextchar<%>
356    {\X@parbox}{\X@parbox<Z>}}
357 \def\X@parbox<#1>{\@ifnextchar[%]
358    {\@iparbox<#1>}{\@iiiparbox<#1>{c}\@empty[s]}}
359 \def\@iparbox<#1>[#2]{\@ifnextchar[%]
360    {\@iiparbox<#1>{#2}}{\@iiiparbox<#1>{#2}\@empty[s]}}
361 \def\@iiparbox<#1>#2[#3]{\@ifnextchar[%]%
362    {\@iiiparbox<#1>{#2}{#3}}{\@iiiparbox<#1>{#2}{#3}[#2]}}
363 \long\def\@iiiparbox<#1>#2#3[#4]#5#6{%
364   \leavevmode\bgroup
365   \setlength\@tempdima{#5}%
366   \fork@parbox@option<#1>[#2]%
367   \@begin@tempboxa\vbox{\box@dir
368     \hsize\@tempdima\@parboxrestore\adjustbaseline#6\endgraf}%
369     \ifx\@empty#3\relax\else
370       \setlength\@tempdimb{#3}%
371       \def\@parboxto{to\@tempdimb}%
372     \fi
373     \@begin@parbox\@parboxto{\box@dir\adjustbaseline
374        \let\hss\vss\let\unhbox\unvbox
375        \csname bm@#4\endcsname}\@end@parbox
376   \@end@tempboxa\egroup}
377 \def\fork@parbox@option<#1>[#2]{%
378   \let\box@dir\relax
379   \if #1z\relax
380     \ifnum\ltjgetparameter{direction}=3\relax
381       \let\box@dir\utod
382     \fi
383   \else
384     \if #1y\relax     \let\box@dir\yoko
385     \else\if #1t\relax\let\box@dir\tate
386     \else\if #1d\relax\let\box@dir\dtou
387     \else\if #1u\relax\let\box@dir\utod
388     \fi\fi\fi\fi
389   \fi
390   \ifx\box@dir\relax
391     \ifcase\ltjgetparameter{direction}\relax
392        \or   \let\box@dir\dtou
393        \or\or\let\box@dir\tate
394        \or   \let\box@dir\yoko
395        \else \let\box@dir\utod
396     \fi
397   \fi
398 %%% now almost same as \fork@array@option
399 \ifnum\ltjgetparameter{direction}=4 % yoko
400   \ifx\box@dir\yoko
401     \if #2t\relax
402        \let\@begin@parbox\vtop
403        \let\@end@parbox\relax
404     \else\if #2b\relax
405        \let\@begin@parbox\vbox
406        \let\@end@parbox\relax
407     \else
408       \def\@begin@parbox{$\vcenter}%
409       \def\@end@parbox{\m@th$}%
410     \fi\fi
411   \else
412     \if #2t\relax
413        \def\@begin@parbox{\vtop\bgroup\kern\z@\vbox}%
414        \def\@end@parbox{\egroup}%
415     \else\if #2b\relax
416        \let\@begin@parbox\vbox
417        \let\@end@parbox\relax
418     \else
419       \def\@begin@parbox{$\vcenter}%
420       \def\@end@parbox{\m@th$}%
421     \fi\fi
422   \fi
423 \else\ifnum\ltjgetparameter{direction}=1 % dtou
424   \ifx\box@dir\yoko
425     \if #2t\relax
426        \def\@begin@parbox{\vtop\bgroup\kern\z@\vbox}
427        \def\@end@parbox{\egroup}
428     \else\if #2b\relax
429        \let\@begin@parbox\vbox
430        \let\@end@parbox\relax
431     \else
432       \def\@begin@parbox{$\vcenter}%
433       \def\@end@parbox{\m@th$}%
434     \fi\fi
435   \else\ifx\box@dir\dtou
436     \if #2t\relax
437        \let\@begin@parbox\vtop
438        \let\@end@parbox\relax
439     \else\if #2b\relax
440        \let\@begin@parbox\vbox
441        \let\@end@parbox\relax
442     \else
443       \def\@begin@parbox{$\vcenter}%
444       \def\@end@parbox{\m@th$}%
445     \fi\fi
446   \else % 180 度回転→vtop, vbox を入れ替える
447     \if #2t\relax
448        \let\@begin@parbox\vbox %%% !!!
449        \let\@end@parbox\relax
450     \else\if #2b\relax
451        \let\@begin@parbox\vtop %%% !!!
452        \let\@end@parbox\relax
453     \else
454       \def\@begin@parbox{$\vcenter}%
455       \def\@end@parbox{\m@th$}%
456     \fi\fi
457   \fi\fi
458 \else % tate, utod
459   \ifx\box@dir\yoko
460     \if #2t\relax
461       \def\@begin@parbox{\vtop\bgroup\kern\z@\vbox}%
462       \def\@end@parbox{\egroup}%
463     \else\if #2b\relax
464       \def\@begin@parbox{\vbox\bgroup\vbox}%
465       \def\@end@parbox{\kern\z@\egroup}%
466     \else
467       \def\@begin@parbox{$\vcenter}%
468       \def\@end@parbox{\m@th$}%
469     \fi\fi
470   \else\ifx\box@dir\dtou % 180 度回転→vtop, vbox を入れ替える
471     \if #2t\relax
472       \let\@begin@parbox\vbox %%% !!!
473       \let\@end@parbox\relax
474     \else\if #2b\relax
475       \let\@begin@parbox\vtop %%% !!!
476       \let\@end@parbox\relax
477     \else
478       \def\@begin@parbox{$\vcenter}%
479       \def\@end@parbox{\m@th$}%
480     \fi\fi
481   \else
482     \if #2t\relax
483        \let\@begin@parbox\vtop
484        \let\@end@parbox\relax
485     \else\if #2b\relax
486        \let\@begin@parbox\vbox
487        \let\@end@parbox\relax
488     \else
489       \def\@begin@parbox{$\vcenter}%
490       \def\@end@parbox{\m@th$}%
491     \fi\fi
492   \fi\fi
493 \fi\fi%
494 }
495
496 %%% pbox
497 \def\pbox{\leavevmode\@ifnextchar<{\X@makePbox}{\X@makePbox<Z>}}
498 \def\X@makePbox<#1>{%
499   \@ifnextchar[{\@imakePbox<#1>}{\@imakePbox<#1>[-5\p@]}}
500 \def\@imakePbox<#1>[#2]{\@ifnextchar[%]
501   {\@iimakePbox<#1>{#2}}{\@iimakePbox<#1>{#2}[c]}}
502 \def\@iimakePbox<#1>#2[#3]#4{%
503   \bgroup\let\box@dir\relax
504   \if #1z\relax
505     \ifnum\ltjgetparameter{direction}=3 \relax
506       \let\box@dir\utod
507     \fi
508   \else
509     \if #1y\relax     \let\box@dir\yoko
510     \else\if #1t\relax\let\box@dir\tate
511     \else\if #1d\relax\let\box@dir\dtou
512     \else\if #1u\relax\let\box@dir\utod
513     \fi\fi\fi\fi
514   \fi
515   \ifx\box@dir\relax
516     \ifcase\ltjgetparameter{direction}
517        \or   \let\box@dir\dtou
518        \or\or\let\box@dir\tate
519        \or   \let\box@dir\yoko
520        \else \let\box@dir\utod
521     \fi
522   \fi
523     \ifdim #2 <\z@ \hbox{\box@dir#4}\else
524     \hbox to#2{\box@dir
525                \if #3l\relax\else\hss\fi
526                #4\relax
527                \if #3r\relax\else\hss\fi}\fi\egroup}
528
529 %%% picture
530 \def\picture{\@ifnextchar<%>
531    {\X@picture}{\X@picture<Z>}}
532 \def\X@picture<#1>(#2,#3){\@ifnextchar(%)
533    {\@@picture<#1>(#2,#3)}{\@@picture<#1>(#2,#3)(0,0)}}
534 \newdimen\save@ybaselineshift
535 \newdimen\save@tbaselineshift
536 \newdimen\@picwd
537 \def\@@picture<#1>(#2,#3)(#4,#5){%
538   \save@ybaselineshift\ybaselineshift
539   \save@tbaselineshift\tbaselineshift
540   \iftdir
541     \if#1y\let\box@dir\yoko
542       \@picwd=#3\unitlength \@picht=#2\unitlength
543       \@tempdima=#5\unitlength \@tempdimb=#4\unitlength
544     \else\let\box@dir\tate
545       \@picwd=#2\unitlength \@picht=#3\unitlength
546       \@tempdima=#4\unitlength \@tempdimb=#5\unitlength
547     \fi
548   \else
549     \if#1t\let\box@dir\tate
550       \@picwd=#3\unitlength \@picht=#2\unitlength
551       \@tempdima=#5\unitlength \@tempdimb=#4\unitlength
552     \else\let\box@dir\yoko
553       \@picwd=#2\unitlength \@picht=#3\unitlength
554       \@tempdima=#4\unitlength \@tempdimb=#5\unitlength
555     \fi
556   \fi
557   \setbox\@picbox\hbox to\@picwd\bgroup\box@dir
558   \hskip-\@tempdima\lower\@tempdimb\hbox\bgroup
559   \ybaselineshift\z@ \tbaselineshift\z@
560   \ignorespaces}
561 \def\endpicture{%
562   \egroup\hss\egroup
563   \ht\@picbox\@picht \wd\@picbox\@picwd \dp\@picbox\z@
564   \mbox{\box\@picbox}%
565   \ybaselineshift\save@ybaselineshift
566   \tbaselineshift\save@tbaselineshift}
567 \let\org@put\put
568 \def\put{\ybaselineshift\z@\tbaselineshift\z@\org@put}
569 \let\org@line\line
570 \def\line{\ybaselineshift\z@\tbaselineshift\z@\org@line}
571 \let\org@vector\vector
572 \def\vector{\ybaselineshift\z@\tbaselineshift\z@\org@vector}
573 \let\org@dashbox\dashbox
574 \def\dashbox{\ybaselineshift\z@\tbaselineshift\z@\org@dashbox}
575 \let\org@oval\oval
576 \def\oval{\ybaselineshift\z@\tbaselineshift\z@\org@oval}
577 \let\org@circle\circle
578 \def\circle{\ybaselineshift\z@\tbaselineshift\z@\org@circle}
579
580 %%% rensuji
581 \newif\ifnot@advanceline
582 \newskip\rensujiskip
583 \rensujiskip=0.25\chs plus.25\zw minus.25\zw
584 \DeclareRobustCommand\rensuji{%
585   \@ifstar{\not@advancelinetrue\@rensuji}{\@rensuji}}
586 \def\@rensuji{\@ifnextchar[{\@@rensuji}{\@@rensuji[c]}}
587 \def\@@rensuji[#1]#2{\ifnum\ltjgetparameter{direction}=4\relax%
588   \hbox{#2}\else
589   \hskip\rensujiskip
590   \ifvmode\leavevmode\fi
591   \ifnot@advanceline\not@advancelinefalse\else
592     \setbox\z@\hbox{\yoko#2}%
593     \@tempdima\ltjgetht\z@ \advance\@tempdima\ltjgetdp\z@
594     \ifnum\ltjgetparameter{direction}=1\relax
595       \if #1c\relax\vrule \@width \z@ \@height.5\@tempdima \@depth.5\@tempdima
596       \else\if #1l\relax\vrule\@width \z@\@height\z@ \@depth\@tempdima
597       \else\vrule\@width \z@ \@height\@tempdima \@depth\z@
598       \fi\fi
599     \else
600       \if #1c\relax\vrule \@width \z@ \@height.5\@tempdima \@depth.5\@tempdima
601       \else\if #1r\relax\vrule\@width \z@\@height\z@ \@depth\@tempdima
602       \else\vrule\@width \z@ \@height\@tempdima \@depth\z@
603       \fi\fi
604     \fi
605   \fi
606   \ifnum\ltjgetparameter{direction}=1\relax
607     \if #1c\relax\hbox to\zw{\yoko\hss#2\hss}%
608     \else\if #1r\relax\vbox{\hbox to\zw{\yoko\hss#2}\kern\z@}%
609     \else\vtop{\kern\z@\hbox to\zw{\yoko#2\hss}}%
610     \fi\fi
611   \else
612     \if #1c\relax\hbox to\zw{\yoko\hss#2\hss}%
613     \else\if #1r\relax\vtop{\kern\z@\hbox to\zw{\yoko\hss#2}}%
614     \else\vbox{\hbox to\zw{\yoko #2\hss}\kern\z@}%
615     \fi\fi
616   \fi
617   \hskip\rensujiskip
618 \fi}
619 \let\Rensuji\rensuji
620 \let\prensuji\rensuji
621
622 %%% kanji
623 \def\Kanji#1{\expandafter\@Kanji\csname c@#1\endcsname}
624 \def\@Kanji#1{\expandafter\kansuji\number #1}
625 \def\kanji{\iftdir\expandafter\kansuji\fi}
626
627 %%% bou
628 %%% 
629 \def\boutenchar{\char\euc"A1A2}
630 \def\bou#1{\ifvmode\leavevmode\fi\@bou#1\end}
631 \def\@bou#1{%
632   \ifx#1\end \let\next=\relax
633   \else
634     \ifnum\ltjgetparameter{direction}=3\relax
635       \hbox to\z@{\vbox to\z@{\boxmaxdepth\maxdimen
636         \vss\moveleft0.2\zw\hbox{\yoko\boutenchar}\nointerlineskip
637         \hbox{\char\euc"A1A1}}\hss}\nobreak#1\relax
638     \else
639       \hbox to\z@{\vbox to\z@{\boxmaxdepth\maxdimen
640         \vss\moveleft-0.2\zw\hbox{\boutenchar}\nointerlineskip
641         \hbox{\char\euc"A1A1}}\hss}\nobreak#1\relax
642     \fi
643     \let\next=\@bou
644   \fi\next}
645
646 %%% kasen
647 \def\kasen#1{%
648   \ifnum\ltjgetparameter{direction}=3\relax
649     \setbox\z@\hbox{#1}\leavevmode\raise.7\zw
650     \hbox to\z@{\vrule\@width\wd\z@ \@depth\z@ \@height.4\p@\hss}%
651     \box\z@
652   \else\underline{#1}\fi}
653
654 %%% references
655 \def\@eqnnum{{\reset@font\rmfamily \normalcolor
656   \ifnum\ltjgetparameter{direction}=3 \raise.25\zh\hbox{\yoko(\theequation)}%
657   \else (\theequation)\fi}}
658 \def\@thecounter#1{\noexpand\rensuji{\noexpand\arabic{#1}}}
659 \def\@thmcounter#1{\noexpand\rensuji{\noexpand\arabic{#1}}}
660 \endinput