Beamer 文章模式 + amsart 冻结 latex

Beamer 文章模式 + amsart 冻结 latex

beamer如果我尝试使用article模式和样式从幻灯片中获取文章amsart,我的编译器(pdfLaTeX、LaTeX)就会陷入无限循环:

\documentclass{amsart}
\usepackage{beamerarticle}
\title{Test}
\author{Test}

\begin{document}

\begin{frame}
\frametitle{Test}
Test frame
\end{frame}

\end{document}

amsartarticlein替换\documentclass{article}可以使一切正常运行。

如果我删除\title\author 保留amsart它也会起作用...所以

  • 这是一个错误吗(来自beamer)?
  • 有没有办法使用beamerANDamsart并保留标题页信息?

答案1

准备一个文件,文件名称beameramsart.sty如下,内容如下:

\ProvidesPackage{beameramsart.sty}
\RequirePackage{etoolbox}

\newcommand{\baa@keepamsart}[1]{%
  \@for\next:=#1\do{%
    \csletcs{amsart\next}{\next}%
    \csletcs{amsart@\next}{\expandafter\string\csname\next\endcsname}%
    \expandafter\appto\expandafter\amsartnames\expandafter{\next,}%
  }%
}
\newcommand{\baa@restoreamsart}{%
  \@for\next:=\amsartnames\do{%
    \csletcs{\next}{amsart\next}%
    \csletcs{\expandafter\string\csname\next\endcsname}{amsart@\next}%
    \csundef{amsart\next}\csundef{amsart@\next}%
  }%
}

\baa@keepamsart{title,author,date}
\RequirePackage{beamerarticle}
\baa@restoreamsart

\@onlypreamble\baa@keepamsart
\@onlypreamble\baa@restoreamsart

\endinput

将此文件保存在 LaTeX 文档旁边或 TeX 可以找到的位置;在 TeX Live 发行版中,它可以是目录

~/texmf/tex/latex/beameramsart

其中~代表您的主目录;在装有 MacTeX 的 Mac OS X 上,它为

~/Library/texmf/tex/latex/beameramsart

现在您的文档可以

\documentclass{amsart}
\usepackage{beameramsart}

\begin{document}

\title{Test}
\author{Test}

\maketitle

\begin{frame}
\frametitle{Test}
Test frame
\end{frame}

\end{document}

有问题的命令在加载之前保存beamerarticle,加载之后恢复;由于 Joseph 给出的原因,保存方式有点复杂。

答案2

这就是我所说的 中的“问题” beamer,因为它更确切地说是一个错误,但修复起来并不安全。发生的事情\title通常是一条非常简单的命令:

\documentclass{article}
\show\title

> \title=macro:
#1->\gdef \@title {#1}.

amsart将其重新定义为“强健”命令。这通常没问题,但beamer会复制\title并安装新定义。当 Till Tantau 编写时beamer,他没有预料到需要处理强健命令,因此复制的方式会导致循环定义。

我将其归类为“问题”而不是错误的原因在于,在这个阶段(beamer已经使用了很多年),几乎不可能在不严重破坏某些文档的情况下更改此区域的代码。因此,唯一能做的就是忍受这个问题。正如评论中指出的那样,在涉及之前设置\title和可能是解决这个问题的最佳方法。\authorbeamer

\documentclass{amsart}
\title{AN Other}
\author{Test}
\usepackage{beamerarticle}

\begin{document}
\maketitle
\begin{frame}
\frametitle{Test}
Test frame
\end{frame}

\end{document}

相关内容