texjporg / jsclasses

Classes tailored for use with Japanese.
BSD 2-Clause "Simplified" License
60 stars 14 forks source link

okumacro の \ruby #32

Closed aminophen closed 8 years ago

aminophen commented 8 years ago

TODO は Issue にということで、\ruby の縦書き対応とレジスタ上書きの危険について:

aminophen commented 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}

にするだけでかなり安全になりますね。いかがでしょうか?

doraTeX commented 8 years ago

和文ゴースト処理によって以下の問題を解決できるという Issue もありました。

aminophen commented 8 years ago

レジスタ上書き回避

もしかして \dimen3 も同じ危険があるのかもしれない…?

aminophen commented 8 years ago

レジスタ上書き回避:もしかして \dimen3 も同じ危険があるのかもしれない…?

\dimen1 は上記の場所変更で解決しますが、\dimen3 に対策するには \newdimen で名前を付けるしか方法はないですね。\dimen3 は \dimen1 ほど登場しないでしょうし、あまり重要でない気がしてきました。\dimen1 の対処だけでいいかもしれません。

和文ゴースト処理によって以下の問題を解決

良さそうなのですが、副作用がないかどうかの確かめかたが判っていません。(いまのままだと変、なのはたしかですが…)

aminophen commented 8 years ago

34 で縦組対応とレジスタ上書き回避のコードを送りました(マージありがとうございます>奥村先生)。ゴーストのほうは doraTeX さんにお任せしようと思います。