X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Flltjext.sty;h=8238e7b77d2eee87c0ac2f012f03735fe33453e0;hb=4ab839e5f18b0f5e6d9b27a2b78cf51f4670815a;hp=2e48f319973b2b188583529826cf2513936ac0d4;hpb=d9a08ce258f8feb39473c6b0a0b6aa93eca2fa23;p=luatex-ja%2Fluatexja.git diff --git a/src/lltjext.sty b/src/lltjext.sty index 2e48f31..8238e7b 100644 --- a/src/lltjext.sty +++ b/src/lltjext.sty @@ -3,9 +3,9 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjext}[2017/03/28 v1.2f-ltj-5 Macros for vertical writing] +\ProvidesPackage{lltjext}[2017/07/17 v1.2g-ltj-6 Macros for vertical writing] \RequirePackage{luatexja} - +\newcount\ltj@ext@dir {\catcode`\*=11 \global\let\ltj@lltjext@orig@tabularS=\tabular* }% @@ -15,19 +15,20 @@ %%% array and tabular \def\array{\let\@acol\@arrayacol \let\@classz\@arrayclassz \let\@classiv\@arrayclassiv - \let\\\@arraycr\let\@halignto\@empty\X@tabarray} + \let\\\@arraycr\let\@halignto\@empty + \ltj@ext@dir=\ltjgetparameter{direction}\relax\X@tabarray} \def\tabular{\let\@halignto\@empty\X@tabular} \@namedef{tabular*}{\@ifnextchar<%> - {\@stabular}{\@stabular}} + {\@stabular}{\@stabular}} \def\X@tabarray{\@ifnextchar<%> - {\p@tabarray}{\p@tabarray}} + {\p@tabarray}{\p@tabarray}} \def\X@tabular{\@ifnextchar<%> - {\p@tabular}{\p@tabular}} + {\p@tabular}{\p@tabular}} \def\@stabular<#1>#2{% \setlength\dimen@{#2}% \edef\@halignto{to\the\dimen@}\p@tabular<#1>} \def\p@tabular<#1>{\leavevmode \hbox \bgroup - \count@=\ltjgetparameter{direction}$\let\@acol\@tabacol + \ltj@ext@dir=\ltjgetparameter{direction}$\let\@acol\@tabacol \let\@classz\@tabclassz \let\@classiv\@tabclassiv \let\\\@tabularcr\p@tabarray<#1>} \def\p@tabarray<#1>{\m@th\@ifnextchar[%] @@ -36,7 +37,7 @@ \def\p@array<#1>[#2]#3{% \let\box@dir\relax \if #1z\relax - \ifnum\count@=3\relax + \ifnum\ltj@ext@dir=3\relax \let\box@dir\utod\@tempcnta=\zstrutbox \fi \else @@ -51,7 +52,7 @@ \fi\fi\fi\fi \fi \ifx\box@dir\relax - \ifcase\count@ + \ifcase\ltj@ext@dir \or \let\box@dir\dtou\@tempcnta=\dstrutbox% dtou \or\or\let\box@dir\tate\@tempcnta=\tstrutbox% tate \or \let\box@dir\yoko\@tempcnta=\ystrutbox% yoko @@ -65,7 +66,8 @@ \fork@array@option<#1>[#2]% \@mkpream{#3}\edef\@preamble{\ialign \noexpand\@halignto \bgroup\@arstrut \@preamble \tabskip\z@skip \cr}% - \let\tabularnewline\\% + \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox + \let\tabularnewline\\% \@begin@alignbox\bgroup\box@dir\adjustbaseline \let\par\@empty \let\@sharp##\let\protect\relax @@ -78,35 +80,33 @@ % \begin{itemize} % \item 周囲の組方向が横組かつ組方向が||, ||指定の場合 % \begin{itemize} -% \item |[t]|指定のとき、\\一行目のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置) -% \item |[c]|指定のとき、\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) -% \item |[b]|指定のとき、\\最終行のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置) +% \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置) +% \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) +% \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置) % \end{itemize} % \item 周囲の組方向が横組かつ組方向が||指定の場合 % \begin{itemize} -% \item |[t]|指定のとき、\\表組の上端が周囲の和文ベースラインと一致 -% \item |[c]|指定のとき、\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) -% \item |[b]|指定のとき、\\表組の下端が周囲の和文ベースラインと一致 +% \item |[t]|指定のとき\\表組の上端が周囲の和文ベースラインと一致 +% \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) +% \item |[b]|指定のとき\\表組の下端が周囲の和文ベースラインと一致 % \end{itemize} % \item 周囲の組方向が縦組かつ組方向が||指定の場合 % \begin{itemize} -% \item |[t]|指定のとき、\\表組の上端が周囲の和文ベースラインと一致 -% \item |[c]|指定のとき、\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) -% \item |[b]|指定のとき、\\表組の下端が周囲の和文ベースラインと一致 +% \item |[t]|指定のとき\\表組の上端が周囲の和文ベースラインと一致 +% \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) +% \item |[b]|指定のとき\\表組の下端が周囲の和文ベースラインと一致 % \end{itemize} % \item 周囲の組方向が縦組かつ組方向が||指定の場合 % \begin{itemize} -% \item |[t]|指定のとき、\\一行目のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置) -% \item |[c]|指定のとき、\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) -% \item |[b]|指定のとき、\\最終行のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置) +% \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置) +% \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) +% \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致(罫線の場合は和文ベースラインの位置) % \end{itemize} % \item 周囲の組方向が縦組かつ組方向が||指定の場合 -% [TODO] 未定! -%^^A \begin{itemize} -%^^A \item |[t]|指定のとき、\\表組の上端が周囲の和文ベースラインと一致 -%^^A \item |[c]|指定のとき、\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) -%^^A \item |[b]|指定のとき、\\表組の下端が周囲の和文ベースラインと一致 -%^^A \end{itemize} +% \begin{itemize} +% \item |[t]|指定のとき\\一行目の欧文ベースラインが周囲のそれと一致 +% \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) +% \item |[b]|指定のとき\\最終行の欧文ベースラインが周囲のそれと一致 % \end{itemize} \def\fork@array@option<#1>[#2]{% \ifnum\ltjgetparameter{direction}=4 % yoko @@ -124,10 +124,10 @@ \else \if #2t\relax \def\@begin@alignbox{\vtop\bgroup\kern\z@\vbox}% - \let\@end@alignbox\egroup% + \let\@end@alignbox\egroup \else\if #2b\relax - \let\@begin@alignbox\vbox - \let\@end@alignbox\relax + \def\@begin@alignbox{\vbox\bgroup\vbox}% + \def\@end@alignbox{\kern\z@\egroup}% \else \let\@begin@alignbox\vcenter \let\@end@alignbox\relax @@ -137,10 +137,10 @@ \ifx\box@dir\yoko \if #2t\relax \def\@begin@alignbox{\vtop\bgroup\kern\z@\vbox}% - \def\@end@alignbox{\egroup}% + \let\@end@alignbox\egroup \else\if #2b\relax - \let\@begin@alignbox\vbox - \let\@end@alignbox\relax + \def\@begin@alignbox{\vbox\bgroup\vbox}% + \def\@end@alignbox{\kern\z@\egroup}% \else \let\@begin@alignbox\vcenter \let\@end@alignbox\relax @@ -172,7 +172,7 @@ \ifx\box@dir\yoko \if #2t\relax \def\@begin@alignbox{\vtop\bgroup\kern\z@\vbox}% - \def\@end@alignbox{\egroup}% + \let\@end@alignbox\egroup \else\if #2b\relax \def\@begin@alignbox{\vbox\bgroup\vbox}% \def\@end@alignbox{\kern\z@\egroup}% @@ -191,7 +191,7 @@ \let\@begin@alignbox\vcenter \let\@end@alignbox\relax \fi\fi - \else + \else\ifx\box@dir\tate \if #2t\relax \let\@begin@alignbox\vtop \let\@end@alignbox\relax @@ -202,7 +202,20 @@ \let\@begin@alignbox\vcenter \let\@end@alignbox\relax \fi\fi - \fi\fi + \else % utod + \if #2t\relax + \def\@begin@alignbox{\lower\dimexpr + \ltjgetparameter{talbaselineshift}-\ltjgetparameter{yalbaselineshift}\vtop} + \let\@end@alignbox\relax + \else\if #2b\relax + \def\@begin@alignbox{\lower\dimexpr + \ltjgetparameter{talbaselineshift}-\ltjgetparameter{yalbaselineshift}\vbox} + \let\@end@alignbox\relax + \else + \let\@begin@alignbox\vcenter + \let\@end@alignbox\relax + \fi\fi + \fi\fi\fi \fi\fi% } @@ -415,6 +428,41 @@ \let\hss\vss\let\unhbox\unvbox \csname bm@#4\endcsname}\@end@parbox \@end@tempboxa} +% コミュニティ版では、アスキー版で不自然だった|\parbox|の箱と +% 周囲の本文との揃え位置を修正し、以下のように設計しました。 +% \begin{itemize} +% \item 周囲の組方向が横組かつ組方向が||, ||指定の場合 +% \begin{itemize} +% \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致 +% \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) +% \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致 +% \end{itemize} +% \item 周囲の組方向が横組かつ組方向が||指定の場合 +% \begin{itemize} +% \item |[t]|指定のとき\\箱の上端が周囲の和文文字の高さと一致 +% \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) +% \item |[b]|指定のとき\\箱の下端が周囲の和文文字の深さと一致 +% \end{itemize} +% \item 周囲の組方向が縦組かつ組方向が||指定の場合 +% \begin{itemize} +% \item |[t]|指定のとき\\箱の上端が周囲の和文文字の高さと一致 +% \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) +% \item |[b]|指定のとき\\箱の下端が周囲の和文文字の深さと一致 +% \end{itemize} +% \item 周囲の組方向が縦組かつ組方向が||指定の場合 +% \begin{itemize} +% \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致 +% \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) +% \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致 +% \end{itemize} +% \item 周囲の組方向が縦組かつ組方向が||指定の場合 +% [TODO] 未定! +%^^A \begin{itemize} +%^^A \item |[t]|指定のとき\\箱の上端が周囲の和文ベースラインと一致 +%^^A \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る(欧文ベースラインシフトの影響下) +%^^A \item |[b]|指定のとき\\箱の下端が周囲の和文ベースラインと一致 +%^^A \end{itemize} +% \end{itemize} \def\fork@parbox@option<#1>[#2]{% \let\box@dir\relax \if #1z\relax @@ -436,7 +484,6 @@ \else \let\box@dir\utod \fi \fi -%%% now almost same as \fork@array@option \ifnum\ltjgetparameter{direction}=4 % yoko \ifx\box@dir\yoko \if #2t\relax @@ -455,11 +502,11 @@ \fi\fi \else \if #2t\relax - \def\@begin@parbox{\vtop\bgroup\kern\z@\vbox}% - \def\@end@parbox{\egroup}% + \def\@begin@parbox{\raise\cht\vtop\bgroup\kern\z@\vbox}% + \let\@end@parbox\egroup \else\if #2b\relax - \let\@begin@parbox\vbox - \let\@end@parbox\relax + \def\@begin@parbox{\lower\cdp\vbox\bgroup\vbox}% + \def\@end@parbox{\kern\z@\egroup}% \else \ifmmode \let\@begin@parbox\vcenter\let\@end@parbox\relax @@ -472,11 +519,11 @@ \else\ifnum\ltjgetparameter{direction}=1 % dtou \ifx\box@dir\yoko \if #2t\relax - \def\@begin@parbox{\vtop\bgroup\kern\z@\vbox} - \def\@end@parbox{\egroup} + \def\@begin@parbox{\raise\cht\vtop\bgroup\kern\z@\vbox}% + \let\@end@parbox\egroup \else\if #2b\relax - \let\@begin@parbox\vbox - \let\@end@parbox\relax + \def\@begin@parbox{\lower\cdp\vbox\bgroup\vbox}% + \def\@end@parbox{\kern\z@\egroup}% \else \ifmmode \let\@begin@parbox\vcenter\let\@end@parbox\relax @@ -519,10 +566,10 @@ \else % tate, utod \ifx\box@dir\yoko \if #2t\relax - \def\@begin@parbox{\vtop\bgroup\kern\z@\vbox}% - \def\@end@parbox{\egroup}% + \def\@begin@parbox{\raise\cht\vtop\bgroup\kern\z@\vbox}% + \let\@end@parbox\egroup \else\if #2b\relax - \def\@begin@parbox{\vbox\bgroup\vbox}% + \def\@begin@parbox{\lower\cdp\vbox\bgroup\vbox}% \def\@end@parbox{\kern\z@\egroup}% \else \ifmmode @@ -532,6 +579,21 @@ \def\@end@parbox{\m@th$\null}% \fi \fi\fi + \else\ifx\box@dir\tate + \if #2t\relax + \let\@begin@parbox\vtop + \let\@end@parbox\relax + \else\if #2b\relax + \let\@begin@parbox\vbox + \let\@end@parbox\relax + \else + \ifmmode + \let\@begin@parbox\vcenter\let\@end@parbox\relax + \else + \def\@begin@parbox{\null$\vcenter}% + \def\@end@parbox{\m@th$\null}% + \fi + \fi\fi \else\ifx\box@dir\dtou % 180 度回転→vtop, vbox を入れ替える \if #2t\relax \let\@begin@parbox\vbox %%% !!! @@ -547,13 +609,13 @@ \def\@end@parbox{\m@th$\null}% \fi \fi\fi - \else + \else % \utod \if #2t\relax - \let\@begin@parbox\vtop - \let\@end@parbox\relax + \def\@begin@parbox{\raise\cht\vtop\bgroup\kern\z@\vtop}% + \let\@end@parbox\egroup \else\if #2b\relax - \let\@begin@parbox\vbox - \let\@end@parbox\relax + \def\@begin@parbox{\lower\cdp\vbox\bgroup\kern\z@\vbox}% + \let\@end@parbox\egroup \else \ifmmode \let\@begin@parbox\vcenter\let\@end@parbox\relax @@ -562,12 +624,12 @@ \def\@end@parbox{\m@th$\null}% \fi \fi\fi - \fi\fi + \fi\fi\fi \fi\fi% } %%% pbox -\def\pbox{\leavevmode\@ifnextchar<{\X@makePbox}{\X@makePbox}} +\DeclareRobustCommand\pbox{\leavevmode\@ifnextchar<{\X@makePbox}{\X@makePbox}} \def\X@makePbox<#1>{% \@ifnextchar[{\@imakePbox<#1>}{\@imakePbox<#1>[-5\p@]}} \def\@imakePbox<#1>[#2]{\@ifnextchar[%] @@ -593,8 +655,9 @@ \else \let\box@dir\utod \fi \fi - \ifdim #2 <\z@ \hbox{\box@dir#4}\else - \hbox to#2{\box@dir + \setlength{\@tempdima}{#2}% + \ifdim\@tempdima<\z@ \hbox{\box@dir#4}\else + \hb@xt@\@tempdima{\box@dir \if #3l\relax\else\hss\fi #4\relax \if #3r\relax\else\hss\fi}\fi\egroup} @@ -764,19 +827,21 @@ \def\ltj@lltjext@patch@array{% \patchcmd{\@tabular}{\hbox\bgroup}{% - \hbox\bgroup\count@=\ltjgetparameter{direction}}{}{} + \hbox\bgroup\ltj@ext@dir=\ltjgetparameter{direction}}{}{} + \pretocmd{\array}% + {\ltj@ext@dir=\ltjgetparameter{direction}\relax}{}{} \def\@startpbox##1{\bgroup \box@dir\adjustbaseline%%% これを追加 - \hsize=##1\@arrayparboxrestore + \setlength\hsize{##1}\@arrayparboxrestore \everypar{% \vrule \@height \ltjgetht\@arstrutbox \@width \z@ \everypar{}}% } - \def\@tabarray{\@ifnextchar<\p@tabarray{\p@tabarray}} + \def\@tabarray{\@ifnextchar<\p@tabarray{\p@tabarray}} \def\p@array<##1>[##2]##3{% \let\box@dir\relax \if ##1z\relax - \ifnum\count@=3\relax + \ifnum\ltj@ext@dir=3\relax \let\box@dir\utod\@tempcnta=\zstrutbox \fi \else @@ -791,7 +856,7 @@ \fi\fi\fi\fi \fi \ifx\box@dir\relax - \ifcase\count@ + \ifcase\ltj@ext@dir \or \let\box@dir\dtou\@tempcnta=\dstrutbox% dtou \or\or\let\box@dir\tate\@tempcnta=\tstrutbox% tate \or \let\box@dir\yoko\@tempcnta=\ystrutbox% yoko