在图形环境中的表格上使用 \autoref

在图形环境中的表格上使用 \autoref

我希望我的文档中同时显示一个图和一个表,因此我使用了图形环境,用 绘制了图tikzpicture,链接到此文件,然后添加了命令\captionof,然后在表格环境中添加了表。在我的文档中,引用表格时显示的是 Abb. 而不是 Tab.。当在新文档中使用完全相同的代码引用表格时,显示的\autoref是 Tab.,这是应该的。虽然在我的文档中显示的是 Abb. 而不是 Tab.,但枚举遵循表格之一,而不是图形。

\documentclass[12pt]{article}
\usepackage{hyperref}
\usepackage{capt-of}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\addto\captionsngerman{\def\figurename{Abb.}}
\addto\extrasngerman{\def\figureautorefname{Abb.}}
\addto\extrasngerman{\def\tableautorefname{Tab.}}
\begin{document}
\begin{figure}
\centering
    %Figure
    \begin{tikzpicture}
        \begin{axis}
            \addplot coordinates{(1,1)};
        \end{axis}
    \end{tikzpicture}
    \caption{CAPTION}
    \label{figure}
    %Table
    \captionof{table}{CAPTION\label{tab:LABEL}}
        \begin{tabular}{ccc}
            akbvk & laknflfk& kanfkf  \\
        \end{tabular}
\end{figure}

Refering to the figure (\autoref{figure}) and refering to the table (\autoref*{tab:LABEL})
\end{document}

代码显示了一个最小示例,它在新文档中按预期工作,但插入到我现有的文档中后突然不起作用。\addto两个文档中的包和命令相同。我的论文已经有 50 页了,我不想发表它,你(可能)也不想深入研究它以找出问题所在,但也许你知道问题可能是什么……

已编入我的文档 编入新文档

第一张图片显示的是我的文档(论文)中上面给出的代码,第二张图片显示的是新文档中给出的代码。

编辑:我将论文中使用的所有包复制到新文档中,然后一个接一个地删除包,这样我发现 subfig 包导致了错误:

\documentclass[12pt]{article}
\usepackage{hyperref}
\usepackage{capt-of}
\usepackage{subfig}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\addto\captionsngerman{\def\figurename{Abb.}}
\addto\extrasngerman{\def\figureautorefname{Abb.}}
\addto\extrasngerman{\def\tableautorefname{Tab.}}
\begin{document}
\begin{figure}
\centering
%Figure
\begin{tikzpicture}
    \begin{axis}
        \addplot coordinates{(1,1)};
    \end{axis}
\end{tikzpicture}
\caption{CAPTION}
\label{figure}
%Table
\captionof{table}{CAPTION\label{tab:LABEL}}
    \begin{tabular}{ccc}
        akbvk & laknflfk& kanfkf  \\
    \end{tabular}
\end{figure}

Refering to the figure (\autoref{figure}) and refering to the table (\autoref*{tab:LABEL})
\end{document}

因为我不想错过 subfig,你知道如何绕过这个问题吗?

答案1

\captionsetup[type=table]最简单的解决方案是在之前加上一个明确的\captionof{table}{...}

显然,\captionof根本不应该在浮动环境中使用,它似乎会抓取错误的\@captype内容。最终,这会将错误的锚点名称写入.aux文件,然后从中\autoref抓取其信息以确定名称。

或许,抱团并不是最好的方式。

但是,该包cleveref提供了正确的名称!

\documentclass[12pt]{article}

\usepackage{capt-of}
\usepackage{subfig}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\usepackage{hyperref}
\addto\captionsngerman{\def\figurename{Abb.}}
\addto\extrasngerman{\def\figureautorefname{Abb.}}
\addto\extrasngerman{\def\tableautorefname{Tab.}}
\begin{document}
\begin{figure}
\centering
%Figure
\begin{tikzpicture}
    \begin{axis}
        \addplot coordinates{(1,1)};
    \end{axis}
\end{tikzpicture}
\caption{CAPTION}
\label{figure}
%Table
\captionsetup{type=table}
\captionof{table}{CAPTION\label{tab:LABEL}}
    \begin{tabular}{ccc}
        akbvk & laknflfk& kanfkf  \\
    \end{tabular}
\end{figure}

Refering to the figure (\autoref{figure}) and refering to the table (\autoref*{tab:LABEL})
\end{document}

在此处输入图片描述

相关内容