TeXの記憶(95) — 文字を均等に配置したい(2)

文字を均等に割付けするマクロです。TeXの記憶(54) — 文字を均等に配置したいのマクロを文字数に従って呼び出しています。

この例では、5文字以内なら5文字の幅に、7文字以内なら7文字の幅に均等に割付しています。

1108

均等割は編集者によって好みがあるようで、この例のように2段階を指定する人もいれば、2文字のときだけ間に1文字開けるという人もいます。

均等割は日本語ならいいのですが、「cat」のようにラテン文字の場合はどうすればいいのでしょうか。「catとは」を均等割にする場合「cat」と「とは」が同じ間隔でいいのかなど、ちょっと面倒です。ここではすべて全角文字の場合だけ考えました。

マクロは単に文字の幅を取得して条件分岐しているだけです。ほんとうは\dimen0を\@tempdimaのように置き換えたほうがいいかもしれません。

\newcommand{\kintou}[2]{\leavevmode\hbox to #1{%
    \kanjiskip\z@ plus 1fill minus 1fill\xkanjiskip\kanjiskip #2\hfil}}

\def\Kintou#1{%
  \setbox0=\hbox{□}\dimen0=\wd0
  \setbox\@tempboxa\hbox{#1}%
  \ifdim\wd\@tempboxa>1.1\dimen0
  \ifdim\wd\@tempboxa<3.5\dimen0\kintou{5\dimen0}{#1}\else
  \ifdim\wd\@tempboxa<6.5\dimen0\kintou{7\dimen0}{#1}\else
  #1\fi\fi
  \else#1\fi}
\obeylines

\Kintou{12}
\Kintou{123}
\Kintou{1234}
\Kintou{12345}
\Kintou{123456}
\Kintou{1234567}

コメント