titlepage環境内で\textheightギリギリのtcolorbox環境を垂直方向均等に配置したい.

titlepage環境内で\textheightギリギリのtcolorbox環境を垂直方向均等に配置したい.

- Shiny Mt.Fuji の投稿
返信数: 6

卒論の表紙作成にlualatex, jlreq, tcolorboxを使用しております. 表紙には,\textwidth, \textheightを超過した飾り罫が必要ですので,それをtcolorboxパッケージで実現しています. 具体的には,欲しい縦横比をもつtcolorbox環境を用意し(サイズは\textwidth0.96\textheight),borderlineoffsetオプションを用いて本文ボックス外に飾り罫を施しています.

ここからが本題で,tcolorbox環境をtitlepage環境内に垂直方向均等に配置したい(つまり,titlepage環境の上端から0.02\textheight下げたところからtcolorbox環境を始めたい)のですが,高さが\textheightに近いボックスだと,よくある\vfillでサンドするやり方ではうまくいきません. \vspace, \vfilも試してみましたが,やはり難しいようです.

再現のためのtexファイルと出力されたpdfファイルを添付しておりますので,よろしければご参照ください. ボックスの関係が分かりやすいよう,showframeパッケージを導入しております. 正確に均等配置する方法があれば教えていただきたいです. 何卒よろしくお願いいたします.

添付 main.jpg
Shiny Mt.Fuji への返信

Re: titlepage環境内で\textheightギリギリのtcolorbox環境を垂直方向均等に配置したい.

- 和田 勇 の投稿

grok/X で数回やりとしたら、以下のように textheight でなく paperheight を利用してはとのことでしたので それを元に回答案を末尾に示しますので、参考にしてください。なお grok は paperwidth にも変更しろと言ってきたけど おかしくなるのでそれは却下しました。

とはいえ、そのままの paperheight を使うとページ溢れを誘発するので、試行錯誤でとりあえず「.675」倍にしてあります。

また、飾り罫の下の線、よくみると線が被っていますよね。これはページのルーラーだと思います。 そのための確認コードとして「本文」を挿入してあります。 今回はこの表紙のルーラは除去していません。

それから、タイトルは上端から 6cm というのが仕様でしょうか?勝手ながら垂直方向の中央寄せにしてありますが、元のコードを活かせるようにしてありますのでご利用ください。

diff --git a/main.tex b/main.tex
index 92ea1a7..532604c 100644
--- a/main.tex
+++ b/main.tex
@@ -19,16 +19,15 @@
   \begin{tcolorbox}[
       enhanced,
       % frame hidden, % ボックスの枠自体は必要ないので,実際には枠線を消す.
-      width=\textwidth,
-      height=0.96\textheight, % \textheightギリギリだと垂直方向均等配置がうまくいかない.
+      height=.675\paperheight, % .7 だと空白ページが発生
       halign=center,
+      valign=center, % 垂直中央揃え(もし上端から 6cm が指定されているならコメントアウト)
       borderline={0.5pt}{-30pt}{black}, % 実際に見える表紙の飾り罫
     ]
     \centering
-    \vspace{6cm}
+    %\vspace{6cm} % 上端から 6cm が仕様なら tcolorbox の垂直中央寄せ valign をコメントアウト
     \makeatletter
-    {\@title}
-
+    {\@title} \\
     \vspace{0.2cm}
     {\@author}
     \makeatother
@@ -36,4 +35,6 @@
   \end{tcolorbox}
   \vfil
 \end{titlepage}
+
+本文
 \end{document}
和田 勇 への返信

Re: titlepage環境内で\textheightギリギリのtcolorbox環境を垂直方向均等に配置したい.

- 和田 勇 の投稿

訂正です

また、飾り罫の下の線、よくみると線が被っていますよね。これはページのルーラーだと思います。 ...

原因は \usepackage{showframe} を利用していたためですね。なので、これに対する処置は不要でした。

それから、上端で \null\vfill していますが、下端では \vfill のみのため、空間の高さが不一致です。 下端を \vfill\null などのようにすると釣り合いが取れる感じに仕上がるようです。

和田 勇 への返信

Re: titlepage環境内で\textheightギリギリのtcolorbox環境を垂直方向均等に配置したい.

- 和田 勇 の投稿
度々ですみません。どうも勘違いしているようなので、私の投稿はともに無視してください。
Shiny Mt.Fuji への返信

Re: titlepage環境内で\textheightギリギリのtcolorbox環境を垂直方向均等に配置したい.

- 和田 勇 の投稿

出直しです。

まず添付画像の冒頭にある \begin{tcolorbox}直前の\null\vfilはおそらく有効 とありますが、 示された空間は borderline={0.5pt}{-30pt}{black}30pt の影響ですね。

\null\vfill は、その上部にあるヘッダーを示すものと思われる細長い箱の上端から、 borderline で描画した rounded-box の上端mでの縦方向の移動で処理は終わっています。(もちろん、最後の \vfill なども影響はしますが)

さて、いろいろ検討した結果、質問のおおよその意味合いは以下に示すものかと想定して分析し直しました。

  1. borderline で描画される rounded box を含む tcolorbox で示される領域は、showframe で示された本文領域内の高さ方向一杯を使いたい
  2. borderline を含まない tcolorbox の描画領域の中心は、 show frame で示される領域の中心と一致させる
  3. 結果的に、横方向は 30pt ずつ広く、縦方向は 30pt ずつ狭く配置させる

以上の方針で検討した結果、height=0.96\textheight, をborderline の 30pt を考慮し height=\textheight-30pt-30pt, のようにすれば良いように思います。

詳しくは添付のソースを参考にしてください。

また、それ以外に、height width を目一杯使う方法や、タイトルを縦横の中心寄せにする方法も、勝手ながら付け加えてありますので 参考にしてください。

Shiny Mt.Fuji への返信

Re: titlepage環境内で\textheightギリギリのtcolorbox環境を垂直方向均等に配置したい.

- はやて (h20y6m) の投稿

自分がやるなら全体を\vbox to \textheightに入れて\vssでサンドとかでしょうか。 TeXプリミティブを直接使うアレなコードですが……

\begin{titlepage}
  % ↓↓↓
  \vbox to \textheight \bgroup
    \vspace{\dimeval{\topskip-\Cht}}%
    \vss
    \begingroup
  % ↑↑↑
      \begin{tcolorbox}
        ~
      \end{tcolorbox}
  % ↓↓↓
    \endgroup
    \vss
    \vspace{-\Cdp}%
  \egroup
  % ↑↑↑
\end{titlepage}
Shiny Mt.Fuji への返信

Re: titlepage環境内で\textheightギリギリのtcolorbox環境を垂直方向均等に配置したい.

- Shiny Mt.Fuji の投稿
和田様
はやて様

お二方ともご回答いただきありがとうございました.
どちらのご回答でも,無事に欲しい出力を再現することができました.

tcolorboxのheightを取りすぎてしまう(おおよそ0.96\textheight, 0.675\paperheight以上?)とページが流れる点については,はやて様のプリミティブによる設定が功を奏するようです(0.98\textheightとして試してみました).
プリミティブは難しいですが,勉強になりました.
改めて,お二方ともありがとうございました.