我有一份报告,需要在正文和附录中包含另一份报告的部分内容,并且我使用命令将它们包括在内\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
将恢复 的原始含义。