Tema Beamer misterioso \hbox overfull

Tema Beamer misterioso \hbox overfull

Estou tentando escrever um tema de projetor personalizado. Fiquei preso no título do quadro, tentando centralizar verticalmente o título e o título + subtítulo em um beamercolorbox de tamanho fixo. Combinando algumas soluções de outras pessoas, cheguei à combinação de \ifx\insertframesubtitle\@emptye \vbox to 6ex{ \vfil. Parece exatamente como eu quero agora, mas produz \hbox overfullpara cada quadro. Outro pequeno problema é que tive que colocar manualmente 6ex para a versão do título e 6.05 para a versão do título + subtítulo para que eles tivessem exatamente o mesmo tamanho (não faço ideia do porquê). Eu gostaria de uma solução mais elegante.

Eu apreciaria qualquer ajuda!

Arquivo principal:

\documentclass{beamer}

\usetheme{TEST}

\begin{document}

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

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

\end{document}

beamerthemeTEST.sty :

\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>

EDIT: Se eu definir o título do quadro dentro do arquivo principal, o título no quadro somente título sobe (não fica centralizado).

EDIT2: Encontrei a seguinte solução para o hbox overfull (não está claro sobre a mecânica, algo a ver com \vbox to):

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

Ainda estou tentando descobrir uma maneira melhor para diferentes valores condicionais para \vbox to.

Responder1

Você pode se inspirar no modelo de frametitle padrão sobre como fazer um frametitle abrangendo toda a largura do papel sem causar caixas muito cheias:

\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}

insira a descrição da imagem aqui insira a descrição da imagem aqui

informação relacionada