TeXの記憶(32) — 子持罫の囲みを\hruleと\vruleで作る

子持罫とは、太さが異なる2本の罫線に付けられた名前です。これをLaTeXで\hruleと\vruleで作ってみました。TeXの記憶(11)—hruleとvruleで作る囲みで作った\hruleと\vruleを使った囲みの周りをもう一度囲むだけと言ってしまえばそれだけなんですが。

0902

  • 手順は、内側のテキストの幅を求めて
  • テキストを\bx@inboxに入れる
  • ボックスの上下左右を罫線で囲む

\vbox{上の線
上下のアキ
\hbox{左の線 アキ 内側のテキスト アキ 右の線}
上下のアキ
右の線}

内側のボックスをこの手順で作ってから、こんどは、その内側のボックスに対して同じ手順を使って外側の罫線を付けています。

\vbox{上の線
上下のアキ
\hbox{左の線 アキ 罫線付きのボックス アキ 右の線}
上下のアキ
右の線}

\newbox\bx@inbox        % 内側のボックス
\newbox\bx@outbox       % 外側のボックス
\newdimen\bx@inrule@wd  % 内側の罫線の太さ
\newdimen\bx@outrule@wd % 外側の罫線の太さ
\newdimen\bx@rulesep    % 2つのケイ線の間隔
\newdimen\bx@Hsep       % 内側の罫線と中のテキストまでの距離
\newdimen\bx@wd         % 中のテキストの幅

\def\komoti{\par\vskip2mm
  \bx@rulesep=.5mm
  \bx@Hsep=2.7mm
  \bx@outrule@wd=.3mm
  \bx@inrule@wd=.1mm
  % 中のテキストの幅を求める:とりあえず\linewidth
  \bx@wd=\linewidth
  \advance\bx@wd -2\bx@outrule@wd % 外側の罫線の幅を引く
  \advance\bx@wd -2\bx@rulesep    % 罫線と罫線の間のスペースを引く
  \advance\bx@wd -2\bx@inrule@wd  % 内側の罫線の幅を引く
  \advance\bx@wd -2\bx@Hsep       % 内側の罫線とテキストとのスペースを引く
  \hsize=\bx@wd \parindent=\z@
  \linewidth=\hsize
  % \bgroupで環境を開いて
  \setbox\bx@inbox=\vbox\bgroup\parindent=\z@
  \vskip2.8mm}
\def\endkomoti{\vskip2.8mm
  \egroup % 環境を閉じる
  \setbox\bx@outbox=\vbox{\hrule\@height\bx@inrule@wd
    \hbox{\vrule\@width\bx@inrule@wd
      \hskip\bx@Hsep
      \box\bx@inbox
      \hskip\bx@Hsep
      \vrule\@width\bx@inrule@wd}%
    \hrule\@height\bx@inrule@wd}%
  \hbox{\vrule\@width\bx@outrule@wd\vbox{\hrule\@height\bx@outrule@wd
      \vskip\bx@rulesep
      \hbox{\hskip\bx@rulesep
        \box\bx@outbox
        \hskip\bx@rulesep}%
      \vskip\bx@rulesep
      \hrule\@height\bx@outrule@wd}\vrule\@width\bx@outrule@wd}}
\begin{komoti}
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
\end{komoti}

コメント