Inspirado por la discusión sobrehttps://github.com/josephwright/beamer/issues/388
Hay muchas preguntas en este sitio como "Utilizo el tema X pero me gustaría tener el pie de página/encabezado/lo que sea del tema Y", solo un ejemplo:Mezcla el tema Beamer de Varsovia y Madrid
Para hacer esto más fácil, ¿cómo se podría simplemente cargar una plantilla específica de un tema, por ejemplo, solo la línea de pie de página?
Casos de prueba
Prueba 1: caso simple
\useoutertheme{infolines}
\setbeamertemplate{footline}[infolines theme]
Prueba 2: prueba si funciona con el tema principal
\usetheme{Boadilla}
\setbeamertemplate{footline}[infolines theme]
Prueba 3: prueba si funciona con opciones
\usetheme[height=3cm]{Rochester}
\setbeamertemplate{headline}[sidebar theme]
Respuesta1
Prueba 1
Esto parece funcionar.
\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}
Prueba 2
Si quieres controlar los colores, haz el mismo truco con \beamer@clearbeamercolor
y \beamer@setbeamercolor
.
(Lo mismo para \setbeamerfont
y \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}
Prueba 3
En esta prueba es fundamental que \beamer@@@@sbto
sea una macro larga.
\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}
Respuesta2
Una solución torpe: usar el catchfilebetweentags
paquete. Sin embargo, esto necesita algunos comentarios adicionales en los .sty
archivos.
\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}
Los .sty
archivos necesitarían comentarios como:
%<*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>
Problemas del Ansatz anterior:
Los comentarios del formulario
%<*footline:infolines>
tendrían%</footline:infolines>
que insertarse en el código, los temas personalizados probablemente no harían esto y el usuario estaría confundido sobre qué plantillas funcionarían y cuáles no.Sé que simplemente cargar una plantilla específica se interrumpirá tan pronto como la plantilla intente usar algo definido dentro del tema, pero fuera de la plantilla, por ejemplo, cosas como
\pgfdeclareverticalshading{beamer@topshade}{...}
tendrían que estar dentro del<*tag>
...</tag>
por supuesto, sería más conveniente si uno no tuviera que saber en qué subtema está definida la plantilla, sino que simplemente pudiera insertar el tema general y este comando buscaría recursivamente los subtemas cargados para una etiqueta determinada.
Todavía no he pensado en cómo encajarían los argumentos opcionales de los temas en esto...
....
Resultados de los casos de prueba:
Prueba 1: caso simple
obras
Prueba 2: prueba si funciona con el tema principal
fallar
Prueba 3: prueba si funciona con opciones
fallar
Respuesta3
El siguiente código es de louisstuart96 en una respuesta que recibí enhttps://github.com/josephwright/beamer/issues/388#issuecomment-296338235
[en caso de que él mismo decida agregar una respuesta, eliminaré este CM]
\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}
Resultados de los casos de prueba:
Prueba 1: caso simple
obras
Prueba 2: prueba si funciona con el tema principal
funciona [con la pequeña desventaja de que el tema sobrescribirá cosas como los colores]
Prueba 3: prueba si funciona con opciones
obras