\ref 显示正确的标签,但跳转到错误的 \label

\ref 显示正确的标签,但跳转到错误的 \label

在这个 MWE 中,您可以看到/探索(希望如此,因为它对我来说不起作用)它\ref{tab:2}会产生正确的标签,但如果您单击它,它会引导您到\label{tab:1}\usepackage{appendix}并且\begin{appendix} ... \end{appendix}没有帮助,因为我认为我\label在正确的位置使用了。

编辑:将 \numbering 放在 hyperref 后面的解决方案效果很好 (!),但与 subfigures 结合时出现了另一个错误。如果将 \numbering 放在 subfigure 包的包含之前,标签将不再合适。我听说 hyperref 出于某些原因应该是最后包含的包,但作为此错误的解决方案:我可以将 \usepackage{subfigure} 放在 hyperref 和 \numbering 之后吗?

\documentclass[12pt,a4paper]{scrartcl}
\KOMAoptions{captions=tableheading}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{thumbpdf}
\usepackage{graphicx}
\usepackage{subfigure}
\usepackage{color}
\usepackage[
  colorlinks,
  allcolors = blue,
]{hyperref}
\numberwithin{equation}{section}
\numberwithin{figure}{section}
\numberwithin{table}{section}

\begin{document}
    \section{sec one}
    \begin{table}[!h]
        \caption{Tab one}
        \label{tab:1}
        \centering
        \renewcommand{\arraystretch}{1.2}
        \begin{tabular}{l|c|c}
            1 & 2 & 3\\
        \end{tabular}
    \end{table}
    MWE, more in the appendix, tab \ref{tab:2}
    \section{sec two}
    \begin{figure}[!h]
        \centering
        \subfigure[left fig \label{fig:left}]{\includegraphics[width=0.49\linewidth]{default.png}}
        \subfigure[right fig \label{fig:right}]{\includegraphics[width=0.49\linewidth]{default.png}}
    \caption{left and right fig}
    \end{figure}
    Next Problem: subfigures \ref{fig:left}
    \appendix
    \clearpage
    \section{appendix}
    \subsection{to sec one}
    \begin{table}[!h]
        \caption{Tab two}
        \label{tab:2}
        \centering
        \renewcommand{\arraystretch}{1.2}
        \begin{tabular}{l|c|c}
            1 & 2 & 3\\
        \end{tabular}
    \end{table}
\end{document}

答案1

hyperref支持\numberwithin,但前提是它知道这一点。因此,\numberwithin应该使用包裹hyperref

进一步说明:

  • 选项allcolors通过选项 简化了将颜色设置成一种颜色的操作colorlinks

  • 包自动hyperref检测驱动程序pdftex,不需要明确设置。

  • KOMAScript 选项captions=tableheading修复了表格上方使用的表格标题周围的跳过设置。因此,可以删除空行 hack。

完整示例:

\documentclass[12pt,a4paper]{scrartcl}
\KOMAoptions{captions=tableheading}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{thumbpdf}
\usepackage{color}
\usepackage[
  colorlinks,
  allcolors = blue,
]{hyperref}
\numberwithin{equation}{section}
\numberwithin{figure}{section}
\numberwithin{table}{section}

\begin{document}
    \section{sec one}
    \begin{table}[!h]
        \caption{Tab one}
        \label{tab:1}
        \centering
        \renewcommand{\arraystretch}{1.2}
        \begin{tabular}{l|c|c}
            1 & 2 & 3\\
        \end{tabular}
    \end{table}
    MWE, more in the appendix, tab \ref{tab:2}

    \appendix
    \clearpage
    \section{appendix}
    \subsection{to sec one}
    \begin{table}[!h]
        \caption{Tab two}
        \label{tab:2}
        \centering
        \renewcommand{\arraystretch}{1.2}
        \begin{tabular}{l|c|c}
            1 & 2 & 3\\
        \end{tabular}
    \end{table}
\end{document}

答案2

pdftex 在日志中警告你目标锚点不是唯一的

l.43         \caption{Tab two}
                              pdfTeX warning (ext4): destination with the same 
identifier (name{table.1}) has been already used, duplicate ignored
<to be read again> 

正如 Heiko 所写,在这种情况下,最简单的方法是移动\numberwithin命令并让 hyperref 处理它。手动解决方案是重新定义,\theHtable以便提供唯一的表示。

\ \\还应避免在标题后 插入空格。此类空格可以通过选项和设置长度来更改。

\documentclass[12pt,a4paper,
               captions=tableabove,  %better spacing after table captions
               ]{scrartcl}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\numberwithin{equation}{section}
\numberwithin{figure}{section}
\numberwithin{table}{section}


\usepackage{thumbpdf}
\usepackage{color}
\usepackage[
  colorlinks,
  citecolor = {blue},
  linkcolor = {blue},
  urlcolor  = {blue}]{hyperref}

\renewcommand\theHtable{\thesection.\thetable} 

\begin{document}
    \section{sec one}
    \begin{table}[!h]
        \caption{Tab one}
        \label{tab:1}
        \centering
        \renewcommand{\arraystretch}{1.2}
        \begin{tabular}{l|c|c}
            1 & 2 & 3\\
        \end{tabular}
    \end{table}
    MWE, more in the appendix, tab \ref{tab:2}

    \appendix
    \clearpage
    \section{appendix}
    \subsection{to sec one}
    \begin{table}[!h]
        \caption{Tab two}
        \label{tab:2}
        \centering
        \renewcommand{\arraystretch}{1.2}
        \begin{tabular}{l|c|c}
            1 & 2 & 3\\
        \end{tabular}
    \end{table}
\end{document}

相关内容