このサイトには、「テーマ X を使用していますが、テーマ Y のフッター/ヘッダー/その他もろもろを使いたい」といった質問がたくさんあります。一例を挙げます。ワルシャワとマドリードのビーマーテーマをミックス
これを簡単にするために、たとえばフッターラインだけなど、テーマから特定のテンプレートだけをロードするにはどうすればよいでしょうか?
テストケース
テスト1: 単純なケース
\useoutertheme{infolines}
\setbeamertemplate{footline}[infolines theme]
テスト2: 親テーマで動作するかどうかをテストする
\usetheme{Boadilla}
\setbeamertemplate{footline}[infolines theme]
テスト3: オプションで動作するかどうかをテストする
\usetheme[height=3cm]{Rochester}
\setbeamertemplate{headline}[sidebar theme]
答え1
テスト1
これはうまくいくようです。
\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}
テスト2
色を制御したい場合は、\beamer@clearbeamercolor
とで同じトリックを実行します\beamer@setbeamercolor
。
\setbeamerfont
(およびも同様\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}
テスト3
\beamer@@@@sbto
このテストでは、長いマクロであることが重要です。
\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}
答え2
不器用な回避策:catchfilebetweentags
パッケージを使用します。ただし、これにはファイル内に追加のコメントが必要です.sty
。
\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}
ファイル.sty
には次のようなコメントが必要です:
%<*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>
上記の仮説の問題点:
フォームのコメント
%<*footline:infolines>
を%</footline:infolines>
コードに挿入する必要がありますが、カスタム テーマではおそらくこれが行われず、どのテンプレートで機能し、どのテンプレートでは機能しないのかがユーザーに混乱することになります。特定のテンプレートを読み込むだけでは、テンプレートがテーマ内で定義されているがテンプレートの外部にあるものを使用しようとするとすぐに壊れることはわかっています。たとえば、次のようなものは、...
\pgfdeclareverticalshading{beamer@topshade}{...}
の内側にある必要があります。<*tag>
</tag>
もちろん、どのサブテーマでテンプレートが定義されているかを知る必要がなく、一般的なテーマを挿入するだけで、このコマンドが読み込まれたサブテーマで特定のタグを再帰的に検索することができれば、より便利です。
テーマのオプション引数がこれにどのように適合するかについてはまだ考えていません...
....
テストケースの結果:
テスト1: 単純なケース
作品
テスト2: 親テーマで動作するかどうかをテストする
失敗
テスト3: オプションで動作するかどうかをテストする
失敗
答え3
以下のコードは、私が受け取ったlouisstuart96の回答からのものです。https://github.com/josephwright/beamer/issues/388#issuecomment-296338235
[本人が回答を追加する場合は、この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}
テストケースの結果:
テスト1: 単純なケース
作品
テスト2: 親テーマで動作するかどうかをテストする
動作します [ただし、色などがテーマによって上書きされてしまうという欠点があります]
テスト3: オプションで動作するかどうかをテストする
作品