tcolorboxまたはitemboxのなかに図と文章を意図通りに配置したい

tcolorboxまたはitemboxのなかに図と文章を意図通りに配置したい

- 高橋 圭 の投稿
返信数: 8
tcolorboxまたはitemboxの枠中にTikzで作成した図と短い文章を入れたいと思っています。

図の配置は右寄せで、左側には上下の位置としては図の真ん中あたりから横書きの短い文章を入れたいと思っています。
以下は私が作ったコードです。

\documentclass[dvipdfmx,uplatex]{jsarticle}
\usepackage{tikz,okumacro,amsmath,amssymb,wrapfig,tikz,ascmac,emathMw,tcolorbox}
\usetikzlibrary{intersections,calc}

\pagestyle{empty}
\setlength{\oddsidemargin}{-10.4mm}
\setlength{\topmargin}{-10.4mm}
\setlength{\textwidth}{\paperwidth}
\addtolength{\textwidth}{-3cm}
\setlength{\lineskip}{5pt}
\setlength{\lineskiplimit}{5mm}

\begin{document}
\begin{tcolorbox}[colframe=black!80,colback=white,colbacktitle=black!80,
coltitle=white,title=面積を求めよう]
\begin{wrapfigure}{r}{4cm}
\begin{tikzpicture}[xscale=0.4,yscale=0.2]
\draw (-4,-4) rectangle (4,4);
\end{wrapfigure}
右の図の面積を求めよ。
\end{tcolorbox}
\end{document}

上のコードで実行すると図が枠内にうまく入らず、vspaceを「右の図の面積を求めよ」の後に入れると図は枠内に入るが、文章を図の真ん中辺りから始められません。
どのように対処すればよろしいでしょうか。宜しくお願いします。
高橋 圭 への返信

Re: tcolorboxまたはitemboxのなかに図と文章を意図通りに配置したい

- 和田 勇 の投稿
wrapfig の話だとして調べてみました。図の大きさと短い文書という限定。
#もっと素敵な解はあると思いますが

#\begin{tcolorbox} に height=3cm のオプション追加しました
#\enf{tikzpicture} を補いました

■空白を挿入して改行効果を出す(試行錯誤が必要なのがイマイチ)

 \!\par\!\par 右の図の面積を求めよ。
とか
 \!\vspace{1zw}\par 右の図の面積を求めよ。

 1zw は適宜置き換えてください。
和田 勇 への返信

Re: tcolorboxまたはitemboxのなかに図と文章を意図通りに配置したい

- 高橋 圭 の投稿
和田様
実行の結果、思っていた通りの出力となりました。
\vspaceの使い方が見たことない形で勉強になりました。
回答ありがとうございました。

高橋 圭 への返信

Re: tcolorboxまたはitemboxのなかに図と文章を意図通りに配置したい

- みなも の投稿
\vcenter を使うのはどうでしょう。
要するに数式の天地センター揃え機能を利用するわけです。

\begin{tcolorbox}[colframe=black!80,colback=white,colbacktitle=black!80,
coltitle=white,title=面積を求めよう]
$\vcenter{\hsize=8cm \linewidth=\hsize
  右の図の面積を求めよ。}$\hfill
$\vcenter{\hsize=4cm
  \begin{tikzpicture}[xscale=0.4,yscale=0.2]
    \draw (-4,-4) rectangle (4,4);
  \end{tikzpicture}}$
\end{tcolorbox}

こんな感じで。

\vcenter を使い慣れていないなら,tabular 環境で

\begin{tcolorbox}[colframe=black!80,colback=white,colbacktitle=black!80,
coltitle=white,title=面積を求めよう]
\begin{tabular}{p{8cm}}
  右の図の面積を求めよ。
\end{tabular}\hfill
\begin{tabular}{c}
  \begin{tikzpicture}[xscale=0.4,yscale=0.2]
    \draw (-4,-4) rectangle (4,4);
  \end{tikzpicture}
\end{tabular}
\end{tcolorbox}

でも同等のはず。(tabular 環境(天地オプション無し)は $\vcenter{}$ に展開されるはず)。
ちなみに「8cm」のところは文章の段落幅です。
1 行に収まるなら {p{8cm}} のところは {c} とかでもいいと思います。
みなも への返信

Re: tcolorboxまたはitemboxのなかに図と文章を意図通りに配置したい

- 高橋 圭 の投稿
みなも様 回答ありがとうございます。
2つのコードとも実行してみましたが、エラーが出てしまいPDFが出力されませんでした。
\vcenterの方のエラーはよくわかりませんでした。
\tabularの方のエラーとしては、「右の図の面積を求めよ。」は\tabularの適切な引数ではないというものでした。

高橋 圭 への返信

Re: tcolorboxまたはitemboxのなかに図と文章を意図通りに配置したい

- みなも の投稿
あれ,おかしいですね。
こちらではちゃんとタイプセットされるのですが。

とりあえず,高橋さんが元々上げてくださった例の
\begin{document} と \end{document} の間
を,昨日こちらが挙げた例に,まるっとコピペで差し替えて試していただけますか。
(コピペするのが重要。初めて使うコマンド類は打ち間違ったり引数を落としたりしやすいので。)

あと

> 「右の図の面積を求めよ。」は\tabularの適切な引数ではない

から判断すると,tabular環境の引数の {p{8cm}} が抜けているように感じるのですが,その辺はどうでしょう。

上記で試してダメだったら,ソースと log ファイルをレスに貼り付けていただけますか。
みなも への返信

Re: tcolorboxまたはitemboxのなかに図と文章を意図通りに配置したい

- 高橋 圭 の投稿
みなも様 回答ありがとうございます。
みなも様に提案して頂いたコードをコピーアンドペーストにより実行したところ二つのコードともタイプセットがうまく実行されました。
自分の不手際のためお手数をおかけしてすみませんでした。

もし時間があれば教えて頂きたいのですが、tabular環境を使って行っていることは1行1列の表を離して配置しているということになるのでしょうか。
また、\vcenter環境の\linewidthは削除しても出力は変わりませんでしたが、\hsizeを削除すると出力が変わってしまいました。\hsizeというのは何を決めているパラメータなのでしょうか。
宜しくお願いします。
高橋 圭 への返信

Re: tcolorboxまたはitemboxのなかに図と文章を意図通りに配置したい

- みなも の投稿
うまく行ったようで何よりです。

> tabular環境を使って行っていることは1行1列の表を離して配置しているということになるのでしょうか。

はいそうです。
tabular というと文字通り「表」というイメージが強いのですが,「文字列や段落のブロック化」「ブロック化したものの配置」など,表以外にもいろいろと使えます。

> \hsizeというのは何を決めているパラメータなのでしょうか。

簡単に言ってしまえば,TeX で段落幅を決めているパラメータです。ここでは \vcenter 内の段落幅を決めるのに使っています。

\hsize と \linewidth の違いですが,LaTeX では enumerate 環境のように「番号をつけてその番号の分だけ段落幅を短く」といった,段落幅の変更がこまめに起こり,さらに enumerate 環境の中で enumerate 環境を使ったときのように,短くした段落をさらに短くして環境を抜けたら 1 段階だけ幅を戻す,というようなテクニカルなこともしていますので,\hsize ではなく \linewidth で段落幅を管理しています。
もっとも,段落幅を決めるパラメータはあくまで \hsize ですので,必要があれば(マクロや環境が内部で) \linewidth を \hsize に代入する感じです。(実際には \parshape コマンドを介した代入?がほとんどですが。)

というわけで,段落の幅を短く設定するには \hsize を指定しなければならないのですが,\vcenter などで \hsize を設定しても,enumerate 環境などは \hsize ではなく \linewidth の方を読み込んで,それを \hsize に再代入しちゃうため,\vcenter の中で enumerate 環境などを使うときには\linewidth も短くしておかないと段落幅が大きくなっちゃう,というわけです。(逆に enumerate 環境などを使わない短文だけなら \linewidth を設定する必要はありません。)
みなも への返信

Re: tcolorboxまたはitemboxのなかに図と文章を意図通りに配置したい

- 高橋 圭 の投稿
返事が遅くなり申し訳ありません。
tabular環境は表だけだと思っていましたが、色々な応用があるのですね。勉強になります。
\hsizeの方は私には難しかったですが、他所で調べながら完全ではないと思いますが理解できました。
親質問の回答のみならず、追加の質問にも回答頂きありがとうございました。
また、お願いいたします。