我正在写一篇很长的文档,有时我需要调用一个图形并显示它(不仅仅是\ref
文档中的一个)。现在每次我需要这个时,我都会重写 LaTeX 代码来显示该图形。有没有办法调用一个图形而不重写它?
答案1
已更新以避免重复标题和标签信息。
\documentclass{article}
\usepackage{graphics}
\makeatletter
\def\savefloat#1{%
\expandafter\def\expandafter\@endfloatbox\expandafter{%
\@endfloatbox
\global\setbox#1\copy\@currbox}}
% Stephan Lehmke's \leaders trick to stop multiple writes.
\def\usefloat#1{%
\leavevmode\leaders\copy#1\hskip\wd#1\relax}
\makeatother
\newsavebox\myfloat
\begin{document}
aaaa
\begin{figure}
\fbox{\begin{tabular}{l}a\\b\\c\end{tabular}}
\caption{hmmm}
\end{figure}
aaaa
\begin{figure}
\fbox{\begin{tabular}{l}a\\b\\c\end{tabular}}
\caption{hoooo}\label{xx}
\savefloat\myfloat
\end{figure}
bbbb
it looked like this
\fbox{\scalebox{.25}{\usefloat\myfloat}}
\end{document}
答案2
您可以将整个定义float
为命令的参数,例如\repeatedfigure
。在下面的 MWE 中,此命令接受一个参数,即要label
分配给图形的;如果不需要额外的标签,只需指定一个空参数{}
。哦,我已经将h!
位置说明符分配给重复的浮点数,因为我假设您希望将其放置在非常具体的位置。如果您对 LaTeX 放置浮点数的默认决策规则感到满意,只需删除该[h!]
指令。
\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage[demo]{graphicx} % leave off demo option in real program
\usepackage{lipsum} % for filler text
\newcommand{\repeatedfigure}[1]{%
\begin{figure}[h!] %
\caption{Repeated caption} % replace with real caption text...
\label{#1}
\centering
\includegraphics{demo.jpg} % use real filename if available
\end{figure}}
\begin{document}
\lipsum[2]
\repeatedfigure{fig:repfig}
\lipsum[2]
\repeatedfigure{}
Here's a cross-reference to Figure~\ref{fig:repfig}.
\lipsum[2]
\repeatedfigure{}
\end{document}
附录:此设置假定您希望重复图形的每个实例都有自己的标题和图形列表中的条目。如果不是这种情况,您可以\repeatedfigure
按如下方式定义宏:
\newcommand{\repeatedfigure}[1]{%
\begin{minipage}{\textwidth}
\centering
\includegraphics{demo.jpg}
\end{minipage}}
答案3
这只是其他答案的替代解决方案。我将创建一个“工厂”宏来创建用于图像和标题存储的命令。考虑文件名为“amato”的图形:
\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{caption}
\def\imagefactory#1#2{%
\expandafter\def\csname#1\endcsname{%
\includegraphics{#1}%
}
\expandafter\def\csname#1fig\endcsname{%
\includegraphics{#1}%
\captionof{figure}{#2}
}
\expandafter\def\csname#1float\endcsname{%
\figure[htbp]
\centering
\includegraphics{#1}%
\caption{#2}
\endfigure
}
}
\begin{document}
\imagefactory{amato}{This is a caption.}
\amato
\amatofig
\amatofloat
\end{document}
MWE 创建了三个命令 a) 仅用于存储并提供 的简写includegraphics
,第二个命令本质上是“此处宏 + 标题”,最后一个命令是适当的浮点数。将宏粘贴到列表中,您便拥有了一个图像数据库。根据您的需要,您可以重新调整宏以执行您想要的操作(包括避免重复引用的引用 - 按照 Dave 的出色解决方案等)。