我正在编写一些代码,以便将幻灯片中引用的参考文献直接显示在footline
Beamer 演示文稿中,但我遇到了一个令我困惑的错误。我拥有的代码(有效)如下:
\def\framerefs{}
\def\interframerefs{}
\def\clearframerefs{\gdef\framerefs{}\gdef\interframerefs{}}
\def\cite#1{\xdef\framerefs{\framerefs\interframerefs#1}\gdef\interframerefs{~}}
\defbeamertemplate{footline}{footline refs}{
\hbox{\begin{beamercolorbox}[wd=\paperwidth,dp=1ex]{refs in foot}%
\framerefs
\end{beamercolorbox}}%
\clearframerefs
}
\setbeamerfont{footline}{size=\normalsize}
\setbeamertemplate{footline}[footline refs]
但如果我希望每个引用都放在单独的行上,则更改为\cite
:
\def\cite#1{\xdef\framerefs{\framerefs\interframerefs#1}\gdef\interframerefs{\\}}
编译失败,出现容量超出错误:
! TeX capacity exceeded, sorry [main memory size=3000000].
<argument> ...le }\framesubtitle }\framesubtitle }
\framesubtitle }\framesubt...
我觉得有点奇怪,用空格作为分隔符可以正常工作,但换行符会爆炸(同样的事情也发生在 上\newline
)。有人知道哪里出了问题吗(或者有更好的方法来做我想做的换行符分隔列表的事情?
答案1
\xdef\framerefs{\framerefs\interframerefs#1}
一场即将发生的事故。
尝试
\protected@xdef\framerefs{\framerefs\interframerefs#1}
或更安全
\g@addto@macro\framerefs{\interframerefs#1}
(由于没有提供可运行的示例,因此未经测试)