当我\ref*{xx}
在 中使用 时beamer
,它会给我一个错误:“ pdfTeX warning (dest): name{*} has been referenced but does not exist
。” 这是beamer
什么问题,还是我遗漏了什么?
如果我运行常规 MWE,它会运行得很好。
\documentclass{article}
\usepackage{hyperref}
\usepackage{lipsum}
\begin{document}
\section{First}
\lipsum[1-3]
\section{Second}
\lipsum[4-5]
Label \label{jh}
\section{Third}
\lipsum[6-9]
Reference: \ref*{jh}
\end{document}
它在那里打印“2”,没有超级引用。
但是在 中beamer
,我的 mwe 给出了我在开始时提到的错误。
\documentclass{beamer}
\begin{document}
\section{test section}
\begin{frame}
Label: \label{jh}
\end{frame}
\begin{frame}
Reference: \ref*{jh}
\end{frame}
\end{document}
常规\ref
(无星号)效果很好。它会打印参考资料,并使其变得生动。
我今天从 CTAN 下载了beamer
,我oberdiek
还下载了,因为我收到了一些关于已加载软件包日期的警告,这个问题我已经解决了。除此之外,我还有 Ubuntu 10.04 软件包管理器附带的 TeXLive 2009。
(FWIW,我想要,\ref*
因为参考文献来自另一份由 提供的文件xr.sty
。)
答案1
beamer
和hyperref
(由 加载beamer
)似乎陷入了纠缠,每个都保存了一个“原始”版本,\ref
并且每个都添加了额外的功能。
这将使事情回到定义的方向hyperref
,我不确定beamer
它会失去多少功能,但它似乎在这个例子中起作用,
\documentclass{beamer}
{\def\protect{\global\let\YesIMeanThisRef}\ref}
\AtBeginDocument{\def\ref{\protect\YesIMeanThisRef}}
\begin{document}
\section{test section}
\begin{frame}
Label: \label{jh}
\end{frame}
\begin{frame}
Reference: \ref*{jh}
\end{frame}
\end{document}
答案2
详细阐述大卫的回答,beamer
做修改\ref
,就像大多数其他宏和环境一样。在beameroverlay.sty
,则执行以下操作:
\AtBeginDocument
{
\let\beamer@origref=\ref
\long\def\ref#1{\hyperlink{#1}{\beamer@origref{#1}}}
}
\ref
删除(since )的星号功能\hyperlink{*}{...}
没有意义。这是一个最小示例,它\reff
改进了原始的星号变体。我相信您也可以用\ref
这种方式重新定义。
\documentclass{beamer}% http://ctan.org/pkg/beamer
\usepackage{xparse}% http://ctan.org/pkg/xparse
\makeatletter
\NewDocumentCommand{\reff}{s m}{%
\IfBooleanTF{#1}% Check for starred variant
{\beamer@origref{#2}}% \reff*
{\hyperlink{#2}{\beamer@origref{#2}}}% \reff
}
\makeatother
\begin{document}
\section{test section}
\begin{frame}
Label: \label{jh}
\end{frame}
\begin{frame}
Reference: \ref{jh}, \reff{jh}, \reff*{jh}
\end{frame}
\end{document}