Ссылка гипертекста LaTeX перешла на неправильную страницу

Я пытаюсь создать ссылку на float, который не использует подпись. Если я включаю \label {foo} в float и ссылаюсь на него с помощью \pageref {foo}, правильный правильный номер страницы отображается в моем pdf-документе, но гиперссылка, созданная пакетом hyperref, ссылается на другую страницу (первая страница раздел). Если я включу подпись перед меткой в ​​поплавке, ссылка гиперрефера перейдет на правильную страницу.

Есть ли способ получить правильную работу гиперрефикса, не включая заголовок в поплавке? Или еще есть способ подавить отображение заголовка, чтобы я мог включить его без его отображения?

Ниже приведен минимальный пример. Если я обработаю его с помощью pdflatex, я получу три страницы. "Рисунок" отображается на второй странице, а на третьей странице правильно сказано "См. Рисунок на стр. 2.". Но гиперссылка на "2" говорит "Перейти на страницу 1", и если я нажму на нее, она переведет меня на страницу 1.

Если я помещаю пустой \caption {} перед \label {foo}, то гиперссылка работает правильно, но я не хочу отображать заголовок для моего float.

\documentclass[11pt]{memoir}

\usepackage{hyperref}

\begin{document}

some text
\clearpage


\begin{figure}
  a figure
  \label{foo}
\end{figure}

more text
\clearpage


See figure on page \pageref{foo}.

\end{document}

Ответ 1

Команда \label ссылается на последний вызов \refstepcounter. \caption распознает, что он находится в фигурной среде и вызывает \refstepcounter{figure}. Вы можете вызвать \refstepcounter самостоятельно.

Чтобы избежать пропуска числа в серии цифр, вы можете создать собственный, бессмысленный счетчик с \newcounter{dummy}. Результат:

\documentclass{scrreprt}
\usepackage{hyperref}
\newcounter{dummy}
\begin{document}

\chapter{First}

\newpage
\begin{figure}
{\Huge FIGURE}
\refstepcounter{dummy}
\label{fig:figure}
\end{figure}

\chapter{Second}

Goto \pageref{fig:figure}

\end{document}

Создает гиперссылку в конец рисунка. (работает на моей машине:-) Заметьте, что \ref{fig:figure} не имеет смысла.

Ответ 2

Прямо перед меткой используйте \phantomsection, например:

\documentclass{memoir}
\usepackage{hyperref}
\begin{document}
some text
\clearpage
\begin{figure}
a figure
\phantomsection
\label{foo}
\end{figure}
more text
\clearpage
See figure on page \pageref{foo}.
\end{document}

:)

Ответ 3

Загрузка пакета caption должна подавлять вывод заголовков пустых подписей. Метки для поплавков всегда определяются командой caption, предшествующей команде label.