我正在编写一个讲座幻灯片和脚本包,供我们部门的第三人使用。
我想以透明的方式将 zref 包的功能与 beamer 一起使用,即用户应该能够继续使用该\label
命令。虽然在<article>
模式下只需let\label=\zref@label
获取\zref@newlabel
而不是\newlabel
在辅助文件中,但这在模式下不起作用<presentation>
。重新定义\beamer@origlabel
也不起作用。
请考虑以下示例:
% \documentclass{beamer}
\documentclass{article}
\usepackage{beamerarticle}
\usepackage[counter,user]{zref}
\makeatletter
\let\label=\zref@label
\makeatother
\newcounter{mycounter}
\begin{document}
\begin{frame}
\frametitle{foo}
\refstepcounter{mycounter}
\label{mylabel}
mycounter is \themycounter
\end{frame}
\end{document}
然后,可以在 aux 文件中找到:
\zref@newlabel{mylabel}{\default{1}\page{1}\counter{mycounter}}
如果我在第一行进行注释但注释掉以下两行,那么我只得到(ao):
\newlabel{mylabel}{{1}{1}{}{Doc-Start}{}}
在那里启用 zref 的最佳方法是什么?
答案1
一些counter
和\label
- 相关的命令被软件包重新定义和/或它们的动作被转移到命令\@begindocumenthook
(\AtBeginDocument
) - 这也必须这样做\let\label\zref@label
,否则它的定义会被其他设置否决。
我还没有测试过这个其他\label
命令是否会产生后果,而且我不知道它将如何配合cleveref
。
\documentclass{beamer}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage[counter,user]{zref}
\makeatletter
\AtBeginDocument{%
\let\label=\zref@label
}
\makeatother
\newcounter{mycounter}
\begin{document}
\begin{frame}
\frametitle{foo}
\refstepcounter{mycounter}
\label{mylabel}
mycounter is \themycounter
\end{frame}
\end{document}