PSTricksを使った囲みで、見出しが2つ付いたタイプです。ずっと以前に作ったものです。
書籍の中で例題を表示するための囲みなので、マクロ名はreidaiです。
このマクロの中で「例題」の番号を設定して、囲み本体のマクロ\BoxINに値を渡しています。
2つの見出しのうち、左側の見出しは\BoxINの引き数で、右側の見出しは\reidaiMRtitleRとして定義しています。もともと1つの見出しのマクロを拡張したので、こんな形になってしまいました。
これだけ引き数が多くなると、PSTricksのように [ ] の中にパラメータを入れるほうがいいかもしれません。パッケージとして作るならそのほうが良いのでしょうが、その場しのぎの積み重ねでやり過ごしてしまいました。
\newcounter{reidaicnt}
\def\reidai#1{%
\stepcounter{reidaicnt}%
\protected@edef\@currentlabel{\thechapter.\arabic{reidaicnt}}
\BoxIN{1zw}{.3mm}{blue}{white}{3mm}{2mm}{3mm}{0mm}%
{{\bf 例題\thechapter.\arabic{reidaicnt}}}%
\gdef\reidaiMRtitleR{\bf #1}}
\def\endreidai{\endBoxSTR}
\newbox\Box@box % 中身を入れる箱
\newbox\Box@titlebox % 見出しを入れる箱
\newdimen\Box@Hsep % ワクから中身までの水平距離
\newdimen\Box@rule@wd \Box@rule@wd=0.15mm
\newdimen\Box@VTsep % ワク上部から中身までの距離
\newdimen\Box@VBsep % ワク下部から中身までの距離
\newdimen\Box@OVTsep % 上の行からワク上部までの距離
\newdimen\Box@OVBsep % ワク下部から下の行まで距離
\newdimen\Box@ht % 中身の高さ
\newdimen\Box@wd % 中身の深さ
\newdimen\keephsize
\newdimen\keeplinewidth
\newdimen\Box@offset
\newdimen\Box@tempA
\newdimen\Box@tempB
\newdimen\Box@tempC
% 本体
\def\BoxIN#1#2#3#4#5#6#7#8#9{\par\vskip#7
% 引数の設定
\Box@Hsep=#1
\Box@rule@wd=#2
\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@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}
\def\endBoxSTR{%
\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@rule@wd,fillstyle=solid,fillcolor=\Box@color]
(0,0)(\linewidth,\Box@ht)
\def\Box@titleback{%
\psframe[linestyle=none,fillstyle=solid,fillcolor=\Box@color]
(0,0)(\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 -.62mm
\rput[lb](1.5zw,\Box@tempA){\Box@titleback}
% 右側の見出し
\def\Box@titleRback{%
\setbox0=\hbox{\reidaiMRtitleR}\dimen0=\wd0\advance\dimen0 .8mm
\psframe[linestyle=none,fillstyle=solid,fillcolor=\Box@color]
(0,0)(\dimen0,0.1)}
\def\Box@titleR{%
\psframebox[linestyle=none,fillstyle=none,framesep=0mm]
{\reidaiMRtitleR}}%
\Box@tempB=\linewidth
\advance\Box@tempB -1.5zw
\setbox0=\hbox{\reidaiMRtitleR}%
\advance\Box@tempB -\wd0
\Box@tempA=\Box@ht \advance\Box@tempA -.82mm
% 見出しの上の部分を白にする
\Box@tempC=\Box@tempB
\advance\Box@tempC -.4mm
\rput[lb](\Box@tempC,\Box@tempA){\Box@titleRback}
% ワク内最下行とケイとのアキの補正
\advance\Box@VBsep -0.1mm
% 中身
\rput[lb](\Box@Hsep,\Box@VBsep){\box\Box@box}
% 見出し
\advance\Box@ht -.65\Box@offset
\rput[lb](1.5zw,\Box@ht){\Box@title}
\rput[lb](\Box@tempB,1.01\Box@ht){\reidaiMRtitleR}
\end{pspicture}\vskip\Box@OVBsep}
\setcounter{chapter}{1}
\begin{reidai}{この例題の見出し}
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□
\end{reidai}
コメント