Я пытаюсь построить beamer theme. Я хотел бы, чтобы frametitleшло вдоль левого поля frame. Поэтому я пишу это MWE
\documentclass{beamer}
\title{Title}
\author{John Smith}
\date{\today}
\usepackage{tikz}
\setbeamertemplate{frame numbering}{\insertframenumber}
\defbeamertemplate{frametitle}{plain}{%
\nointerlineskip%
\rotatebox[origin=c]{90}{\begin{beamercolorbox}[%
wd=\paperheight,%
sep=0pt,%
leftskip=0cm,%
rightskip=1cm,%
]{frametitle}%%
\begin{tikzpicture}[baseline={(0,0)}]
\fill[fg] (0,.5ex-1.5pt) rectangle (.1*\paperheight,.5ex+1.5pt);
\end{tikzpicture}%
\insertframetitle%
\nolinebreak%%
\hfill
\rotatebox[origin=c]{270}{\usebeamertemplate*{frame numbering}}%
\end{beamercolorbox}}%
}
\setbeamertemplate{frametitle}[plain]
\begin{document}
\begin{frame}[t]{Frame Title}
\end{frame}
\end{document}
что дает следующий результат
Это не работает по двум основным причинам: (1) frametitleне находится точно на левом поле, но есть некоторое пространство, (2) содержимое перемещается после frametitle. Есть ли способ решить эти две проблемы? Я предпочитаю не использовать overlay/remember picture from tikzpackage.
ЧТО Я ПОПРОБОВАЛ
Я попытался изменить sidebar leftшаблон вместо frametitleшаблона. Этот подход имеет некоторые проблемы: (1) он перезаписывается \useoutertheme{sidebar}или, по крайней мере, перезаписывает его, он не размещается рядом с ним, (2) ширина боковой панели не меняется вместе с содержимым, длинный заголовок может перекрываться с содержимым (3) он изменяет поле в titlepage.
решение1
-
(1) заголовок фрейма не находится точно на левом поле, но есть некоторое пространство
переместите поле влево
\beamer@leftmargin -
(2) содержимое перемещается после заголовка фрейма
вы можете убедиться, что поле заголовка не занимает вертикальное пространство (и, таким образом, не продавливает корпус рамки вниз), разбив поле
-
(2) ширина боковой панели не меняется в зависимости от содержимого, длинный заголовок может перекрывать содержимое
это не рассматривается в решении ниже. Если вы хотите, чтобы заголовок фрейма влиял на ширину текстовой области, вам, возможно, придется переписать, как бимер строит свои фреймы...
Может быть, более простым подходом было бы увеличить левое поле текста так, чтобы в него поместились две строки заголовка фрейма?
Некоторые числа в приведенном ниже коде, возможно, требуют небольшой настройки...
\documentclass{beamer}
\title{Title}
\author{John Smith}
\date{\today}
\usepackage{tikz}
\setbeamertemplate{frame numbering}{\insertframenumber}
\makeatletter
\defbeamertemplate{frametitle}{plain}{%
\hspace{-\beamer@leftmargin}%
\smash{\rotatebox[origin=tr]{90}{\begin{beamercolorbox}[%
wd=\paperheight,%
sep=0pt,%
leftskip=0cm,%
rightskip=0cm,%
vmode
]{frametitle}%%
\hspace*{0.1em}
\parbox[t]{.85\linewidth}{%
\begin{tikzpicture}[baseline={(0,0)}]
\fill[fg] (0,.5ex-1.5pt) rectangle (.1*\paperheight,.5ex+1.5pt);
\end{tikzpicture}%
\strut\insertframetitle}%
\hfill
\parbox{.1\linewidth}{\hfill\rotatebox[origin=c]{270}{\usebeamertemplate*{frame numbering}}\hspace{0.35em}\mbox{}}%
\end{beamercolorbox}}}%
\vskip-1.47em
}
\makeatother
\setbeamertemplate{frametitle}[plain]
\begin{document}
\begin{frame}[t]{Frame Title}
ghds
\end{frame}
\begin{frame}[t]
ghds
\end{frame}
\begin{frame}[t]{Frame Title which is terrible long and occupies two line}
ghds
\end{frame}
\begin{frame}[t]{Frame Title}
ghds
\end{frame}
\end{document}




