[LaTeX]綺麗な下付きルビを出力
小学生相手の文章を書くならともかく,TeXで作るような文章には普通はあまりルビなんて使いませんが,でもどうしても読んでもらえなさそうな難しい漢字なんかには,後ろにカッコ書きで読み方を書くよりはルビを振ったほうがかっこいいよね。
普通の漢字の上に付けるルビは,大抵の日本語LaTeX環境に入っている,okumacro.sty
を使って,プリアンブルに
1 |
\usepackage{okumacro} |
と書き,ルビを振りたいところで,
1 |
\ruby{漢字}{ルビ} |
下付きルビがほしい
普通漢字の読み仮名が欲しいときは,漢字の上にルビを振りますが,たとえば補足説明をする時など,文字の下側にルビを振りたくなることがあります。探していたら下のサイトが見つかりました。
上のサイトからの引用をすると(画像です)
これをプリアンブルに書けば,下付きルビを出力するコマンド \uruby
が使えるようになります。
1 2 |
\ruby{殺伐}{さつばつ}とした\ruby{TL}{タイムライン}に\ruby{颯爽}{さっそう}と現れた\par \uruby{殺伐}{さつばつ}とした\uruby{TL}{タイムライン}に\uruby{颯爽}{さっそう}と現れた |
しかしながら,多少問題点があります。例えば,ルビの文字数が親文字の数以下のとき,
1 2 |
\ruby{亜米利加}{アメリカ} \ruby{百舌鳥}{もず}\par \uruby{亜米利加}{アメリカ} \uruby{百舌鳥}{もず} |
このように,\ruby
と\uruby
でルビの位置が異なります。どちらかと言えば,\ruby
の位置のほうが綺麗。
また,\Huge
のように,本文中で文字のサイズを変更したとき,
1 2 3 |
\Huge \ruby{殺伐}{さつばつ}とした\ruby{TL}{タイムライン}に\ruby{颯爽}{さっそう}と現れた\par \uruby{殺伐}{さつばつ}とした\uruby{TL}{タイムライン}に\uruby{颯爽}{さっそう}と現れた |
\ruby
では親文字の大きさに合わせて,ルビの文字の大きさも変更してくれますが,\uruby
では残念なことになってしまっています。
自分で作った
insomniaさんの\uruby
を参考にしながら,okumacro.sty
の\ruby
をベースに,\uruby
コマンドを作り直しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
%下付ルビ \makeatletter \providecommand{\rubyfamily}{} \def\kanjistrut{\vrule \@height0.88zw \@depth0.12zw \@width\z@} \newcommand\uruby[3][0.2zw]{% \leavevmode \dimen1=#1\relax \dimen3=\f@size\p@ \setbox1=\hbox{#2}% \setbox3=\hbox{\rubyfamily\fontsize{0.5\dimen3}{0pt}\selectfont #3}% \ifdim\dimen1=\z@ \ifdim\wd1>\wd3 \dimen1=\wd1 \else \dimen1=\wd3 \fi \else \ifdim\dimen1<\wd1 \dimen1=\wd1 \fi \fi \hbox to \dimen1{\kanjistrut\hfill\unhbox1\hfill}% \dimen4=\ht3 \advance\dimen4 \dp3 \advance\dimen4 #1\relax% \kern-\dimen1\raise-\dimen4\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 }% }\hskip\kanjiskip\relax }% } \makeatother |
これをプリアンブルに書いておけば,
1 2 |
\ruby{亜米利加}{アメリカ} \ruby{百舌鳥}{もず}\par \uruby{亜米利加}{アメリカ} \uruby{百舌鳥}{もず} |
1 2 3 |
\Huge \ruby{殺伐}{さつばつ}とした\ruby{TL}{タイムライン}に\ruby{颯爽}{さっそう}と現れた\par \uruby{殺伐}{さつばつ}とした\uruby{TL}{タイムライン}に\uruby{颯爽}{さっそう}と現れた |
振り仮名の文字の大きさについては,\ruby
と同じ挙動です。ただ,親文字のアルファベットの単語の前後に,\ruby
ではスペースが入っていますが,\uruby
では入りませんね。これは,上にルビを置くときと下にルビを置くときで,文字の配置方法が全く異なるためですが,うまい解決方法が見つからないのでとりあえずこれで良しとさせてください。コメントでいいやり方を教えていただけると助かります。
なお,このページで紹介した\uruby
のコードはご自由に使っていただいて構いません。