TeXの囲みを\hruleと\vruleを使って作ってみました。
作り方は、中身の入ったboxを作り、\hruleと\vruleで囲むだけです。
このときに考えるのは、囲みの幅、上下左右のアキ、囲みの色、などです。
ここでは、囲みの幅を\linewidthにしました。\linewidthは、通常は\textwidthに、\enumerateなどの環境内では\linewidth <= \textwidthになっています。
\linewidth以外の値は変数にしてできるだけ流用できるようにしてみました。変数の数は7個です。
マクロの名前はとりあえず「BoxSSS」にしました。
\def\BoxSSS#1#2#3#4#5#6#7
変数の意味は次のようになっています。
#1 左右のアキ
#2 ワクの幅
#3 ワクの色
#4 上のアキ(ワク内)
#5 下のアキ(ワク内)
#6 上のアキ(ワク外)
#7 下のアキ(ワク外)
次のように使います。
\BoxSSS{1zw}{.6mm}{red}{.5mm}{.5mm}{1.5mm}{2mm}
...
\endBoxSSS
- 中身のbox(Box@box)の幅 = \linewidth – (ワクの罫線の幅 + 左右のアキ)となるように計算して、Box@boxを\vboxとして作成
- 中身は、\bgroupから\egroupまでの間で取得
- 中身をboxができたあとは、上下左右に罫線を追加
罫線の追加は
上下罫線を先に、
vbox=
\hrule
アキ
「中身のbox」
アキ
\hrule
となるように重ねます。
左右の罫線を加えるために、vboxを、こんどはhboxで囲って
hbox=
\vrule アキ「いま作ったvbox」アキ \vrule
となるように横に並べています。
このマクロだと変数が多すぎるので、実際に使うときには
もうひとつマクロを作って簡略化して使っています。
\def\waku{\BoxSSS{1zw}{.6mm}{red}{.5mm}{.5mm}{1.5mm}{2mm}}
\def\endwaku{\endBoxSSS}
\begin{waku}
...
\end{waku}
マクロは次のようになりました。
% 準備する変数など
% 中身を入れる箱
\newbox\Box@box
% ワクの幅
\newdimen\Box@rule@wd
% ワクから中身までの水平距離
\newdimen\Box@Hsep
%ワク上部から中身まで / ワク下部から中身までの距離
\newdimen\Box@VTsep
\newdimen\Box@VBsep
%上の行からワク上部まで / ワク下部から下の行まで距離
\newdimen\Box@OVTsep
\newdimen\Box@OVBsep
% 中身の高さと深さ
\newdimen\Box@ht
\newdimen\Box@wd
% 保存する値
\newdimen\keephsize
\newdimen\keeplinewidth
\def\BoxSSS#1#2#3#4#5#6#7{\par\vskip#6
% 引数の設定
\Box@Hsep=#1
\Box@rule@wd=#2
\def\Box@rulecolor{#3}%
\Box@VTsep=.2mm \advance\Box@VTsep #4
\Box@VBsep=.3mm \advance\Box@VBsep #5
\Box@OVBsep=#7
% 箱の全体の幅から,アキと罫線の幅を引く
\Box@wd=\linewidth
\advance\Box@wd -2\Box@rule@wd
\advance\Box@wd -2\Box@Hsep
% 元の値を保存
\keephsize=\hsize
\keeplinewidth=\linewidth
\hsize=\Box@wd \parindent=z@
\linewidth=\hsize
% 箱を作る
\setbox\Box@box=\vbox\bgroup
\parindent=1zw % ワク内の字下げ
% 上のアキ(ワク内)
\vskip\Box@VTsep}
\def\endBoxSSS{%
% 下のアキ(ワク内)
\vskip\Box@VBsep
\egroup
% 値の復元
\hsize=\keephsize
\linewidth=\keeplinewidth
% 箱の設定
\hbox{{\color{\Box@rulecolor}\vrule\@width\Box@rule@wd}%
\vbox{{\color{\Box@rulecolor}\hrule\@height\Box@rule@wd}%
\vskip\Box@VTsep
\hbox{\hskip\Box@Hsep
\box\Box@box
\hskip\Box@Hsep}%
\vskip\Box@VBsep
{\color{\Box@rulecolor}\hrule\@height\Box@rule@wd}}%
{\color{\Box@rulecolor}\vrule\@width\Box@rule@wd}}%
\nointerlineskip
\vskip\Box@OVBsep}
\def\waku{\BoxSSS{1zw}{.6mm}{red}{.5mm}{.5mm}{1.5mm}{2mm}}
\def\endwaku{\endBoxSSS}



コメント
[…] の罫線に付けられた名前です。これをLaTeXで\hruleと\vruleで作ってみました。TeXの記憶(11)—hruleとvruleで作る囲みで作った\hruleと\vruleを使った囲みの周りをもう一度囲むだけと言ってしま […]