![使用自定义主题的 beamer 讲义导致自定义新命令的控制序列未定义](https://linux22.com/image/395447/%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E4%B8%BB%E9%A2%98%E7%9A%84%20beamer%20%E8%AE%B2%E4%B9%89%E5%AF%BC%E8%87%B4%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%B0%E5%91%BD%E4%BB%A4%E7%9A%84%E6%8E%A7%E5%88%B6%E5%BA%8F%E5%88%97%E6%9C%AA%E5%AE%9A%E4%B9%89.png)
我想使用相同的源文件创建幻灯片和讲义/手稿。为了方便起见,我在自定义 beamer 主题中定义了一些快捷方式,但在翻译文章时似乎会跳过这些快捷方式。MWE:
% beamerthemeFOO.sty
\usetheme{Berlin}
\newcommand{\foo}{bar}
% main.tex
\usetheme{FOO}
\begin{document}
\frame{\foo}
\end{document}
% main.beamer.tex
\documentclass{beamer}
\input{main.tex}
% main.article.tex
\documentclass{scrartcl}
\usepackage{beamerarticle}
\setjobnamebeamerversion{main.beamer}
\input{main.tex}
latexmk -pdf main.beamer.tex
做得很好。latexmk -pdf main.article.tex
导致:
! Undefined control sequence.
<recently read> \foo
l.3 \frame{\foo
}
更改\newcommand...
也\mode<all>{\newcommand...}
无济于事。我该如何解决?
这些宏非常方便,因为它们在插入自定义样式的目录框架时设置了多个 beamertemplates \maketocframe
。作为热修复,我手动将目录添加到我的文章中:
\mode<presentation>{\maketocframe}
\mode<article>{\tableofcontents}
不过,我还是很好奇为什么 MWE 会坏掉。如能得到任何帮助我将不胜感激。
答案1
在文章模式下,这似乎\usetheme
被忽略了。但假设您有一个名为“beamerthemeFOO.sty”的文件,其中包含以下内容
% beamerthemeFOO.sty
\usetheme{Berlin}
\newcommand{\foo}{bar}
您可以使用\usepackage{beamerthemeFOO}
(甚至 \input{beamerthemeFOO.sty}
)加载它。
因此你可以这样做:
% main.beamer.tex
\documentclass{beamer}
% [main.tex]
\usepackage{beamerthemeFOO}
\begin{document}
\frame{\foo}
\end{document}
和:
% main.article.tex
\documentclass{scrartcl}
\usepackage{beamerarticle}
\setjobnamebeamerversion{main.beamer}
% [main.tex]
\usepackage{beamerthemeFOO}
\begin{document}
\frame{\foo}
\end{document}