Re: niceframeの縦幅の調整について

名前: .
日時: 2007-06-07 01:08:15
IPアドレス: 59.134.169.*

>>48232 niceframe パッケージによる \niceframe において, 枠の中身の高さが 10pt に満たない場合に枠の左右の罫線が欠ける というのは,\niceframe の“仕様”です. # 左右の罫線部分では高さ 10pt のボックスを \xleaders で並べているため, # そのようなことになります.なお,その高さ 10pt のボックスの中身 # (罫線の断片)はボックスの上下に 7pt ずつはみ出しているため, # \xleaders で並べたとしても罫線が途切れない…… というつもりのようです. \documentclass{article} \usepackage{niceframe} \begin{document} % %%% その場しのぎ %%% center 環境の上下に空きが入らないようにするか \centering を用い, %%% それに加えて枠の中身の高さを最低でも 10pt にします. \niceframe{% \noindent \begin{minipage}{\hsize} \begin{center} something\rule[-3pt]{0pt}{10pt} \end{center} \end{minipage}} \niceframe{% \centering something\rule[-3pt]{0pt}{10pt}} % %%% 本質的解決法 \makeatletter %%% 枠の中身の高さが小さいときへの対処を追加 \def\ltd@ublerulefill{% \ifdim\nicefr@meheight>10\p@ \xleaders\vbox to 10pt{\vss\hbox{\ding\char'144}\vss}\vfill \else \vbox to\nicefr@meheight{\vss\hbox{\ding\char'144}\vss}% \fi} \def\rtd@ublerulefill{% \ifdim\nicefr@meheight>10\p@ \xleaders\vbox to 10pt{\vss\hbox{\ding\char'145}\vss}\vfill \else \vbox to\nicefr@meheight{\vss\hbox{\ding\char'145}\vss}% \fi} %%% とりあえず,\ltd@ublerulefill,\rtd@ublerulefill を再定義するだけでも, %%% 今回の件は解決します(が,それだけで済ませる場合には,枠の中身の %%% center 環境の上下の空きを \vspace 等を用いて手動で詰めることになります). \def\niceframe{\@testopt\@niceframe\textwidth} \long\def\@niceframe[#1]#2{% \ifvmode \noindent \fi \begingroup \dimen@#1\relax \advance\dimen@-2\nicefr@mechar \setbox\z@\vbox{% \hsize\dimen@ \dimen@\parindent \@parboxrestore %%% このあたりの設定を行うのは, \@setminipage %%% minipage 類似の環境を作成する際のお約束. \parindent\dimen@ %%% このあたりは好みの問題 \fussy %%% \@parboxrestore では \parindent を 0pt に設定し, %%% \sloppy も実行されるので,ここではそれをキャンセル. #2% \ifvmode \vskip-\lastskip \fi}% \nicefr@meheight\ht\z@ \advance\nicefr@meheight\dp\z@ \nicefr@mewidth\wd\z@ \advance\nicefr@mewidth2\nicefr@mechar \vbox{% \offinterlineskip%%% added \hbox to\nicefr@mewidth{\ding\char'141\upd@ublerulefill\char'143}% \hbox to\nicefr@mewidth{% \vbox to\nicefr@meheight{\ltd@ublerulefill}% \hss\raise\dp\z@\box\z@\hss \vbox to\nicefr@meheight{\rtd@ublerulefill}}% \hbox to\nicefr@mewidth{\ding\char'146\dnd@ublerulefill\char'150}}% \@minipagefalse \endgroup} %%% \curlyframe などについても,枠の中身の取り扱いに関して %%% 上記の再定義と同様に再定義するとよいでしょう(が,ここでは省略します). \makeatother \niceframe{% \begin{center} something \end{center}} \end{document}

この書き込みへの返事:

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