对同一文件两次使用 \input 导致引用错误

对同一文件两次使用 \input 导致引用错误

我有一段带有图片的简短文本,需要在文档中多次使用。我想到的合理解决方案是将文本放在一个文件中,并在需要时调用该文件,如下所示:

\documentclass[a4paper,twoside]{report}

\usepackage{lipsum}
\usepackage[pdftex]{graphicx}

\begin{document}

\chapter{First}
\lipsum[1]
\input{test}

\chapter{Second}
\lipsum[1]
\input{test}

\end{document}

文件中test.tex可重复使用的部分在哪里:

The image id is: \ref{image}

\begin{figure}[h!]
\centering
\includegraphics[scale=0.9]{randomimage}
\caption{A random caption.}
\label{image}
\end{figure}

问题是:第一个\ref是错误的,如下图所示:

错误的裁判

现在,我知道这个问题可以通过在需要时复制和粘贴文本来解决...但它有明显的缺点,我想避免它

答案1

您需要为每个实例赋予不同的标签。最简单的方法是使用宏而不是输入文件,并每次提供一个符号名称:

\documentclass[a4paper,twoside]{report}

\usepackage{lipsum}
\usepackage[demo]{graphicx}

\newcommand\fig[1]{%
The image id is: \ref{#1}

\begin{figure}[h!]
\centering
\includegraphics[viewport=0 0 100 100]{randomimage}
\caption{A random caption.}
\label{#1}
\end{figure}}

\begin{document}

\chapter{First}
\lipsum[1]
\fig{test}

\chapter{Second}
\lipsum[1]
\fig{test2}

\end{document}

答案2

您可以在标签名称前添加一个宏前缀,该前缀为每个 重新定义。带有图像的文件。它用作\input标签名称。如果未定义,则标签保留。test.tex\prefix image\prefiximage

\providecommand*{\prefix}{}
The image id is: \ref{\prefix image}

\begin{figure}[h!]
\centering
\includegraphics[scale=0.9]{randomimage}
\caption{A random caption.}
\label{\prefix image}
\end{figure}

重新定义前缀的主文件。现在这两个标签可以引用为first:imagesecond:image

\documentclass[a4paper,twoside]{report}

\usepackage{lipsum}
\usepackage{graphicx}

\newcommand*{\prefix}{}

\begin{document}

Images \ref{first:image} and \ref{second:image}.

\chapter{First}
\lipsum[1]
\renewcommand*{\prefix}{first:}
\input{test}

\chapter{Second}
\lipsum[1]
\renewcommand*{\prefix}{second:}
\input{test}

\end{document}

相关内容