![\input{...} 中的表引用不正确](https://linux22.com/image/275954/%5Cinput%7B...%7D%20%E4%B8%AD%E7%9A%84%E8%A1%A8%E5%BC%95%E7%94%A8%E4%B8%8D%E6%AD%A3%E7%A1%AE.png)
我搜索了一下,但找不到我的问题的正确答案。
我为一份报告定义了多个表格。假设一些表格出现在报告的主要内容中,为了进一步说明,它们也在附录中进行了定义。
由于它们会在最后一刻进行修改,所以我不想创建两次相同的表,因此我使用命令插入它们\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
应该可以修复您的错误。