我有一组文档,每个文档都有如下参考:
\ref{figure1}
等等。这在单独构建每个文档时没有问题,但在用于\include{}
创建复合文档时会产生许多重复引用。可以重新定义\ref
和\label
命令以自动将源文件名包含在引用和标签中。否则,我必须手动编辑所有源文件,添加新引用来解决复合文档中的重复引用问题。例如,document1.tex 将具有如下引用
\ref{figure1_document1}
document2.tex 同样会有以下内容:
\ref{figure1_document2}
但我希望这能够发生自动地通过重新定义命令,而不必手动编辑每个源文件。
任何建议都值得感激!
答案1
您确实可以在本地(在每个包含的.tex
文件中)重新定义\ref
和\label
命令。以下是示例:
\documentclass{article}
\usepackage{filecontents}
\let\oldref\ref
\let\oldlabel\label
\begin{filecontents}{file1.tex}
\renewcommand{\ref}[1]{\oldref{#1-stuff}}
\renewcommand{\label}[1]{\oldlabel{#1-stuff}}
\begin{equation}\label{eq}
E=mc^2
\end{equation}
Eq. \ref{eq}
\end{filecontents}
\begin{filecontents}{file2.tex}
\renewcommand{\ref}[1]{\oldref{#1-stuff2}}
\renewcommand{\label}[1]{\oldlabel{#1-stuff2}}
\begin{equation}\label{eq}
E=mc^2
\end{equation}
Eq. \ref{eq}
\end{filecontents}
\begin{document}
\include{file1}
\include{file2}
\end{document}
在您的例子中,您可以将前两行(保存原始\ref
和\label
命令)放在主文件中,然后将放在\renewcommand
每个包含文件的开头,因为我试图使用 来模仿filecontents
。在这里,我手动提供要附加到包含文件中的每个标签的文本。替换stuff
为\jobname
不会自动附加包含文件的名称,因为\jobname
将是主文件的名称,但也许可以修补它(也许这可以帮助您)。 可能有更清晰的解决方案,但是这个似乎有效。