okumacroを参考に、上と下にルビをつけるコマンドを作ろうと考えています。

\providecommand{\rubyfamily}{}
\def\kanjistrut{\vrule \@height0.88zw \@depth0.12zw \@width\z@}
\newcommand{\ouruby}[4][0zw]{%
\leavevmode
\dimen1=#1\relax
\dimen3=\f@size\p@
\dimen4=\f@size\p@
\setbox1=\hbox{#2}%
\setbox3=\hbox{\rubyfamily\fontsize{0.5\dimen3}{0pt}\selectfont #3}%
\setbox4=\hbox{\rubyfamily\fontsize{0.5\dimen4}{0pt}\selectfont #4}%
\ifdim\dimen1=\z@
\ifdim\wd1>\wd3 \dimen1=\wd1 \else \dimen1=\wd3 \fi
\fi
\ifdim\dimen1=\z@
\ifdim\wd1>\wd4 \dimen1=\wd1 \else \dimen1=\wd4 \fi
\fi
\hbox{%
\kanjiskip=0pt plus 2fil
\xkanjiskip=0pt plus 2fil
\vbox{%
\hbox to \dimen1{\rubyfamily
\fontsize{0.5\dimen3}{0pt}\selectfont \kanjistrut
\ifdim\dimen1<\wd3
\hss\unhbox3\hss
\else
\hfil\unhbox3\hfil
\fi
}%
つづく