关闭问题后编辑:参考答案说明了如何通过将主题放入适当的 tex 文件夹中来安装主题。但这不是我所要求的,我希望能够将我的主题与其他 tex 文件一起“打包并运送”,以便其他用户无需执行任何操作即可使用它们。就像自定义包一样。
我创建了一个自定义 Beamer 主题。它定义在文件中beamerthemeMYTHEME.sty
。与往常一样,此文件调用另外三个文件,即
beamercolorthemeMYTHEME.sty
,beamerinnerthemeMYTHEME.sty
和beamerouterthemeMYTHEME.sty
。
如果我的.tex
与主题文件位于同一目录中,我只能通过使用该主题\usetheme{MYTHEME}
。
接下来,如果我将这些文件放在目录(主题)中,我必须使用\usepackage{Theme/beamerthemeMYTHEME.sty}
。但是,似乎找不到其他文件,因为我收到错误
beamerinnerthemeMYTHEME.sty' not found. \useinnertheme{MYTHEME}
。
我想使用这种方法,因为我希望其他人也使用这些主题。
有什么方法可以让它工作吗?
添加
除了处理主题文件之外,如何最好地将子文件夹中的图形与以下内容结合起来也很有趣\pgfdeclareimage
答案1
全部\use[xxx]theme
由 实现\usepackage
。例如\usetheme{MYTHEME}
扩展为\usepackage{beamerthemeMYTHEME}
。
如果想要修改\usepackage
或其家族的行为(即不搜索子文件夹),它不再与 Beamer 相关。
一种方法是重新定义
\def\beamer@calltheme#1#2#3{% \def\beamer@themelist{#2} \@for\beamer@themename:=\beamer@themelist\do {\usepackage[{#1}]{#3\beamer@themename}}}
类似于
\makeatletter
\def\beamer@calltheme#1#2#3{%
\def\beamer@themelist{#2}
\@for\beamer@themename:=\beamer@themelist\do
{\input{Theme/#3\[email protected]}}}
然后 TeX 将在子文件夹Theme
中搜索beamerthemeMYTHEME.sty
。
也许更好的方法是发明新的宏。例如
\makeatletter
\def\beamer@calltheme#1#2#3{%
\def\beamer@themelist{#2}
\@for\beamer@themename:=\beamer@themelist\do
{\usepackage[{#1}]{\beamer@themelocation/#3\beamer@themename}}}
\def\usefolder#1{
\def\beamer@themelocation{#1}
}
\def\beamer@themelocation{}
现在
\usefolder{Theme}
\usetheme{MYTHEME}
将得到所需的结果。对于子子文件夹,使用分组
{
\usefolder{Theme/ColorTheme}
\usecolortheme{abc}
}
有人可能想要实现\gotosubfolder{ColorTheme}
来替代\usefolder{Theme/ColorTheme}
。但说真的,这与 Beamer 几乎没有关系。