\input{...} 中的表引用不正确

\input{...} 中的表引用不正确

我搜索了一下,但找不到我的问题的正确答案。

我为一份报告定义了多个表格。假设一些表格出现在报告的主要内容中,为了进一步说明,它们也在附录中进行了定义。

由于它们会在最后一刻进行修改,所以我不想创建两次相同的表,因此我使用命令插入它们\input

问题是,当我调用时\ref,给出的是附录中的表格的引用(即:A.3 而不是 1.5)。

我该如何解决呢?

表定义:

\begin{table}[htbp]
    \centering
    \begin{tabular}{ccc} \hline
    \multicolumn{3}{c}{value test}\\ \hline
    Model & \multicolumn{2}{c}{3D} \\
    $S$ & 102.60 & 66.90 \\
    $S^{macro}$ & $93.43$ & $63.90$\\
    Relative scatter (\%) & $-8.94$ & $-4.48$\\
    \hline
    \end{tabular}
    \caption{$S_{12}$ analysis}
    \label{tab:S12_analysis}
    \end{table}

例如在文档中

\begin{document}[report]

Table \ref{tab:S12_analysis}
\input{my_table.tex}

\appendix
Table \ref{tab:S12_analysis}
 \input{my_table.tex}

\end{document}

答案1

代替

 \label{tab:S12_analysis}

在您的文件上\labelthistable

然后使用

Table \ref{mytableone}
\newcommand\labelthistable{\label{mytable1}}\\input{my_table.tex}

...

\appendix
Table \ref{mynewtable}
\newcommand\labelthistable{\label{mynewtabl1}}\\input{my_table.tex}

答案2

您还将获得

There were multiply-defined labels
Label `tab:S12_analysis' multiply defined

警告。

这与 无关\input,但与同一标签出现两次有关。您可以这样做;此解决方案还会在附录中设置相同的表格编号,并且相关标题不会出现在表格列表中。

\begin{filecontents}{\jobname-table}
\begin{table}[htbp]
\centering
\begin{tabular}{crr}
\toprule
  \multicolumn{3}{c}{value test}\\
\midrule
  Model & \multicolumn{2}{c}{3D} \\
  $S$ & 102.60 & 66.90 \\
  $S^\textup{macro}$ & $93.43$ & $63.90$\\
  Relative scatter (\%) & $-8.94$ & $-4.48$\\
\bottomrule
\end{tabular}

\doublecaption{tab:S12_analysis}{$S_{12}$ analysis}

\end{table}
\end{filecontents}

\documentclass{book}
\usepackage{amsmath,booktabs}

\usepackage{xparse}

\makeatletter

\NewDocumentCommand\doublecaption { m o m }
 {%
  \ifappendix
    % If we are in the appendix, renew the \thetable or \thefigure
    % command to use the old number; also suppress the generation
    % of the entry in the list of tables/figures
    \@namedef{the\@captype}{\ref{#1}}%
    \renewcommand{\addcontentsline}[3]{}%
    % Print the caption
    \IfNoValueTF{#2}{\caption{#3}}{\caption[#2]{#3}}%
  \else
    % If we are in the main body do as usual
    \IfNoValueTF{#2}{\caption{#3}}{\caption[#2]{#3}}%
    \label{#1}%
  \fi
 }

\newif\ifappendix
\g@addto@macro\appendix{\appendixtrue}

\makeatother

\begin{document}
\mainmatter
\chapter{Test}

A reference to the table~\ref{tab:S12_analysis}

\input{\jobname-table}

\appendix

\chapter{Supplement}

\input{\jobname-table}

\end{document}

filecontents只是为了模拟您的设置,这很好,因为在文档中两次出现相同的数据会使其难以维护。

以下是主体部分的结果:

在此处输入图片描述

附录中的内容如下:

在此处输入图片描述

答案3

另一个可能的解决方案(虽然不适用于您的情况)是\label之前已定义\caption。这不起作用!

如果有人遇到未定义的引用(??\ref桌子 ??并且\autoref已经清除了 .aux 文件,我建议检查是否是这种情况。如果是,移动语句\label应该可以修复您的错误。

相关内容