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を使った囲みの周りをもう一度囲むだけと言ってしま […]