Inspiriert durch die Diskussion überhttps://github.com/josephwright/beamer/issues/388
Auf dieser Site gibt es viele Fragen wie „Ich verwende Design X, hätte aber gerne die Fußzeile/Kopfzeile/was auch immer von Design Y“, nur ein Beispiel:Mix aus Warschau und Madrid Beamer-Thema
Um dies zu vereinfachen: Wie könnte man nur eine bestimmte Vorlage aus einem Design laden, beispielsweise nur die Fußzeile?
Testfälle
Test 1: einfacher Fall
\useoutertheme{infolines}
\setbeamertemplate{footline}[infolines theme]
Test 2: Testen Sie, ob es mit dem übergeordneten Thema funktioniert
\usetheme{Boadilla}
\setbeamertemplate{footline}[infolines theme]
Test 3: Testen Sie, ob es mit Optionen funktioniert
\usetheme[height=3cm]{Rochester}
\setbeamertemplate{headline}[sidebar theme]
Antwort1
Prüfung 1
Das scheint zu funktionieren.
\documentclass{beamer}
\usecolortheme{whale}
\useoutertheme{split}
\makeatletter
\let\beamer@@@@sbto@old=\beamer@@@@sbto
\def\text@footline{footline}
\long\def\beamer@@@@sbto#1#2[#3]#4[#5]#6{
\def\text@element{#1}
\ifx\text@footline\text@element
\beamer@@@@sbto@old{#1}{#2}[#3]{#4}[#5]{#6}
\fi
}
\useoutertheme{infolines}
\let\beamer@@@@sbto=\beamer@@@@sbto@old
\makeatother
\begin{document}
\begin{frame}
Test
\end{frame}
\end{document}
Prüfung 2
Wenn Sie die Kontrolle über die Farben erlangen möchten, wenden Sie denselben Trick auf \beamer@clearbeamercolor
und an \beamer@setbeamercolor
.
(Dasselbe gilt für \setbeamerfont
und \setbeamersize
)
\documentclass{beamer}
\usecolortheme{whale}
\useoutertheme{split}
\makeatletter
\let\beamer@@@@sbto@old=\beamer@@@@sbto
\def\text@footline{footline}
\long\def\beamer@@@@sbto#1#2[#3]#4[#5]#6{
\def\text@element{#1}
\ifx\text@footline\text@element
\beamer@@@@sbto@old{#1}{#2}[#3]{#4}[#5]{#6}
\fi
}
\let\beamer@clearbeamercolor@old=\beamer@clearbeamercolor
\let\beamer@setbeamercolor@old=\beamer@setbeamercolor
\def\beamer@clearbeamercolor#1#2{}
\def\beamer@setbeamercolor#1#2{}
\usetheme{Boadilla}
\setbeamertemplate{footline}[infolines theme]
\let\beamer@@@@sbto=\beamer@@@@sbto@old
\let\beamer@clearbeamercolor=\beamer@clearbeamercolor@old
\let\beamer@setbeamercolor=\beamer@setbeamercolor@old
\makeatother
\begin{document}
\begin{frame}
Test
\end{frame}
\end{document}
Prüfung 3
Wichtig bei diesem Test ist, dass es \beamer@@@@sbto
sich um ein langes Makro handelt.
\documentclass{beamer}
\usecolortheme{whale}
\useoutertheme{split}
\makeatletter
\let\beamer@@@@sbto@old=\beamer@@@@sbto
\def\text@headline{headline}
\long\def\beamer@@@@sbto#1#2[#3]#4[#5]#6{
\def\text@element{#1}
\ifx\text@headline\text@element
\beamer@@@@sbto@old{#1}{#2}[#3]{#4}[#5]{#6}
\fi
}
\usetheme[height=3cm]{Rochester}
\setbeamertemplate{headline}[sidebar theme]
\let\beamer@@@@sbto=\beamer@@@@sbto@old
\makeatother
\begin{document}
\section{TEST}
\begin{frame}
Test
\end{frame}
\end{document}
Antwort2
Ein umständlicher Workaround: Verwendung des catchfilebetweentags
Pakets. Dies erfordert allerdings einige zusätzliche Kommentare in den .sty
Dateien.
\documentclass{beamer}
\usecolortheme{whale}
\useoutertheme{split}
\usepackage{catchfilebetweentags}
\newcommand\fromtheme[2]{\ExecuteMetaData[beamertheme#1.sty]{#2}}
\newcommand\fromcolortheme[2]{\ExecuteMetaData[beamercolortheme#1.sty]{#2}}
\newcommand\fromfonttheme[2]{\ExecuteMetaData[beamerfonttheme#1.sty]{#2}}
\newcommand\fromoutertheme[2]{\ExecuteMetaData[beameroutertheme#1.sty]{#2}}
\newcommand\frominnertheme[2]{\ExecuteMetaData[beamerinnertheme#1.sty]{#2}}
\fromoutertheme{infolines}{footline:infolines}
\begin{document}
\begin{frame}
Test
\end{frame}
\end{document}
Die .sty
Dateien benötigen Kommentare wie:
%<*footline:infolines>
\defbeamertemplate*{footline}{infolines theme}
{
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%
\usebeamerfont{author in head/foot}\insertshortauthor\expandafter\beamer@ifempty\expandafter{\beamer@shortinstitute}{}{~~(\insertshortinstitute)}
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}%
\usebeamerfont{title in head/foot}\insertshorttitle
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}%
\usebeamerfont{date in head/foot}\insertshortdate{}\hspace*{2em}
\insertframenumber{} / \inserttotalframenumber\hspace*{2ex}
\end{beamercolorbox}}%
\vskip0pt%
}
%</footline:infolines>
%<*headline:infolines>
\defbeamertemplate*{headline}{infolines theme}
{
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.65ex,dp=1.5ex,right]{section in head/foot}%
\usebeamerfont{section in head/foot}\insertsectionhead\hspace*{2ex}
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.65ex,dp=1.5ex,left]{subsection in head/foot}%
\usebeamerfont{subsection in head/foot}\hspace*{2ex}\insertsubsectionhead
\end{beamercolorbox}}%
\vskip0pt%
}
%</headline:infolines>
Probleme des obigen Ansatzes:
Kommentare des Formulars
%<*footline:infolines>
müssten%</footline:infolines>
in den Code eingefügt werden. Bei benutzerdefinierten Designs wäre dies wahrscheinlich nicht möglich und der Benutzer wäre verwirrt, bei welchen Vorlagen es funktioniert und bei welchen nicht.Ich weiß, dass das Laden einer bestimmten Vorlage nicht funktioniert, sobald die Vorlage versucht, etwas zu verwenden, das im Design definiert ist. Außerhalb der Vorlage
\pgfdeclareverticalshading{beamer@topshade}{...}
müssten sich jedoch beispielsweise Dinge wie<*tag>
… befinden.</tag>
Natürlich wäre es bequemer, wenn man nicht wissen müsste, in welchem Unterthema die Vorlage definiert ist, sondern einfach das allgemeine Thema einfügen könnte und dieser Befehl die geladenen Unterthemen rekursiv nach einem bestimmten Tag durchsuchen würde.
Ich habe noch nicht darüber nachgedacht, wie optionale Argumente von Themen hier hineinpassen würden ...
....
Ergebnisse der Testfälle:
Test 1: einfacher Fall
Werke
Test 2: Testen Sie, ob es mit dem übergeordneten Thema funktioniert
scheitern
Test 3: Testen Sie, ob es mit Optionen funktioniert
scheitern
Antwort3
Der folgende Code stammt von louisstuart96 in einer Antwort, die ich erhalten habe unterhttps://github.com/josephwright/beamer/issues/388#issuecomment-296338235
[falls er beschließt, selbst eine Antwort hinzuzufügen, werde ich diese CM löschen]
\documentclass{beamer}
\usecolortheme{whale}
\useoutertheme{split}
\makeatletter
\let\beamer@original@defbeamertemplate\beamer@defbeamertemplate
\def\beamer@defbeamertemplate{\beamer@sbtfalse\@ifstar{\beamer@sbtoo}{\beamer@sbtoo}}
\useoutertheme{infolines}
\setbeamertemplate{footline}[infolines theme]
% This \set must be done manually,
% since generally theme names have nothing to do with file names
\let\beamer@defbeamertemplate\beamer@original@defbeamertemplate
\makeatother
\begin{document}
\begin{frame}
Test
\end{frame}
\end{document}
Ergebnisse der Testfälle:
Test 1: einfacher Fall
Werke
Test 2: Testen Sie, ob es mit dem übergeordneten Thema funktioniert
funktioniert [mit dem kleinen Nachteil, dass Dinge wie Farben vom Design überschrieben werden]
Test 3: Testen Sie, ob es mit Optionen funktioniert
Werke