考虑一个浮点图像
\begin{figure}[h]
\includegraphics[width=1.0\textwidth]{ebooks.jpg}
\captionof{figure}{This is a test}
\label{fig: 1}
\end{figure}
是否可以在文档的开头定义图形,并在第一次描述图形后(当术语Figure X
第一次出现在文本中时)自动显示图形?
事实上,它应该寻找该术语的第一次出现,Figure X
并将数字放置在靠近该术语的位置。
一般来说,我想知道如何在文本中搜索一个术语并显示接近该术语的图形。
答案1
实现此目的的一种可能方法是将每个图形保存在与fig/
目录中的标签相同的单独文件名中。然后修改\ref
宏以在此时包含该图形(如果尚未包含该图形)。
为了允许对同一张图进行多次引用,我们只需要在第一次引用时包含该图像,而无需在任何后续引用中包含该图像。
为了简单起见,我在下面定义了一个新的宏\figref
来执行此操作,并且图形出现在第 3 页,并且在后续引用中不会再次出现:
笔记:
- 要按原样运行下面的测试用例,该目录
fig/
必须已经存在于您运行它的目录中 - 我使用
filecontents
环境将这个测试用例打包成一个文件,并不建议使用它来为图形创建单独的文件,尽管你当然可以这样做。 - 虽然我定义了一个新的宏,但当然可以重新定义现有的
\ref
宏来提取冒号前后的部分,并针对冒号之前的部分的情况采取适当的行动fig
。
进一步增强:
- 下面我定义了每次插入图形时的一个命令名称,以抑制重复图像。由于标签过程已经对进行了检查
multiply-defined labels
,因此可以通过重复使用相同的方法来增强此代码。
代码:
\documentclass{article}
\usepackage{graphicx}% Remove [demo] for real usage
\usepackage{lipsum}% For dummy text
\usepackage{xcolor}
\usepackage{caption}
\usepackage{filecontents}
\begin{filecontents*}{fig/1.tex}
\begin{figure}[htbp]
\centering
\includegraphics[width=0.5\textwidth]{images/EiffelWide.jpg}
\captionof{figure}{This is a test}
\label{fig: 1}
\end{figure}
\end{filecontents*}
\makeatletter%
\newcommand{\figref}[1]{%
\ifcsname @LoadedFile#1\endcsname%
\else%
\input{fig/#1}%
\global\expandafter\def\csname @LoadedFile#1\endcsname{}%
\fi%
Figure~\ref{fig: #1}%
}%
\makeatother%
\begin{document}
\lipsum[1-11]
\textcolor{red}{Now as we can see from \figref{1} we can conclude.}
\textcolor{red}{But what if again refer to \figref{1}, the figure should not be included again!!}
\end{document}