我一直在研究这个问题的详细答案:从头开始设计自定义 Beamer 主题并对路径有疑问。
我正在构建一个用于多个演示文稿的主题。我有一个目录结构(git repo),如下所示:
|- Presentations (top-dir)
|
|\_.git (and subfolders)
|
|\_Presentation1
| |-presentation1.tex
| \-presentation1.{aux,pdf} etc
|
|\_Presentation2
| |-presentation2.tex
| \-presentation2.{aux,pdf} etc
|
\_Theme
|-beamerthememytheme.sty
|-beamerinnerthememytheme.sty
|-beamerouterthememytheme.sty
\-beamercolorthememytheme.sty
我似乎有几个使用这个主题的选项:
将所有 4 个文件符号链接到每个演示文稿。这会增加设置成本,使 git 处理变得复杂,但效果很好,不需要在主题文件中进行特殊处理
放弃并在文件中
\usetheme{mytheme}
使用。这也适用于主 .tex 文件,但似乎要求我的主题文件现在读取而不是更简单的\usepackage{../Theme/beamerthememytheme}
presentationN.tex
\usepackage{../Theme/beamerinnerthememytheme}
\useinnertheme{mytheme}
删除多余的文件。仅使用
beamerthememytheme.sty
并将 {inner,outer,color} 主题的内容复制到该文件中。我还可以通过删除前导标签来重命名以使其更简单beamertheme
,因为无论如何我都必须使用\usepackage
。这对于可读性/可维护性来说似乎不可取,但我认为如果替代方案很复杂,那么这是一种权衡。
有没有办法从 .sty 文件中指定它所包含的部分?就我而言,我想我可以继续并包含它而<unknown-inclusion-relative-path>/beamerinnerthememytheme
不必担心我可能会有演示文稿想要从此目录结构之外包含它(这不是一个大问题,但最好避免限制可能性,同时我仍然可以轻松更改)。
答案1
根据问题评论中 Ulrike Fischer 的建议,我使用 Windows 命令提示符运行了以下命令。
initexmf --register-root="%cd%"
从顶级目录,将主题文件移动到目录中
top-level-dir/text/latex/themename
现在我可以成功使用\usetheme{themename}
。
该命令可以从.bat 文件或类似文件运行,从而更容易在新克隆的存储库中执行。
等效的 Linux 脚本可能类似于(未经测试):
initexmf --register-root="$(pwd)"
当我的“Linux”提示符实际上是通过 mingw 和 git-bash 时,我使用命令提示符来避免可能出现的问题(这通常会导致与 Windows/Linux 之间转换的路径问题)。