标签未引用正确的数字

标签未引用正确的数字

我有一份报告,需要在正文和附录中包含另一份报告的部分内容,并且我使用命令将它们包括在内\input{some_section}

我使用以下方式引用文本中的图形:

Figure~\ref{fig:something}

效果很好,但是我收到警告,因为标签被多次定义,因为它们出现在报告的两个部分。

我是否仍然可以引用相同的图像(本质上),而无需进行硬标记(即输入图 1 而不是图~ \ref{fig:something})?

答案1

您可以向输入文件中的所有标签添加一个宏,然后手动重置它或使用 \thechapter(例如)。

\documentclass{report}
\usepackage{mathtools}

\begin{document}

Equation \eqref{first.1} and equation \eqref{first.2} are copies.

\chapter{Main}
\begin{equation}\label{first.\thechapter} a=b \end{equation}
This references the local equation \eqref{first.\thechapter}.

\chapter{Appendix}
\begin{equation}\label{first.\thechapter} a=b \end{equation}
This references the local equation \eqref{first.\thechapter}.

\end{document}

想想看,你不需要对输入的文件进行很多更改,而是可以使用

\let\oldlabel=\label
\renewcommand{\label}[1]{\oldlabel{#1.\thechapter}}

一开始

\let\label=\oldlabel

在最后。

答案2

您可能的意思是\label仅在第一次输入文件时才应处理命令。

启动要输入的文件

\ifcsname thisfilehasbeeninput\endcsname
   \global\expandafter\let\csname thisfilehasbeeninput\endcsname\relax
\else
   \makeatletter
   \let\latexlabel\label
   \def\label#1{\@bsphack\@esphack}
   \makeatother
\fi

并结束于

\ifcsname thisfilehasbeeninput\endcsname
\else
  \let\label\latexlabel
\fi

您可能不使用文件名;但是thisfilehasbeeninput每个文件的字符串都应该是唯一的,您需要输入两次。

如果文件尚未输入,则将定义一个命令,并且不会执行任何其他操作。如果文件已经输入,则将定义该命令,并且该\label命令将变为无操作。最后,\label将恢复 的原始含义。

相关内容