这可能是pdfcomment
软件包中的一个错误,也可能不是。我使用\pdfmarkupcomment[]{}{}
宏将突出显示插入到图形的标题中。然后是标签。我使用\autoref
或引用该图形\cleverref
。在这两种情况下,引用都会失败,并且我会收到警告:
LaTeX 警告:输入行 14 上标签类型“zref@unique”的 cref 参考格式未定义。
此示例的代码如下:
\documentclass{article}
\usepackage{pdfcomment}
\usepackage{cleveref}
\begin{document}
\begin{figure}
\caption{\pdfmarkupcomment{Hello}{}}
\label{fig:myLabel}
\end{figure}
\cref{fig:myLabel}
\end{document}
现在我对此有所了解。突出显示是通过在文本中插入超链接/标签来实现的,看起来插入到标题中的链接/标签与我在标题后创建的标签之间存在冲突。
有办法解决这个问题吗?
编辑:---(请注意,我更改了引用以及两个包的加载顺序)---
我在这方面付出了更多的努力,提高了对问题的理解,尽管还没有找到解决方案
我之前遇到的“未定义”警告与插入类似于或的标签类型pdfcomment
的标签有关。zref@unique
figure
table
我使用了以下修改后的代码:
\documentclass{article}
\usepackage{pdfcomment}
\usepackage{cleveref}
\makeatletter
\crefname{zref@unique}{CLEVERzref}{CLEVERzrefs} % defining name for cleverref
\newcommand{\zref@uniqueautorefname}{AUTOzref} % defining name for autoref
\makeatother
\begin{document}
\begin{figure}
\caption{\pdfmarkupcomment{Hello}{}}
\label{fig:myLabel}
\end{figure}
cleverref: \cref{fig:myLabel}
autoref: \autoref{fig:myLabel}
\end{document}
获得以下输出且没有警告消息:
因此,目前未知的是,在引用时,为什么既要定位标签cleveref
又要hyperref
定位pdfcomment
注释块内的标签,而不是给出的标签。
答案1
这与问题中的根本问题是一样的amsmath 和 pdfcomment 之间的冲突,即pdfcomment
在内部使用标签系统并且不会自行清理。该问题的解决方案不起作用的原因是您使用了hyperref
和,cleveref
它们都会向标签参考系统添加内容,并且必须考虑到这一点:仅仅重置是不够的,您还 @currentlabel
必须重置@currentHref
和。定义一个正确设置其内容的内部命令,因此我们只需要调用它,但是没有(据我所知)所以我们必须将的新定义复制到一个执行相同操作的命令,只是它不会增加计数器。\cref@currentlabel
hyperref
cleveref
\refstepcounter
\refsetcounter
据我所知,这是执行该操作的代码的副本!
\documentclass{article}
%\url{https://tex.stackexchange.com/questions/28313}
%\url{https://tex.stackexchange.com/q/42960/86}
\usepackage{hyperref}
\usepackage{pdfcomment}
\usepackage{cleveref}
\makeatletter
\def\refsetcounter{%
\@ifnextchar[{\refsetcounter@optarg}{\refsetcounter@noarg}%]
}
\def\refsetcounter@noarg#1{%
\cref@constructprefix{#1}{\cref@result}%
\@ifundefined{cref@#1@alias}%
{\def\@tempa{#1}}%
{\def\@tempa{\csname cref@#1@alias\endcsname}}%
\protected@xdef\cref@currentlabel{%
[\@tempa][\arabic{#1}][\cref@result]%
\csname p@#1\endcsname\csname the#1\endcsname}%
\hyper@makecurrent{#1}%
}
\def\refsetcounter@optarg[#1]#2{%
\cref@constructprefix{#2}{\cref@result}%
\protected@xdef\cref@currentlabel{%
[#1][\arabic{#2}][\cref@result]%
\csname p@#2\endcsname\csname the#2\endcsname}%
\hyper@makecurrent{#2}%
}
\crefname{zref@unique}{CLEVERzref}{CLEVERzrefs}
\newcommand{\zref@uniqueautorefname}{AUTOzref}
\let\orig@caption=\caption
\def\caption#1{%
\orig@caption{#1}\refsetcounter{figure}%
}
\makeatother
\begin{document}
\begin{figure}
\caption{%
\pdfmarkupcomment{Hello}{}%
}
\label{fig:myLabel}
\end{figure}
cleveref: \cref{fig:myLabel}
autoref: \autoref{fig:myLabel}
\end{document}
至少,它产生了我期望在您的测试文档中看到的内容。