自定义文件夹中的 Beamer 主题

自定义文件夹中的 Beamer 主题

关闭问题后编辑:参考答案说明了如何通过将主题放入适当的 tex 文件夹中来安装主题。但这不是我所要求的,我希望能够将我的主题与其他 tex 文件一起“打包并运送”,以便其他用户无需执行任何操作即可使用它们。就像自定义包一样。

我创建了一个自定义 Beamer 主题。它定义在文件中beamerthemeMYTHEME.sty。与往常一样,此文件调用另外三个文件,即

beamercolorthemeMYTHEME.stybeamerinnerthemeMYTHEME.stybeamerouterthemeMYTHEME.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 几乎没有关系。

相关内容