我有一段带有图片的简短文本,需要在文档中多次使用。我想到的合理解决方案是将文本放在一个文件中,并在需要时调用该文件,如下所示:
\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
\prefix
image
\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:image
和second: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}