在图标题中使用 pdfcomment 然后引用时出现问题

在图标题中使用 pdfcomment 然后引用时出现问题

这可能是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@uniquefiguretable

我使用了以下修改后的代码:

\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@currentlabelhyperrefcleveref\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}

至少,它产生了我期望在您的测试文档中看到的内容。

相关内容