重新定义 \ref 和 \label 以包含源文件名?

重新定义 \ref 和 \label 以包含源文件名?

我有一组文档,每个文档都有如下参考:

\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将是主文件的名称,但也许可以修补它(也许可以帮助您)。 可能有更清晰的解决方案,但是这个似乎有效。

相关内容