错误的交叉引用和警告

错误的交叉引用和警告

如果我编译此代码,我会收到警告:

\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

\usepackage{amssymb,amsmath}
\usepackage{amsthm}

\theoremstyle{plain}
\newtheorem{satz}{Satz}[section]
\theoremstyle{definition}
\newtheorem{definition}[satz]{Definition}
\theoremstyle{remark}
\newtheorem{bemerkung}[satz]{Bemerkung}

\usepackage[ngerman]{varioref}
\usepackage{hyperref}

\begin{document}
Let's go to the next page.
\clearpage
\begin{bemerkung}\label{bem:1}
\begin{itemize}
\item item 1
\item item 2
\item item 3
\end{itemize}
\end{bemerkung}

As we have seen in Bemerkung~\ref{bem:1}...
\end{document}

如果我点击参考资料,我会转到第 1 页,而不是“Bemerkung”。有人知道问题可能出在哪里吗?

谢谢你!

答案1

嵌套list环境(itemize)并在发出命令时bemerkung造成混淆。hyperref\label

使用a\mbox{}跳出当前模式,\label之后下面正确放置,以及超锚点。

有趣的是,使用cleveref这个\mbox{}命令根本没有必要(无论如何我在这里推荐这个命令)。

替代解决方案:明确使用\phantomsectionbefore \label,但这可能会变得繁琐。

\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}


\usepackage{amssymb,amsmath}
\usepackage{amsthm}

\theoremstyle{plain}

\newtheorem{satz}{Satz}[section]
\theoremstyle{definition}
\newtheorem{definition}[satz]{Definition}
\theoremstyle{remark}
\newtheorem{bemerkung}[satz]{Bemerkung}

\usepackage[ngerman]{varioref}
\usepackage{hyperref}
%\usepackage[ngerman]{cleveref} %If used then after hyperref is loaded!

\begin{document}
Let's go to the next page.
\section{Foo}
\clearpage
\begin{bemerkung}
\mbox{}%
\label{bem:1}

\begin{itemize}
\item item 1
\item item 2
\item item 3
\end{itemize}

\end{bemerkung}

As we have seen in Bemerkung~\ref{bem:1}...
\end{document}

相关内容