前回、\hruleと\vruleで作った子持罫のPSTricks版です。TeXの記憶(13)—PSTricksで見出し付きの囲みを作るの手順とほとんど同じです。罫線を外側に重ねるだけです。ついでに見出しも付けました。マクロがなんだか長くなってしまいましたが。
PSTricksを使った方法は、私の場合はどれも同じです。
- ボックスの中に入れるテキストの幅境を\hsizeと\linewidthで設定
- \vboxを開始(\bgroup)
- その中でインデントを決めたり、必要ならば\mathindent設定
- 環境が終わったら、\egroupでボックスを閉じる
- ボックスの高さを求めて、その周囲に罫線を描画
- 罫線の領域の中にテキストの入ったボックスを書き出す
見出しに必要な手順は2つだけでした。
- 見出しが配置される領域に囲みの中の色の領域を重ねる
- 見出しを配置する
見出しの下にある罫線を隠すように適当な値を設定しています。見出しの下の罫線の隠し方(見た目)はいろいろあるかもしれませんが、罫線だけ隠してしまうのがいちばん自然かなと思います。
13Qに合わせた固定値なので、文字のサイズが変わるときには直さないといけないですね。12Qくらいだと、同じ値でも分からないかもしれません。
\usepackage{pstricks}
\usepackage{color}
...
\definecolor{iro1}{cmyk}{1,0,0,0}
\definecolor{iro2}{cmyk}{0,0,0,0.1}
\newdimen\Box@ht % 中身の高さ
\newdimen\Box@wd % 中身の幅
\newbox\Box@box % 中身の入るボックス
\newbox\Box@titlebox
\newdimen\Box@inrule@wd % 内側の罫線の太さ
\newdimen\Box@outrule@wd % 外側の罫線の太さ
\newdimen\Box@rulesep % 2つのケイ線の間隔
\newdimen\Box@Hsep % 内側の罫線と中のテキストまでの距離
\newdimen\Box@VTsep % ワク上部から中身まで
\newdimen\Box@VBsep % ワク下部から中身まで
\newdimen\Box@OVTsep % 上の行からワク上部まで
\newdimen\Box@OVBsep %ワク下部から下の行まで
\newdimen\Box@offset
% hsizeとlinewidthを保存しておく
\newdimen\keephsize
\newdimen\keeplinewidth
% 一時的な値の保存
\newdimen\Box@tempA
\newdimen\Box@tempB
\newdimen\Box@tempC
\def\komotiM#1{\BoxDdT{1zw}{.5mm}{iro1}{iro2}{3mm}{2mm}{4mm}{0mm}{#1}}
\def\endkomotiM{\endBoxDdT}
% BoxDdTの本体
% #1 左右のアキ
% #2 ワクの幅(無効)
% #3 ワクの色
% #4 中身の色
% #5 上のアキ(ワク内)
% #6 下のアキ(ワク内)
% #7 上のアキ(ワク外)
% #8 下のアキ(ワク外)
% #9 見出し
\def\BoxDdT#1#2#3#4#5#6#7#8#9{\par\vskip#7
% 引数の設定
\Box@Hsep=#1
\Box@outrule@wd=.3mm
\Box@inrule@wd=.1mm
\Box@rulesep=.5mm
\def\Box@rulecolor{#3}%
\def\Box@color{#4}%
\Box@VTsep=.2mm \advance\Box@VTsep #5
\Box@VBsep=.3mm \advance\Box@VBsep #6
\Box@OVBsep=#8
\setbox\Box@titlebox=\hbox{\hskip1mm{#9}\hskip1.2mm}%
% 箱の全体の幅から,アキと罫線の幅を引く
\Box@wd=\linewidth
\advance\Box@wd -2\Box@outrule@wd
\advance\Box@wd -2\Box@inrule@wd
\advance\Box@wd -2\Box@rulesep
\advance\Box@wd -2\Box@Hsep
% 元の値を保存
\keephsize=\hsize
\keeplinewidth=\linewidth
\hsize=\Box@wd \parindent=\z@
\linewidth=\hsize
% 箱を作る
\setbox\Box@box=\vbox\bgroup\parindent=1zw}
\def\endBoxDdT{%
\egroup
% 値の復元
\hsize=\keephsize
\linewidth=\keeplinewidth
% 箱の高さ = 中身+上下のアキ
\Box@ht=\ht\Box@box \advance\Box@ht \dp\Box@box
\advance\Box@ht \Box@VTsep \advance\Box@ht \Box@VBsep
% 箱の高さ += 見出しの高さ(ケイより下に出ている分)
\Box@offset=\ht\Box@titlebox \advance\Box@offset \dp\Box@titlebox
\advance\Box@ht .35\Box@offset % 割合は適当
% 描画
\begin{pspicture}(0,0)(\linewidth,\Box@ht)
% 外側のワク
\psframe[linestyle=solid,linecolor=\Box@rulecolor,
linewidth=\Box@outrule@wd,fillstyle=solid,fillcolor=\Box@color]
(0,0)(\linewidth,\Box@ht)
% 内側のワク
\Box@tempA=\Box@outrule@wd % 内側のワクの描画ポイント
\advance\Box@tempA \Box@rulesep
\Box@tempB=\linewidth % ワクの右端のポイント
\advance\Box@tempB -\Box@tempA
\Box@tempC=\Box@ht
\advance\Box@tempC -\Box@tempA
\psframe[linestyle=solid,linecolor=\Box@rulecolor,
linewidth=\Box@inrule@wd,fillstyle=none]
(\Box@tempA,\Box@tempA)(\Box@tempB,\Box@tempC)
% 見出しの地(ケイの内側)
\def\Box@titleback{%
\psframe[linestyle=none,fillstyle=solid,fillcolor=\Box@color]
(0,-.05)(\wd\Box@titlebox,0.1)}
\def\Box@title{%
\psframebox[linestyle=none,fillstyle=none,framesep=0mm]
{\box\Box@titlebox}}%
% 見出しの上の部分を白にする
\Box@tempA=\Box@ht \advance\Box@tempA -.82mm
\rput[lb](0.6,\Box@tempA){\Box@titleback}
% ワク内最下行とケイとのアキの補正
\advance\Box@VBsep -0.1mm
% 中身
\Box@tempA=\Box@rulesep
\advance\Box@tempA \Box@inrule@wd
\Box@tempB=\Box@Hsep
\advance\Box@tempB \Box@tempA
\Box@tempC=\Box@VBsep
\advance\Box@tempC \Box@tempA
\rput[lb](\Box@tempB,\Box@tempC){\box\Box@box}
% 見出し
\advance\Box@ht -.65\Box@offset
\rput[lb](0.6,\Box@ht){\Box@title}
\end{pspicture}\vskip\Box@OVBsep}
\begin{komotiM}{見出し}
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
\end{komotiM}
コメント