8角形のボックス(経過と質問)

名前: 山下
日時: 2006-10-09 19:32:08
IPアドレス: 220.209.23.*

45191で8角形のボックスについて尋ねさせて頂きました. 北見けんさんみなもさんから頂いたアドバイスを元に少し調整してみたのですが, よく分からない現象が生じてしまいました.カラクリや対策がお分かりの方,よろしくアドバイスをお願い致します. なお,末尾のファイルには tascmac.sty の読み込みがありますが,これは比較に挙げた itembox を呼ぶためのもので, 熊澤さんから頂いたものです. 本題です.itembox のマクロを元に, (1)みなもさんから頂いたアドバイスの修正(※1の行)と四隅を斜線にするための修正(※3の行). 文章を入れる箱 \scb@x の左上,右上に斜線を引く部分です. しかし,これだけでは箱と上線が密着しすぎてしまうため, (2)箱 \scb@x の上に高さ 10pt の箱の積み上げ(※2の行). 以上の事柄を実施しました. 結果としてはそれなりのものができたと思うのですが,分からない点が2つ生じました. (あ)箱の中身が1行の場合と複数行の場合では,先頭行の上と上枠線の間隔が, 1行の場合の方が広くなり,揃いません.itembox の場合は揃っています. 文章箱に単に 10pt をかさ上げしただけのつもりなので, なぜ中の行数により間隔が違ってしまうのかが分かりません. 行数に関わらず間隔を同じにする方法はないものでしょうか. (い)※3の行にある \@slboxu{10} や \@slboxd{10} の数字を 9.8 などにすると,斜線が消えてしまいます. もしかすると line で出す線の長さは 10pt 以上でなければいけないなどの制約があるのかと思います. この認識でよろしいのでしょうか. 若干斜線が縦横の枠線を超えるようですので,短くしたいと思いました. 以上,よろしくお願い致します. \documentclass{jarticle} \usepackage{tascmac} \makeatletter \newdimen\@savetbaselineshift \newdimen\@saveybaselineshift \font\@ascgrp=ascgrp \newbox\scb@x \newbox\scscb@x \newdimen\@bw\newbox\@nbox\newbox\@nbody %% itembox 改め octagon \def\@hobox#1#2#3{\hbox to\@scw{\@oval(#3,#3)[#1]\hfil\@oval(#3,#3)[#2]}} %% ↑のコマンドを参考に↓の2コマンドを作成 \def\@slboxu#1{\hbox to\@scw{\llap{\raisebox{10pt}[0pt][0pt]{\line(-1,-1){#1}}}\hfil% \rlap{\raisebox{10pt}[0pt][0pt]{\line(1,-1){#1}}}}} % ※1 \def\@slboxd#1{\hbox to\@scw{\line(-1,1){#1}\hfil\rlap{\line(1,1){#1}}}} % \def\@vrf@#1#2{\vskip#1\leaders\vrule width#2\vfil\vskip#1} \newdimen\@itemh\newtoks\@iboxpos\newbox\@iboxstr \def\@hleader{\leaders\hrule height .8pt\hfil} \def\octagon{\@ifnextchar[{\@octagon}{\@octagon[c]}} \def\@octagon[#1]#2{% \@savetbaselineshift\tbaselineshift\tbaselineshift\z@ \par\vspace{.3\baselineskip}% \setbox\@iboxstr=\hbox{#2}\@itemh\ht\@iboxstr\advance\@itemh\dp\@iboxstr \vspace{.5\@itemh}\bgroup\@scw\linewidth \advance\@scw-20pt\@iboxpos={#1}% %\setbox\scb@x=\vbox{\vbox to10pt{}\hbox to\@scw\bgroup\begin{minipage}{\@scw}% この設定を変更し, \setbox\scb@x=\vbox\bgroup\hbox{\rule{0pt}{10pt}}\hbox to\@scw\bgroup\begin{minipage}{\@scw}% ※2:字を入れるボックスの上に空箱を載せた \tbaselineshift\@savetbaselineshift% \vspace*{.5\@itemh}}% \def\endoctagon{\end{minipage}\egroup\egroup% \setbox\scscb@x=\hbox to\linewidth{\hfil\vbox{\offinterlineskip% \thicklines\setlength{\unitlength}{1pt}% \hbox to\@scw{\if l\the\@iboxpos\else\@hleader\fi \space\vbox to.8pt{\vss\hbox{\box\@iboxstr}\vss}% \space\if r\the\@iboxpos\else \@hleader\fi}\kern9.6pt %\@hobox{tl}{tr}{20}\kern-10pt\box\scb@x\@hobox{bl}{br}{20}% %% ↑の1行を参考に↓の1行を作成 \@slboxu{10}\kern-10pt\box\scb@x\@slboxd{10}% ※3 %% \@slboxu{10}や\@slboxd{10}の数字を9.8などにすると斜線が出ない \kern-.8pt\hrule height.8pt}\hfil}\dimen0=\ht\scscb@x \noindent\hbox to\linewidth{\hbox to.6pt{\vbox to\dimen0{\@vrf@{10pt}{.8pt}}% \hss}\box\scscb@x\hbox to.6pt{\hss\vbox to\dimen0{\@vrf@{10pt}{.9pt}}}% \hss}\egroup} \makeatother \begin{document} \section{実験} \begin{octagon}[c]{1行の例} 一同礼 \end{octagon} \begin{itembox}[c]{1行の例} 一同礼 \end{itembox} \begin{octagon}[c]{2行の例} 挨拶 \\ 一同礼 \end{octagon} \begin{itembox}[c]{2行の例} 挨拶 \\ 一同礼 \end{itembox} \begin{octagon}[c]{3行の例} 挨拶 \\ 一同礼 \\ 着席 \end{octagon} \begin{itembox}[c]{3行の例} 挨拶 \\ 一同礼 \\ 着席 \end{itembox} \end{document}

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます。適宜改行を入れてください)