Beamerテーマの神秘的な\hboxオーバーフル

Beamerテーマの神秘的な\hboxオーバーフル

カスタムのビーマーテーマを作成しようとしています。固定サイズのビーマーカラーボックスでタイトルとタイトル+サブタイトルの両方を垂直中央に配置しようとして、フレームタイトルで行き詰まりました。他の人の解決策をいくつか組み合わせて、\ifx\insertframesubtitle\@emptyとの組み合わせにたどり着きました。\vbox to 6ex{ \vfilこれは今まさに私が望んでいるように見えますが、\hbox overfull各フレームに対して が生成されます。もう 1 つの小さな問題は、タイトル バージョンに 6ex、タイトル+サブタイトル バージョンに 6.05 を手動で入力して、まったく同じサイズにする必要があったことです (理由はわかりません)。もっとエレガントな解決策が欲しいです。

ご協力いただければ幸いです。

メインファイル:

\documentclass{beamer}

\usetheme{TEST}

\begin{document}

\begin{frame}{Frame}
\end{frame}

\begin{frame}{Frame Title}{Subtitle}
\end{frame}

\end{document}

ビームテーマテスト:

\mode<presentation>

\definecolor{salmon}{RGB}{240, 145, 145}
\setbeamercolor{frametitle}{fg=white, bg=salmon}
\setbeamerfont{frametitle}{size=\LARGE}
\setbeamerfont{framesubtitle}{size=\normalsize}

\defbeamertemplate*{frametitle}{}[1][]
{
    \nointerlineskip%
    \ifx\insertframesubtitle\@empty%
        \begin{beamercolorbox}[wd=\paperwidth, left, leftskip = 1ex]{frametitle}%
           \vbox to 6ex{%
            \vfil%
            \usebeamerfont{frametitle}\strut\insertframetitle%
            \vfil}%
        \end{beamercolorbox}%
    \else%
        \begin{beamercolorbox}[wd=\paperwidth, left, leftskip=1ex, rightskip=4ex]{frametitle}%
            \vbox to 6.05ex{%
            \vfil%
            \usebeamerfont{frametitle}\strut\insertframetitle\\%
            \usebeamerfont{framesubtitle}\strut\insertframesubtitle%
            \vfil}%
        \end{beamercolorbox}%
    \fi%
}
\mode<all>

編集: メイン ファイル内でフレーム タイトルを定義すると、タイトルのみのフレームのタイトルが上に移動します (中央に配置されません)。

編集2: hbox がいっぱいになる問題に対する次の解決策を見つけました (メカニズムは明確ではありませんが、次のような問題があります\vbox to):

\begin{beamercolorbox}[wd=\paperwidth, left]{frametitle}%
    \vbox to 40pt{\vfil%     
    \usebeamerfont{frametitle}\hspace{10pt}\strut\insertframetitle%
    \vfil}%
\end{beamercolorbox}%

のさまざまな条件値に対するより良い方法をまだ模索中です\vbox to

答え1

フレームタイトルを用紙の幅全体に渡ってオーバーフルボックスを発生させずに作成する方法については、デフォルトのフレームタイトル テンプレートを参考にすることができます。

\documentclass[11pt]{beamer}

\makeatletter
\setbeamertemplate{frametitle}{%
  \ifbeamercolorempty[bg]{frametitle}{}{\nointerlineskip}%
  \@tempdima=\textwidth%
  \advance\@tempdima by\beamer@leftmargin%
  \advance\@tempdima by\beamer@rightmargin%
  % changed code from here
  \begin{beamercolorbox}[sep=0cm,left,wd=\the\@tempdima,leftskip=0.5cm,rightskip=0.5cm]{frametitle}
    \begin{minipage}[c][2cm][c]{\textwidth}
      \usebeamerfont{frametitle}%
      \strut\insertframetitle\strut\par
      \ifx\insertframesubtitle\@empty%
      \else
        {\usebeamerfont{framesubtitle}\usebeamercolor[fg]{framesubtitle}\strut\insertframesubtitle\strut\par}%
      \fi
    \end{minipage}
  \end{beamercolorbox}%
}
\makeatother

\setbeamerfont{frametitle}{size=\LARGE}
\setbeamerfont{framesubtitle}{size=\normalsize}

\definecolor{salmon}{RGB}{240, 145, 145}
\setbeamercolor{frametitle}{fg=white, bg=salmon}

\begin{document}

\begin{frame}
\frametitle{Frame}
test
\end{frame}

\begin{frame}
\frametitle{Frame Title}
\framesubtitle{Subtitle}  
test
\end{frame}

\begin{frame}
content...
\end{frame}

\end{document}

ここに画像の説明を入力してください ここに画像の説明を入力してください

関連情報