Тема Beamer таинственная \hbox переполнен

Тема Beamer таинственная \hbox переполнен

Я пытаюсь написать пользовательскую тему для beamer. Я застрял на заголовке фрейма, пытаясь вертикально центрировать и Title, и Title+Subtitle в фиксированном размере beamercolorbox. Объединив несколько решений других людей, я пришел к комбинации и \ifx\insertframesubtitle\@empty. \vbox to 6ex{ \vfilЭто выглядит точно так, как я хочу сейчас, но производит \hbox overfullдля каждого фрейма. Еще одна небольшая проблема заключается в том, что мне пришлось вручную поставить 6ex для версии Title и 6.05 для версии Title+Subtitle, чтобы они были точно такого же размера (не знаю, почему). Я хотел бы более элегантное решение.

Буду признателен за любую помощь!

Основной файл:

\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: Если я определяю заголовок фрейма внутри основного файла, заголовок фрейма «Только заголовок» перемещается вверх (не центрируется).

EDIT2: Я нашел следующее решение для переполненного 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}

введите описание изображения здесь введите описание изображения здесь

Связанный контент