OSDN Git Service

9bf915f195e79ec0dd247e1581d2e87a6aa3b662
[luatex-ja/luatexja.git] / src / lltjext.sty
1 %
2 % lltjext.sty: derived from plext.sty in pLaTeX.
3 %
4
5 \NeedsTeXFormat{LaTeX2e}
6 \ProvidesPackage{lltjext}[2017/07/17 v1.2g-ltj-6 Macros for vertical writing]
7 \RequirePackage{luatexja}
8 \newcount\ltj@ext@dir
9 {\catcode`\*=11
10 \global\let\ltj@lltjext@orig@tabularS=\tabular*
11 }%
12 \let\ltj@lltjext@orig@tabular=\tabular
13 \let\ltj@lltjext@orig@array=\array
14
15 %%% array and tabular
16 \def\array{\let\@acol\@arrayacol \let\@classz\@arrayclassz
17  \let\@classiv\@arrayclassiv
18  \let\\\@arraycr\let\@halignto\@empty
19  \ltj@ext@dir=\ltjgetparameter{direction}\relax\X@tabarray}
20 \def\tabular{\let\@halignto\@empty\X@tabular}
21 \@namedef{tabular*}{\@ifnextchar<%>
22    {\@stabular}{\@stabular<z>}}
23 \def\X@tabarray{\@ifnextchar<%>
24    {\p@tabarray}{\p@tabarray<z>}}
25 \def\X@tabular{\@ifnextchar<%>
26    {\p@tabular}{\p@tabular<z>}}
27 \def\@stabular<#1>#2{%
28    \setlength\dimen@{#2}%
29    \edef\@halignto{to\the\dimen@}\p@tabular<#1>}
30 \def\p@tabular<#1>{\leavevmode \hbox \bgroup 
31    \ltj@ext@dir=\ltjgetparameter{direction}$\let\@acol\@tabacol
32    \let\@classz\@tabclassz
33    \let\@classiv\@tabclassiv \let\\\@tabularcr\p@tabarray<#1>}
34 \def\p@tabarray<#1>{\m@th\@ifnextchar[%]
35    {\p@array<#1>}{\p@array<#1>[c]}}
36
37 \def\p@array<#1>[#2]#3{%
38   \let\box@dir\relax
39   \if #1z\relax
40     \ifnum\ltj@ext@dir=3\relax
41       \let\box@dir\utod\@tempcnta=\zstrutbox
42     \fi
43   \else
44     \if #1y\relax
45        \let\box@dir\yoko\@tempcnta=\ystrutbox
46     \else\if #1t\relax
47        \let\box@dir\tate\@tempcnta=\tstrutbox
48     \else\if #1d\relax
49        \let\box@dir\dtou\@tempcnta=\dstrutbox
50     \else\if #1u\relax
51        \let\box@dir\utod\@tempcnta=\zstrutbox
52     \fi\fi\fi\fi
53   \fi
54   \ifx\box@dir\relax
55     \ifcase\ltj@ext@dir
56        \or   \let\box@dir\dtou\@tempcnta=\dstrutbox% dtou
57        \or\or\let\box@dir\tate\@tempcnta=\tstrutbox% tate
58        \or   \let\box@dir\yoko\@tempcnta=\ystrutbox% yoko
59        \else \let\box@dir\utod\@tempcnta=\zstrutbox% utod
60     \fi
61   \fi
62   \setbox\@arstrutbox\hbox{%
63     \box@dir
64     \vrule\@height\arraystretch\ltjgetht\@tempcnta
65           \@depth\arraystretch\ltjgetdp\@tempcnta \@width\z@}%
66   \fork@array@option<#1>[#2]%
67   \@mkpream{#3}\edef\@preamble{\ialign \noexpand\@halignto
68   \bgroup\@arstrut \@preamble \tabskip\z@skip \cr}%
69   \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
70   \let\tabularnewline\\%
71   \@begin@alignbox\bgroup\box@dir\adjustbaseline
72     \let\par\@empty
73     \let\@sharp##\let\protect\relax
74     \lineskip\z@skip\baselineskip\z@skip\@preamble}
75 \def\endarray{\crcr\egroup\egroup\@end@alignbox}
76 \def\endtabular{\endarray$\egroup}
77 \expandafter \let \csname endtabular*\endcsname = \endtabular
78 % コミュニティ版では、アスキー版で不自然だった表組(array環境およびtabular環境)と
79 % 周囲の本文との揃え位置を修正し、以下のように設計しました。
80 % \begin{itemize}
81 % \item 周囲の組方向が横組かつ組方向が|<y>|, |<z>|指定の場合
82 % \begin{itemize}
83 %   \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置)
84 %   \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下)
85 %   \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置)
86 % \end{itemize}
87 % \item 周囲の組方向が横組かつ組方向が|<t>|指定の場合
88 % \begin{itemize}
89 %   \item |[t]|指定のとき\\表組の上端が周囲の和文ベースラインと一致
90 %   \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下)
91 %   \item |[b]|指定のとき\\表組の下端が周囲の和文ベースラインと一致
92 % \end{itemize}
93 % \item 周囲の組方向が縦組かつ組方向が|<y>|指定の場合
94 % \begin{itemize}
95 %   \item |[t]|指定のとき\\表組の上端が周囲の和文ベースラインと一致
96 %   \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下)
97 %   \item |[b]|指定のとき\\表組の下端が周囲の和文ベースラインと一致
98 % \end{itemize}
99 % \item 周囲の組方向が縦組かつ組方向が|<t>|指定の場合
100 % \begin{itemize}
101 %   \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置)
102 %   \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下)
103 %   \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置)
104 % \end{itemize}
105 % \item 周囲の組方向が縦組かつ組方向が|<z>|指定の場合
106 %  [TODO] 未定!
107 %^^A \begin{itemize}
108 %^^A   \item |[t]|指定のとき\\表組の上端が周囲の和文ベースラインと一致
109 %^^A   \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下)
110 %^^A   \item |[b]|指定のとき\\表組の下端が周囲の和文ベースラインと一致
111 %^^A \end{itemize}
112 \def\fork@array@option<#1>[#2]{%
113 \ifnum\ltjgetparameter{direction}=4 % yoko
114   \ifx\box@dir\yoko
115     \if #2t\relax
116        \let\@begin@alignbox\vtop
117        \let\@end@alignbox\relax
118     \else\if #2b\relax
119        \let\@begin@alignbox\vbox
120        \let\@end@alignbox\relax
121     \else
122        \let\@begin@alignbox\vcenter
123        \let\@end@alignbox\relax
124     \fi\fi
125   \else
126     \if #2t\relax
127        \def\@begin@alignbox{\vtop\bgroup\kern\z@\vbox}%
128        \let\@end@alignbox\egroup
129     \else\if #2b\relax
130        \def\@begin@alignbox{\vbox\bgroup\vbox}%
131        \def\@end@alignbox{\kern\z@\egroup}%
132     \else
133        \let\@begin@alignbox\vcenter
134        \let\@end@alignbox\relax
135     \fi\fi
136   \fi
137 \else\ifnum\ltjgetparameter{direction}=1 % dtou
138   \ifx\box@dir\yoko
139     \if #2t\relax
140        \def\@begin@alignbox{\vtop\bgroup\kern\z@\vbox}%
141        \let\@end@alignbox\egroup
142     \else\if #2b\relax
143        \def\@begin@alignbox{\vbox\bgroup\vbox}%
144        \def\@end@alignbox{\kern\z@\egroup}%
145     \else
146       \let\@begin@alignbox\vcenter
147         \let\@end@alignbox\relax
148     \fi\fi
149   \else\ifx\box@dir\dtou
150     \if #2t\relax
151        \let\@begin@alignbox\vtop
152        \let\@end@alignbox\relax
153     \else\if #2b\relax
154        \let\@begin@alignbox\vbox
155        \let\@end@alignbox\relax
156     \else
157        \let\@begin@alignbox\vcenter
158        \let\@end@alignbox\relax
159     \fi\fi
160   \else % 180 度回転→vtop, vbox を入れ替える
161     \if #2t\relax
162        \let\@begin@alignbox\vbox %%% !!!
163        \let\@end@alignbox\relax
164     \else\if #2b\relax
165        \let\@begin@alignbox\vtop %%% !!!
166        \let\@end@alignbox\relax
167     \else
168        \let\@begin@alignbox\vcenter
169        \let\@end@alignbox\relax
170     \fi\fi
171   \fi\fi
172 \else % tate, utod
173   \ifx\box@dir\yoko
174     \if #2t\relax
175       \def\@begin@alignbox{\vtop\bgroup\kern\z@\vbox}%
176       \let\@end@alignbox\egroup
177     \else\if #2b\relax
178       \def\@begin@alignbox{\vbox\bgroup\vbox}%
179       \def\@end@alignbox{\kern\z@\egroup}%
180     \else
181       \let\@begin@alignbox\vcenter
182       \let\@end@alignbox\relax
183     \fi\fi
184   \else\ifx\box@dir\dtou % 180 度回転→vtop, vbox を入れ替える
185     \if #2t\relax
186       \let\@begin@alignbox\vbox %%% !!!
187       \let\@end@alignbox\relax
188     \else\if #2b\relax
189       \let\@begin@alignbox\vtop %%% !!!
190       \let\@end@alignbox\relax
191     \else
192       \let\@begin@alignbox\vcenter
193       \let\@end@alignbox\relax
194     \fi\fi
195   \else
196     \if #2t\relax
197        \let\@begin@alignbox\vtop
198        \let\@end@alignbox\relax
199     \else\if #2b\relax
200        \let\@begin@alignbox\vbox
201        \let\@end@alignbox\relax
202     \else
203        \let\@begin@alignbox\vcenter
204        \let\@end@alignbox\relax
205     \fi\fi
206   \fi\fi
207 \fi\fi%
208 }
209
210 %%% caption
211 \newbox\@floatbox
212 \newdimen\floatwidth
213 \newdimen\floatheight
214 \newdimen\floatruletick \floatruletick=0.4pt
215 \newdimen\captionfloatsep \captionfloatsep=10pt
216 \def\caption@dir{Z}
217 \let\captiondir\relax
218 \newdimen\captionwidth \captionwidth\z@
219 \def\caption@posa{Z}
220 \def\caption@posb{Z}
221 \newbox\@captionbox
222 \def\captionfontsetup{\normalfont\normalsize}
223 \def\layoutfloat{\@ifnextchar(%)
224    {\X@layoutfloat}{\X@layoutfloat(-5\p@,-5\p@)}}
225 \def\X@layoutfloat(#1,#2){\@ifnextchar[%]
226    {\@layoutfloat(#1,#2)}{\@layoutfloat(#1,#2)[c]}}
227 \long\def\@layoutfloat(#1,#2)[#3]#4{%
228   \setbox\z@\hbox{#4}%
229   \floatwidth=#1 \floatheight=#2 \edef\float@pos{#3}%
230   \ifdim\floatwidth<\z@
231      \floatwidth\ltjgetwd\z@\floatruletick\z@
232   \fi
233   \ifdim\floatheight<\z@
234      \floatheight\ltjgetht\z@\advance\floatheight\ltjgetdp\z@\relax
235      \floatruletick\z@
236   \fi
237   \setbox\@floatbox\vbox to\floatheight{\offinterlineskip
238     \hrule width\floatwidth height\floatruletick depth\z@
239     \vss\hbox to\floatwidth{%
240       \vrule width\floatruletick height\floatheight depth\z@
241       \hss\vbox to\floatheight{\hsize\floatwidth\vss#4\vss}\hss
242       \vrule width\floatruletick height\floatheight depth\z@
243     }\hrule width\floatwidth height\floatruletick depth\z@}}
244 \def\DeclareLayoutCaption#1<#2>(#3)[#4#5]{%
245   \expandafter
246   \ifx\csname #1@layoutcaption\endcsname\relax \else
247     \@latex@info{Redeclaring capiton layout setting of '#1'}%
248   \fi
249   \expandafter
250   \gdef\csname #1@layoutcaption\endcsname{%
251      \if Z\caption@dir\def\caption@dir{#2}\fi
252      \ifdim\captionwidth=\z@ \captionwidth=#3\relax\fi
253      \if Z\caption@posa\def\caption@posa{#4}\fi
254      \if Z\caption@posb\def\caption@posb{#5}\fi}}
255 \@onlypreamble\DeclareLayoutCaption
256 \DeclareLayoutCaption{figure}<y>(.8\linewidth)[cd]
257 \DeclareLayoutCaption{table}<y>(.8\linewidth)[cu]
258 \def\layoutcaption{\def\caption@dir{Z}\captionwidth\z@
259   \def\caption@posa{Z}\def\caption@posb{Z}%
260   \@ifnextchar<\X@layoutcaption{%
261     \@ifnextchar(\@ilayoutcaption{%
262       \@ifnextchar[\@iilayoutcaption\relax}}}
263 \def\X@layoutcaption<#1>{\def\caption@dir{#1}%
264   \@ifnextchar(\@ilayoutcaption{%
265     \@ifnextchar[\@iilayoutcaption\relax}}
266 \def\@ilayoutcaption(#1){\setlength\captionwidth{#1}%
267   \@ifnextchar[{\@iilayoutcaption}{\relax}}
268 \def\@iilayoutcaption[#1#2]{%
269   \def\caption@posa{#1}\def\caption@posb{#2}}
270 \def\pcaption{\refstepcounter\@captype \@dblarg{\@pcaption\@captype}}
271 \long\def\@pcaption#1[#2]#3{%
272   \addcontentsline{\csname ext@#1\endcsname}{#1}{%
273     \protect\numberline{\csname the#1\endcsname}{\ignorespaces#2}}%
274   \ifvoid\@floatbox
275      \latex@error{Use with `\protect\layoutfloat'.}\@eha
276   \fi
277   \make@pcaptionbox{#3}%
278   \@pboxswfalse
279   \setbox\@tempboxa\vbox{\hbox to\hsize{\if l\float@pos\else\hss\fi
280     \if l\caption@posb\box\@captionbox\kern\captionfloatsep\fi
281     \if t\caption@posa\vtop
282     \else\if b\caption@posa\vbox
283     \else\ifmmode\vcenter \else\@pboxswtrue $\vcenter \fi\fi\fi
284     {\if u\caption@posb\box\@captionbox\kern\captionfloatsep\fi
285      \unvbox\@floatbox
286      \if d\caption@posb\kern\captionfloatsep\box\@captionbox\fi}%
287     \if r\caption@posb\kern\captionfloatsep\box\@captionbox\fi
288     \if@pboxsw \m@th$\fi \if r\float@pos\else\hss\fi}}%
289   \par\vskip.25\baselineskip
290   \box\@tempboxa}
291 \def\make@pcaptionbox#1{%
292   \expandafter
293   \ifx\csname\@captype @layoutcaption\endcsname\relax
294      \@latex@warning{Default caption layout of `\@captype' unknown.}%
295        \def\caption@dir{Z}\captionwidth\z@
296        \def\caption@posa{Z}\def\caption@posb{Z}%
297   \else
298      \csname \@captype @layoutcaption\endcsname
299   \fi
300   \@tempswafalse
301   % \@tempswa: 基本組の組方向とキャプションの組方向が直交するか?
302   \if y\caption@dir \let\captiondir\yoko
303     \ifodd\ltjgetparameter{direction}\relax\@tempswatrue\fi
304   \else\if z\caption@dir \let\captiondir\relax
305     \ifnum\ltjgetparameter{direction}=3\relax\let\captiondir\utod\fi
306   \else\if d\caption@dir \let\captiondir\dtou
307     \ifodd\ltjgetparameter{direction}\else\@tempswatrue\fi
308   \else\if u\caption@dir \let\captiondir\utod
309     \ifodd\ltjgetparameter{direction}\else\@tempswatrue\fi
310   \else\if t\caption@dir \let\captiondir\tate
311     \ifodd\ltjgetparameter{direction}\else\@tempswatrue\fi
312   \fi\fi\fi\fi\fi
313   \setbox0\hbox{\hbox{\captiondir
314      \captionfontsetup\parindent\z@\inhibitglue
315      \csname fnum@\@captype\endcsname  #1}}%"
316   \if@tempswa\@tempdima\ltjgetht0\relax\else\@tempdima\ltjgetwd0\relax\fi
317   \ifdim\@tempdima>\captionwidth \@tempdima\captionwidth \fi
318   \@pboxswfalse
319   \setbox0\hbox{%
320     \if u\caption@posb\vbox
321     \else\if d\caption@posb\vbox
322     \else\if t\caption@posa\vtop
323     \else\if b\caption@posa\vbox
324     \else\ifmmode\vcenter\else\@pboxswtrue $\vcenter\fi
325     \fi\fi\fi\fi
326     {\hsize\@tempdima\kern\z@
327     \vbox{\captiondir\hsize\@tempdima
328       \captionfontsetup\parindent\z@\inhibitglue
329       \csname fnum@\@captype\endcsname  #1}\kern\z@
330     }\if@pboxsw \m@th$\fi}%
331   \let\to@captionboxwidth\relax
332   \if l\caption@posb \else\if r\caption@posb\else
333   \def\to@captionboxwidth{to\floatwidth}\fi\fi
334   \setbox\@captionbox\hbox\to@captionboxwidth{%
335      \if t\caption@posa\else\hss\fi
336      \unhbox0\relax
337      \if b\caption@posa\else\hss\fi}}
338
339 %%% minipage and parbox
340 \def\minipage{\@ifnextchar<%>
341    {\X@minipage}{\X@minipage<Z>}}
342 \def\X@minipage<#1>{\@ifnextchar[%]
343    {\@iminipage<#1>}{\@iiiminipage<#1>{c}\relax[s]}}
344 \def\@iminipage<#1>[#2]{\@ifnextchar[%]
345    {\@iiminipage<#1>{#2}}{\@iiiminipage<#1>{#2}\relax[s]}}
346 \def\@iiminipage<#1>#2[#3]{\@ifnextchar[%]
347    {\@iiiminipage<#1>{#2}{#3}}{\@iiiminipage<#1>{#2}{#3}[#2]}}
348 \def\@iiiminipage<#1>#2#3[#4]#5{%
349   \leavevmode\bgroup
350   \setlength\@tempdima{#5}%
351   \def\@mpargs{<#1>{#2}{#3}[#4]{#5}}%
352   \let\box@dir\relax
353   \if #1z\relax
354     \ifnum\ltjgetparameter{direction}=3\relax
355       \let\box@dir\utod
356     \fi
357   \else
358     \if #1y\relax     \let\box@dir\yoko
359     \else\if #1t\relax\let\box@dir\tate
360     \else\if #1d\relax\let\box@dir\dtou
361     \else\if #1u\relax\let\box@dir\utod
362     \fi\fi\fi\fi
363   \fi
364   \ifx\box@dir\relax
365     \ifcase\ltjgetparameter{direction}\relax
366        \or   \let\box@dir\dtou
367        \or\or\let\box@dir\tate
368        \or   \let\box@dir\yoko
369        \else \let\box@dir\utod
370     \fi
371   \fi
372   \setbox\@tempboxa\vbox\bgroup\box@dir
373     \adjustbaseline
374     \color@begingroup
375       \hsize\@tempdima
376       \textwidth\hsize \columnwidth\hsize
377       \@parboxrestore
378       \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}%
379       \c@mpfootnote\z@
380       \let\@footnotetext\@mpfootnotetext
381       \let\@listdepth\@mplistdepth \@mplistdepth\z@
382       \@minipagerestore
383       \@setminipage}
384 \def\endminipage{%
385     \par
386     \unskip
387     \ifvoid\@mpfootins\else
388       \vskip\skip\@mpfootins
389       \normalcolor
390       \footnoterule
391       \unvbox\@mpfootins
392     \fi
393     \@minipagefalse   %% added 24 May 89
394   \color@endgroup
395   \egroup
396   \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}\egroup}
397 \DeclareRobustCommand\parbox{\@ifnextchar<%>
398    {\X@parbox}{\X@parbox<Z>}}
399 \def\X@parbox<#1>{\@ifnextchar[%]
400    {\@iparbox<#1>}{\@iiiparbox<#1>{c}\relax[s]}}
401 \def\@iparbox<#1>[#2]{\@ifnextchar[%]
402    {\@iiparbox<#1>{#2}}{\@iiiparbox<#1>{#2}\relax[s]}}
403 \def\@iiparbox<#1>#2[#3]{\@ifnextchar[%]%
404    {\@iiiparbox<#1>{#2}{#3}}{\@iiiparbox<#1>{#2}{#3}[#2]}}
405 \long\def\@iiiparbox<#1>#2#3[#4]#5#6{%
406   \leavevmode
407   \setlength\@tempdima{#5}%
408   \fork@parbox@option<#1>[#2]%
409   \@begin@tempboxa\vbox{\box@dir
410     \hsize\@tempdima\@parboxrestore\adjustbaseline#6\@@par}%
411     \ifx\relax#3\else
412       \setlength\@tempdimb{#3}%
413       \edef\@parboxto{to\the\@tempdimb}%
414     \fi
415     \@begin@parbox\@parboxto{\box@dir\adjustbaseline
416        \let\hss\vss\let\unhbox\unvbox
417        \csname bm@#4\endcsname}\@end@parbox
418   \@end@tempboxa}
419 % コミュニティ版では、アスキー版で不自然だった|\parbox|の箱と
420 % 周囲の本文との揃え位置を修正し、以下のように設計しました。
421 % \begin{itemize}
422 % \item 周囲の組方向が横組かつ組方向が|<y>|, |<z>|指定の場合
423 % \begin{itemize}
424 %   \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致
425 %   \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下)
426 %   \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致
427 % \end{itemize}
428 % \item 周囲の組方向が横組かつ組方向が|<t>|指定の場合
429 % \begin{itemize}
430 %   \item |[t]|指定のとき\\箱の上端が周囲の和文文字の高さと一致
431 %   \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下)
432 %   \item |[b]|指定のとき\\箱の下端が周囲の和文文字の深さと一致
433 % \end{itemize}
434 % \item 周囲の組方向が縦組かつ組方向が|<y>|指定の場合
435 % \begin{itemize}
436 %   \item |[t]|指定のとき\\箱の上端が周囲の和文文字の高さと一致
437 %   \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下)
438 %   \item |[b]|指定のとき\\箱の下端が周囲の和文文字の深さと一致
439 % \end{itemize}
440 % \item 周囲の組方向が縦組かつ組方向が|<t>|指定の場合
441 % \begin{itemize}
442 %   \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致
443 %   \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下)
444 %   \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致
445 % \end{itemize}
446 % \item 周囲の組方向が縦組かつ組方向が|<z>|指定の場合
447 %  [TODO] 未定!
448 %^^A \begin{itemize}
449 %^^A   \item |[t]|指定のとき\\箱の上端が周囲の和文ベースラインと一致
450 %^^A   \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下)
451 %^^A   \item |[b]|指定のとき\\箱の下端が周囲の和文ベースラインと一致
452 %^^A \end{itemize}
453 % \end{itemize}
454 \def\fork@parbox@option<#1>[#2]{%
455   \let\box@dir\relax
456   \if #1z\relax
457     \ifnum\ltjgetparameter{direction}=3\relax
458       \let\box@dir\utod
459     \fi
460   \else
461     \if #1y\relax     \let\box@dir\yoko
462     \else\if #1t\relax\let\box@dir\tate
463     \else\if #1d\relax\let\box@dir\dtou
464     \else\if #1u\relax\let\box@dir\utod
465     \fi\fi\fi\fi
466   \fi
467   \ifx\box@dir\relax
468     \ifcase\ltjgetparameter{direction}\relax
469        \or   \let\box@dir\dtou
470        \or\or\let\box@dir\tate
471        \or   \let\box@dir\yoko
472        \else \let\box@dir\utod
473     \fi
474   \fi
475 \ifnum\ltjgetparameter{direction}=4 % yoko
476   \ifx\box@dir\yoko
477     \if #2t\relax
478        \let\@begin@parbox\vtop
479        \let\@end@parbox\relax
480     \else\if #2b\relax
481        \let\@begin@parbox\vbox
482        \let\@end@parbox\relax
483     \else
484       \ifmmode
485         \let\@begin@parbox\vcenter\let\@end@parbox\relax
486       \else
487         \def\@begin@parbox{\null$\vcenter}%
488         \def\@end@parbox{\m@th$\null}%
489       \fi
490     \fi\fi
491   \else
492     \if #2t\relax
493        \def\@begin@parbox{\raise\cht\vtop\bgroup\kern\z@\vbox}%
494        \let\@end@parbox\egroup
495     \else\if #2b\relax
496        \def\@begin@parbox{\lower\cdp\vbox\bgroup\vbox}%
497        \def\@end@parbox{\kern\z@\egroup}%
498     \else
499       \ifmmode
500         \let\@begin@parbox\vcenter\let\@end@parbox\relax
501       \else
502         \def\@begin@parbox{\null$\vcenter}%
503         \def\@end@parbox{\m@th$\null}%
504       \fi
505     \fi\fi
506   \fi
507 \else\ifnum\ltjgetparameter{direction}=1 % dtou
508   \ifx\box@dir\yoko
509     \if #2t\relax
510        \def\@begin@parbox{\raise\cht\vtop\bgroup\kern\z@\vbox}%
511        \let\@end@parbox\egroup
512     \else\if #2b\relax
513        \def\@begin@parbox{\lower\cdp\vbox\bgroup\vbox}%
514        \def\@end@parbox{\kern\z@\egroup}%
515     \else
516       \ifmmode
517         \let\@begin@parbox\vcenter\let\@end@parbox\relax
518       \else
519         \def\@begin@parbox{\null$\vcenter}%
520         \def\@end@parbox{\m@th$\null}%
521       \fi
522     \fi\fi
523   \else\ifx\box@dir\dtou
524     \if #2t\relax
525        \let\@begin@parbox\vtop
526        \let\@end@parbox\relax
527     \else\if #2b\relax
528        \let\@begin@parbox\vbox
529        \let\@end@parbox\relax
530     \else
531       \ifmmode
532         \let\@begin@parbox\vcenter\let\@end@parbox\relax
533       \else
534         \def\@begin@parbox{\null$\vcenter}%
535         \def\@end@parbox{\m@th$\null}%
536       \fi
537     \fi\fi
538   \else % 180 度回転→vtop, vbox を入れ替える
539     \if #2t\relax
540        \let\@begin@parbox\vbox %%% !!!
541        \let\@end@parbox\relax
542     \else\if #2b\relax
543        \let\@begin@parbox\vtop %%% !!!
544        \let\@end@parbox\relax
545     \else
546       \ifmmode
547         \let\@begin@parbox\vcenter\let\@end@parbox\relax
548       \else
549         \def\@begin@parbox{\null$\vcenter}%
550         \def\@end@parbox{\m@th$\null}%
551       \fi
552     \fi\fi
553   \fi\fi
554 \else % tate, utod
555   \ifx\box@dir\yoko
556     \if #2t\relax
557       \def\@begin@parbox{\raise\cht\vtop\bgroup\kern\z@\vbox}%
558       \let\@end@parbox\egroup
559     \else\if #2b\relax
560       \def\@begin@parbox{\lower\cdp\vbox\bgroup\vbox}%
561       \def\@end@parbox{\kern\z@\egroup}%
562     \else
563       \ifmmode
564         \let\@begin@parbox\vcenter\let\@end@parbox\relax
565       \else
566         \def\@begin@parbox{\null$\vcenter}%
567         \def\@end@parbox{\m@th$\null}%
568       \fi
569     \fi\fi
570   \else\ifx\box@dir\dtou % 180 度回転→vtop, vbox を入れ替える
571     \if #2t\relax
572       \let\@begin@parbox\vbox %%% !!!
573       \let\@end@parbox\relax
574     \else\if #2b\relax
575       \let\@begin@parbox\vtop %%% !!!
576       \let\@end@parbox\relax
577     \else
578       \ifmmode
579         \let\@begin@parbox\vcenter\let\@end@parbox\relax
580       \else
581         \def\@begin@parbox{\null$\vcenter}%
582         \def\@end@parbox{\m@th$\null}%
583       \fi
584     \fi\fi
585   \else
586     \if #2t\relax
587        \let\@begin@parbox\vtop
588        \let\@end@parbox\relax
589     \else\if #2b\relax
590        \let\@begin@parbox\vbox
591        \let\@end@parbox\relax
592     \else
593       \ifmmode
594         \let\@begin@parbox\vcenter\let\@end@parbox\relax
595       \else
596         \def\@begin@parbox{\null$\vcenter}%
597         \def\@end@parbox{\m@th$\null}%
598       \fi
599     \fi\fi
600   \fi\fi
601 \fi\fi%
602 }
603
604 %%% pbox
605 \DeclareRobustCommand\pbox{\leavevmode\@ifnextchar<{\X@makePbox}{\X@makePbox<Z>}}
606 \def\X@makePbox<#1>{%
607   \@ifnextchar[{\@imakePbox<#1>}{\@imakePbox<#1>[-5\p@]}}
608 \def\@imakePbox<#1>[#2]{\@ifnextchar[%]
609   {\@iimakePbox<#1>{#2}}{\@iimakePbox<#1>{#2}[c]}}
610 \def\@iimakePbox<#1>#2[#3]#4{%
611   \bgroup\let\box@dir\relax
612   \if #1z\relax
613     \ifnum\ltjgetparameter{direction}=3 \relax
614       \let\box@dir\utod
615     \fi
616   \else
617     \if #1y\relax     \let\box@dir\yoko
618     \else\if #1t\relax\let\box@dir\tate
619     \else\if #1d\relax\let\box@dir\dtou
620     \else\if #1u\relax\let\box@dir\utod
621     \fi\fi\fi\fi
622   \fi
623   \ifx\box@dir\relax
624     \ifcase\ltjgetparameter{direction}
625        \or   \let\box@dir\dtou
626        \or\or\let\box@dir\tate
627        \or   \let\box@dir\yoko
628        \else \let\box@dir\utod
629     \fi
630   \fi
631     \setlength{\@tempdima}{#2}%
632     \ifdim\@tempdima<\z@ \hbox{\box@dir#4}\else
633     \hb@xt@\@tempdima{\box@dir
634                \if #3l\relax\else\hss\fi
635                #4\relax
636                \if #3r\relax\else\hss\fi}\fi\egroup}
637
638 %%% picture
639 \def\picture{\@ifnextchar<%>
640    {\X@picture}{\X@picture<Z>}}
641 \def\X@picture<#1>(#2,#3){\@ifnextchar(%)
642    {\@@picture<#1>(#2,#3)}{\@@picture<#1>(#2,#3)(0,0)}}
643 \newdimen\@picwd
644 \def\ltj@@pic@reset@blshift{%
645   \ltj@yablshift\z@\ltj@ykblshift\z@
646   \ltj@tablshift\z@\ltj@tkblshift\z@
647 }%
648 \def\@@picture<#1>(#2,#3)(#4,#5){%
649   \edef\ltj@@pic@save@blshift{%
650     \noexpand\ltj@yablshift\the\ltj@yablshift\noexpand\relax
651     \noexpand\ltj@ykblshift\the\ltj@ykblshift\noexpand\relax
652     \noexpand\ltj@tablshift\the\ltj@tablshift\noexpand\relax
653     \noexpand\ltj@tkblshift\the\ltj@tkblshift\noexpand\relax
654   }%
655   \bgroup\let\box@dir\relax
656   \if #1z\relax
657     \ifnum\ltjgetparameter{direction}=3 \relax
658       \let\box@dir\utod
659     \fi
660   \else
661     \if #1y\relax     \let\box@dir\yoko
662     \else\if #1t\relax\let\box@dir\tate
663     \else\if #1d\relax\let\box@dir\dtou
664     \else\if #1u\relax\let\box@dir\utod
665     \fi\fi\fi\fi
666   \fi
667   \ifx\box@dir\relax
668     \ifcase\ltjgetparameter{direction}
669        \or   \let\box@dir\dtou
670        \or\or\let\box@dir\tate
671        \or   \let\box@dir\yoko
672        \else \let\box@dir\utod
673     \fi
674   \fi
675   \@picwd=#2\unitlength \@picht=#3\unitlength
676   \setbox\@picbox\hbox to\@picwd\bgroup\box@dir
677   \hskip-#4\unitlength\lower#5\unitlength\hbox\bgroup
678   \ltj@@pic@reset@blshift
679   \ignorespaces}
680 \def\endpicture{%
681   \egroup\hss\egroup
682   \setbox0=\hbox{\box@dir%
683     \ltjsetht\@picbox\@picht \ltjsetdp\@picbox\z@
684   }%
685   \@tempswafalse
686   \ifnum\ltjgetparameter{direction}=3  \@tempswatrue\fi
687   \ifnum\ltjgetparameter{direction}=11  \@tempswatrue\fi
688   \if@tempswa
689     \ifx\box@dir\yoko % この場合だけ垂直位置補正が必要
690      \ltjsetht\@picbox\dimexpr\ltjgetht\@picbox+\ltjgetdp\@picbox\relax
691       \ltjsetdp\@picbox\z@
692     \fi
693   \fi
694   \mbox{\box\@picbox}%
695   \egroup\ltj@@pic@save@blshift}
696 \let\org@put\put
697 \def\put{\ltj@@pic@reset@blshift\org@put}
698 \let\org@line\line
699 \def\line{\ltj@@pic@reset@blshift\org@line}
700 \let\org@vector\vector
701 \def\vector{\ltj@@pic@reset@blshift\org@vector}
702 \let\org@dashbox\dashbox
703 \def\dashbox{\ltj@@pic@reset@blshift\org@dashbox}
704 \let\org@oval\oval
705 \def\oval{\ltj@@pic@reset@blshift\org@oval}
706 \let\org@circle\circle
707 \def\circle{\ltj@@pic@reset@blshift\org@circle}
708
709 %%% rensuji
710 \newif\ifnot@advanceline
711 \newskip\rensujiskip
712 \rensujiskip=0.25\chs plus.25\zw minus.25\zw
713 \DeclareRobustCommand\rensuji{%
714   \@ifstar{\not@advancelinetrue\@rensuji}{\@rensuji}}
715 \def\@rensuji{\@ifnextchar[{\@@rensuji}{\@@rensuji[c]}}
716 \def\@@rensuji[#1]#2{%
717   \ifvmode\leavevmode\fi
718   \ifnum\ltjgetparameter{direction}=4\relax\hbox{#2}\else
719   \hskip\rensujiskip
720   \setbox\tw@\hbox{漢}% 「あ」では仮名書体使用時がまずそう
721   \@tempdimb\ltjgetht\tw@ \advance\@tempdimb\ltjgetdp\tw@
722   \ifnot@advanceline\not@advancelinefalse\else
723     \setbox\z@\hbox{\yoko#2}%
724     \@tempdima\ltjgetht\z@ \advance\@tempdima\ltjgetdp\z@
725     \ifnum\ltjgetparameter{direction}=1\relax
726       % 周囲が dtou の場合には,高さ \ltjgetht\tw@, 深さ \ltjgetdp\tw@ のボックスを基準としている.
727       \if #1c\relax\vrule \@width \z@ \@height\dimexpr.5\@tempdima+.5\ltjgetht\tw@-.5\ltjgetdp\tw@
728                           \@depth\dimexpr.5\@tempdima-.5\ltjgetht\tw@+.5\ltjgetdp\tw@
729       \else\if #1l\relax\vrule\@width \z@\@height\ltjgetht\tw@ \@depth\dimexpr\@tempdima-\ltjgetht\tw@
730       \else\vrule\@width \z@ \@height\dimexpr\@tempdima-\ltjgetdp\tw@ \@depth\ltjgetdp\tw@
731       \fi\fi
732     \else
733       % 周囲が tate, utod の場合も同じ
734       \if #1c\relax\vrule \@width \z@ \@height\dimexpr.5\@tempdima+.5\ltjgetht\tw@-.5\ltjgetdp\tw@
735                           \@depth\dimexpr.5\@tempdima-.5\ltjgetht\tw@+.5\ltjgetdp\tw@
736       \else\if #1r\relax\vrule\@width \z@\@height\ltjgetht\tw@ \@depth\dimexpr\@tempdima-\ltjgetht\tw@
737       \else\vrule\@width \z@ \@height\dimexpr\@tempdima-\ltjgetdp\tw@ \@depth\ltjgetdp\tw@
738       \fi\fi
739     \fi
740   \fi
741   \ifnum\ltjgetparameter{direction}=1\relax
742     \if #1c\relax\hbox to\@tempdimb{\yoko\hss#2\hss\kern-\ltjgetdp\tw@}%
743     \else\if #1r\relax\vbox{\hbox to\@tempdimb{\yoko\hss#2\kern-\ltjgetdp\tw@}}%
744     \else\lower\ltjgetdp\tw@\vtop{\hbox to\@tempdimb{\yoko#2\hss}}%
745     \fi\fi
746   \else
747     \if #1c\relax\raise\dimexpr.5\@tempdimb-\ltjgetdp\tw@
748         \hbox to\@tempdimb{\yoko \hss#2\hss}%
749     \else\if #1r\relax\raise\dimexpr.5\@tempdimb-\ltjgetdp\tw@
750         \vbox{\hbox to\@tempdimb{\yoko\hss#2}}%
751     \else\raise\dimexpr.5\@tempdimb-\ltjgetdp\tw@
752          \vtop{\hbox to\@tempdimb{\yoko #2\hss}}%
753     \fi\fi
754   \fi
755   \hskip\rensujiskip
756 \fi}
757 \let\Rensuji\rensuji
758 \let\prensuji\rensuji
759
760 %%% kanji
761 \def\Kanji#1{\expandafter\@Kanji\csname c@#1\endcsname}
762 \def\@Kanji#1{\kansuji #1}
763 \def\kanji{\ifnum\ltjgetparameter{direction}=3 \expandafter\kansuji\fi}
764
765 %%% bou
766 %%%
767 \def\boutenchar{\char\euc"A1A2}%"
768 \def\bou#1{\ifvmode\leavevmode\fi\@bou#1\end}
769 \def\@bou#1{%
770   \ifx#1\end \let\next=\relax
771   \else
772     \ifnum\ltjgetparameter{direction}=3\relax
773       \hbox to\z@{\vbox to\z@{\boxmaxdepth\maxdimen
774         \vss\moveleft0.2\zw\hbox{\yoko\boutenchar}\nointerlineskip
775         \hbox{\char\euc"A1A1}}\hss}\nobreak#1\relax
776     \else
777       \hbox to\z@{\vbox to\z@{\boxmaxdepth\maxdimen
778         \vss\moveleft-0.2\zw\hbox{\boutenchar}\nointerlineskip
779         \hbox{\char\euc"A1A1}}\hss}\nobreak#1\relax
780     \fi
781     \let\next=\@bou
782   \fi\next}
783
784 %%% kasen
785 \def\kasen#1{%
786   \ifnum\ltjgetparameter{direction}=3\relax
787     \setbox\z@\hbox{#1}\leavevmode\raise.7\zw
788     \hbox to\z@{\vrule\@width\wd\z@ \@depth\z@ \@height.4\p@\hss}%
789     \box\z@
790   \else\underline{#1}\fi}
791
792 %%% references
793 \def\@eqnnum{{\reset@font\rmfamily \normalcolor
794   \ifnum\ltjgetparameter{direction}=11\raise.25\zh\hbox{\yoko(\theequation)}%
795   \else (\theequation)\fi}}
796 \def\@thecounter#1{\noexpand\rensuji{\noexpand\arabic{#1}}}
797 \def\@thmcounter#1{\noexpand\rensuji{\noexpand\arabic{#1}}}
798
799 %% Compatibility with array package
800
801 \def\ltj@lltjext@patch@array{%
802   \patchcmd{\@tabular}{\hbox\bgroup}{%
803         \hbox\bgroup\ltj@ext@dir=\ltjgetparameter{direction}}{}{}
804   \pretocmd{\array}%
805         {\ltj@ext@dir=\ltjgetparameter{direction}\relax}{}{}
806   \def\@startpbox##1{\bgroup
807    \box@dir\adjustbaseline%%% これを追加
808    \setlength\hsize{##1}\@arrayparboxrestore
809      \everypar{%
810         \vrule \@height \ltjgetht\@arstrutbox \@width \z@
811         \everypar{}}%
812      }
813   \def\@tabarray{\@ifnextchar<\p@tabarray{\p@tabarray<z>}}
814   \def\p@array<##1>[##2]##3{%
815     \let\box@dir\relax
816     \if ##1z\relax
817       \ifnum\ltj@ext@dir=3\relax
818         \let\box@dir\utod\@tempcnta=\zstrutbox
819       \fi
820     \else
821       \if ##1y\relax
822         \let\box@dir\yoko\@tempcnta=\ystrutbox
823       \else\if ##1t\relax
824         \let\box@dir\tate\@tempcnta=\tstrutbox
825       \else\if ##1d\relax
826          \let\box@dir\dtou\@tempcnta=\dstrutbox
827       \else\if ##1u\relax
828          \let\box@dir\utod\@tempcnta=\zstrutbox
829       \fi\fi\fi\fi
830     \fi
831     \ifx\box@dir\relax
832       \ifcase\ltj@ext@dir
833          \or   \let\box@dir\dtou\@tempcnta=\dstrutbox% dtou
834          \or\or\let\box@dir\tate\@tempcnta=\tstrutbox% tate
835          \or   \let\box@dir\yoko\@tempcnta=\ystrutbox% yoko
836          \else \let\box@dir\utod\@tempcnta=\zstrutbox% utod
837       \fi
838     \fi
839     \setbox \@arstrutbox \hbox{\box@dir\vrule
840                \@height \arraystretch
841                  \dimexpr \ltjgetht\@tempcnta+\extrarowheight\relax
842                \@depth \arraystretch \ltjgetdp \@tempcnta
843                \@width \z@}%
844     \fork@array@option<##1>[##2]%
845     \begingroup
846     \@mkpream{##3}%
847     \xdef\@preamble{\ialign \noexpand \@halignto
848                     \bgroup \tabskip \z@skip \@arstrut \@preamble
849                             \tabskip \z@ \cr}%
850     \endgroup
851     \@arrayleft
852     \@begin@alignbox\bgroup\box@dir\adjustbaseline
853       \let\par\@empty
854       \let\@sharp####\let\protect\relax
855       \let\\\@arraycr\let\tabularnewline\\\let\par\@empty
856      \lineskip\z@skip\baselineskip\z@skip\@preamble}
857   \def\endarray{\crcr\egroup\egroup\@end@alignbox\@arrayright}
858 }
859
860 \@ifpackageloaded{array}{%
861   \expandafter\let\csname tabular*\endcsname=\ltj@lltjext@orig@tabularS
862   \let\tabular=\ltj@lltjext@orig@tabular
863   \let\array=\ltj@lltjext@orig@array
864   \ltj@lltjext@patch@array
865 }{%
866   \let\ltj@lltjext@orig@tabularS\relax
867   \let\ltj@lltjext@orig@tabular\relax
868   \let\ltj@lltjext@orig@array\relax
869   \RequirePackage{filehook,etoolbox}
870   \AtEndOfPackageFile{array}{\ltj@lltjext@patch@array}
871 }
872
873 %%%%%%%%%%%%%%%% LuaTeX-ja original
874
875 \define@key[ltj]{japaram}{autouprightnum}{%      %COUNT
876   \ltj@@set@stack{AURN}{0}{10000}\z@#1 }
877
878 \endinput