如果我编译此代码,我会收到警告:
\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{}
命令根本没有必要(无论如何我在这里推荐这个命令)。
替代解决方案:明确使用\phantomsection
before \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}