Prüfung 1

Prüfung 1

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@clearbeamercolorund an \beamer@setbeamercolor.

(Dasselbe gilt für \setbeamerfontund \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@@@@sbtosich 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 catchfilebetweentagsPakets. Dies erfordert allerdings einige zusätzliche Kommentare in den .styDateien.

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

verwandte Informationen