自作ボックスのタイトル部分を改行できるようにしてみたい。

Re: 自作ボックスのタイトル部分を改行できるようにしてみたい。

- KK TeX の投稿
返信数: 3
和田さん、今回もありがとうございます。その条件分岐のアイデアは私にありませんでしたので、目から鱗です。

なるほど、確かにそのやり方でアキはなくなるようです。

いただいたアイデアをもとに私の方でも色々微調整してみまして、2段組に対応したものにしてみました。

\newlength{\myTitleLength}
\newcommand{\myPTBS}[3]{
\settowidth{\myTitleLength}{#2 #1}
\ifthenelse{\myTitleLength < \columnwidth}% .9\textwidth が必要かな
{% タイトルとサブタイトルの幅が一行に収まる時
\begin{ptbs}[#1]{#2}
\textgt{#3}
\end{ptbs}}
{% タイトルとサブタイトルの幅が一行の幅を超える時
\begin{ptbs}[\parbox[b]{\columnwidth-1.2cm}{\setstretch{0.8} \vspace*{0.8mm}#1}]
{\parbox[b]{1cm}{\setstretch{0.8} \vspace*{0.8mm}#2}}
\textgt{#3}
\end{ptbs}
}
}

ひとまず目的は達成されたように思います。

ところで、これはptbsを使っていた時からあったことなのですが、レイアウトによって(たいていminipageかmulticol使用時)にボックス内に出してもいない横線が入ってしまうことがあるのです。横線のところだけ変な行間の調整が入っているようですが、原因は不明です。これ何が影響してると思われますでしょうか。
KK TeX への返信

Re: 自作ボックスのタイトル部分を改行できるようにしてみたい。

- 和田 勇 の投稿

レイアウトによって(たいていminipageかmulticol使用時)に不要な横線が混入することあり

具体的な症状を見せていただかないと、なんとも言えません。

とはいえ、コーディングを見ると \titlelength のマクロで \setlength{\len}{\linewidth}\linewidth を使っていますね。

この \linewidth を使う場合は、若干注意が必要です。

【2段組で注釈】和田の回答 にも参考URL は 記されていますが、 Difference between \textwidth, \linewidth and \hsize 内の Answers 部分 353 を 参考に、ptbs の宣言で \titlelength\len の扱いを検討する必要があるのではと考えています。

もしかしたら \linewidth を \textwidth に書き換えるだけで済むかもしれませんが、 再現するソースが出来たら連絡ください。

和田 勇 への返信

Re: 自作ボックスのタイトル部分を改行できるようにしてみたい。

- KK TeX の投稿
すみません、横線とは関係ない別件です。
\newlength{\myTitleLength}\newlength{\myTitleheight}\newlength{\mysubTitleheight}

\newcommand{\myPTBSS}[3]{
\settowidth{\myTitleLength}{#2 #1}
\settoheight{\myTitleheight}{\parbox[b]{\columnwidth-1.2cm}{\setstretch{0.8} \vspace*{0.8mm} #1}}
\settoheight{\mysubTitleheight}{\parbox[b]{1cm}{\setstretch{0.8} \vspace*{0.8mm} #2}}

\ifthenelse{\myTitleLength < \columnwidth}% .9\textwidth が必要かな
{% タイトルとサブタイトルの幅が一行に収まる時
\begin{ptbs}[#1]{#2}%
\textgt{#3}
\end{ptbs}}
{% タイトルとサブタイトルの幅が一行の幅を超える時
\ifthenelse{\myTitleheight < \mysubTitleheight}{
\begin{ptbs}[\parbox[b][\mysubTitleheight][b]{\columnwidth-1.2cm}{\setstretch{0.8} \vspace*{0.8mm} #1}]
{\parbox[b][\mysubTitleheight][b]{1cm}{\setstretch{0.8} \vspace*{0.8mm}#2}}%
\textgt{#3}
\end{ptbs}}
{\begin{ptbs}[\parbox[b][\myTitleheight][b]{\columnwidth-1.2cm}{\setstretch{0.8} \vspace*{0.8mm} #1}]
{\parbox[b][\myTitleheight][b]{1cm}{\setstretch{0.8} \vspace*{0.8mm}#2}}%
\textgt{#3}
\end{ptbs}
}
}
}

}

コーナーケース対応のために、1つ条件分岐を追加してみたのですが、
2つ目のifのfalse側で、せっかく設定した高さにタイトルボックスの高さが合わないという問題が発生しました。ifthenelseのネストがまずいんでしょうか。

ケース2
\myPTBSS{タイトルタイトルタイトルタイトルタイトルタイトルタイトルタイトルタイトルタタイトルタイトルタイトルタイトルタイトルタイトルタイトルタイトルタイトルイトルタイトルタイトルタイトルタイトル}
{サブタイトル}
{いろはにほへとちりぬるをいろはにほへとちりぬるをいろはにほへとちりぬるをいろはにほへとちりぬるをいろはにほへとちりぬるを}

でテストしています。
KK TeX への返信

Re: 自作ボックスのタイトル部分を改行できるようにしてみたい。

- 和田 勇 の投稿

主な原因

長いタイトル用の幅を ...\parbox[b]{\columnwidth-1.2cm}... と しても計算してくれません。

マクロ \titlelength\len の計算を \linewidth を元に \addtolength で 計算しているようにしてみました。

なお 1.2cm の補正では意図された結果が得られないので試行錯誤の上 1.4cm で 調整しましたが、限界値までの検証は行っていませんので、その点を考慮の上、 検討してください。

この部分に関する、差分は以下のとおり。

     +\newlength{\myLongTitleWidth}% 長いタイトルを想定した時の幅
     +\setlength{\myLongTitleWidth}{\columnwidth}% {\columnwidth-1.2cm} の意図の反映
     +\addtolength{\myLongTitleWidth}{-1.4cm}% でも 1.2cm では足りないので

      \newcommand{\myPTBSS}[3]{
        \settowidth{\myTitleLength}{#2 #1}
     -  \settoheight{\myTitleheight}{\parbox[b]{\columnwidth-1.2cm}{\setstretch{0.8} \vspace*{0.8mm} #1}}
     +  \settoheight{\myTitleheight}{\parbox[b]{\myLongTitleWidth}{\setstretch{0.8} \vspace*{0.8mm} #1}}

minipage multicolumn と \linewidth vs \textwidth

minipage 環境などで、意図しない が生じる場合があるとのことでしたが、 \linewidth の影響かと書き込んだので、念の為 minipage multicolum 環境で試してみました。

test3.tex のソースを元にしたものでは、 \parbox{44em}{...} の部分は、当然おかしくはなりますが、 その他は特段おかしな状況は発生しないようです。