Closed aminophen closed 8 years ago
\ruby の縦書き対応は
\def\kanjistrut{\iftdir
\vrule \@height0.5zw \@depth0.5zw \@width\z@
\else
\vrule \@height0.88zw \@depth0.12zw \@width\z@
\fi}
として、レジスタ上書き回避は
\newcommand{\ruby}[3][0zw]{%
\leavevmode
% \dimen1=#1\relax %%%%%%% ここから…
\dimen3=\f@size\p@
\setbox1=\hbox{#2}%
\setbox3=\hbox{\rubyfamily\fontsize{0.5\dimen3}{0pt}\selectfont #3}%
\dimen1=#1\relax %%%%%%% ここへ!
\ifdim\dimen1=\z@
\ifdim\wd1>\wd3 \dimen1=\wd1 \else \dimen1=\wd3 \fi
… 中略 …
\hbox to \dimen1{\kanjistrut\hfil\unhbox1\hfil}}}\hskip\kanjiskip\relax}
にするだけでかなり安全になりますね。いかがでしょうか?
和文ゴースト処理によって以下の問題を解決できるという Issue もありました。
\kanjiskip
は入るが,前には \kanjiskip
が入らない。\xkanjiskip
が入らない。レジスタ上書き回避
もしかして \dimen3 も同じ危険があるのかもしれない…?
レジスタ上書き回避:もしかして \dimen3 も同じ危険があるのかもしれない…?
\dimen1 は上記の場所変更で解決しますが、\dimen3 に対策するには \newdimen で名前を付けるしか方法はないですね。\dimen3 は \dimen1 ほど登場しないでしょうし、あまり重要でない気がしてきました。\dimen1 の対処だけでいいかもしれません。
和文ゴースト処理によって以下の問題を解決
良さそうなのですが、副作用がないかどうかの確かめかたが判っていません。(いまのままだと変、なのはたしかですが…)
TODO は Issue にということで、\ruby の縦書き対応とレジスタ上書きの危険について: