我有一个很长的 latex 文件,里面有大约 20 个图。我想在一个地方定义所有的图,这样我就可以更轻松地在 latex 中找到它们并进行编辑。figures.tex
如果需要,我可以在文档的末尾或开头或不同的文件中定义所有的图。然后我想在主文档的正文中将它们调用到我想要放置它们的任何位置。可以这样做吗?
- 使用
float
包和指定[H]
不会有帮助,因为所有的数字都将放在最后。 - 这个答案对我没有帮助,因为它只显示了如何隐藏/显示图形的子集。
- 我发现ChatGPT 提供的这个解决方案将每个图形定义为一个命令,然后在需要时调用它们,但评论表明这种方法并不好。
有没有更好的方法来实现这一点?
答案1
也许是这样的,使用\Savefigure{...}
和\Nextfigure[...]
,其中所有图形都定义在开始该文件(甚至在序言中)。
编辑添加错误检查,\Nextfigure
以确保myfigcnt
计数器不超过的值svfigcnt
。
通过在调用中不明确指定名称或数字,允许人们添加、删除或重新排列图形,而不会弄乱一些感知的命名约定。
\documentclass{article}
\usepackage{graphicx,lipsum}
\newcounter{svfigcnt}
\newcounter{myfigcnt}
\newcommand\Savefigure[1]{%
\stepcounter{svfigcnt}%
\expandafter\def\csname myfig\thesvfigcnt\endcsname{#1}%
}
\newcommand\Nextfigure[1][t]{%
\stepcounter{myfigcnt}%
\ifnum\value{myfigcnt}>\value{svfigcnt}
\par\fbox{FIGURE NOT DEFINED.}\par
\else
\begin{figure}[#1]\csname myfig\themyfigcnt\endcsname\end{figure}
\fi
}
\Savefigure{%
\centering
\includegraphics[width=.5in]{example-image-a}
\caption{Image A}
}
\Savefigure{%
\centering
\includegraphics[width=.5in]{example-image-b}
\caption{Image B}
}
\begin{document}
\lipsum[1]
\Nextfigure[h]
\lipsum[2]
\Nextfigure[h]
\lipsum[3]
\Nextfigure
\end{document}
附录
如果确实希望能够为每个图形应用命名标签,可以这样做:
\documentclass{article}
\usepackage{graphicx,lipsum}
\newcommand\Savefigure[2]{%
\expandafter\def\csname myfig#1\endcsname{#2}%
}
\newcommand\Recallfigure[2][t]{%
\ifcsname myfig#2\endcsname
\begin{figure}[#1]\csname myfig#2\endcsname\end{figure}%
\else
\par\fbox{FIGURE ``#2'' NOT FOUND}\par
\fi
}
\Savefigure{imagea}{%
\centering
\includegraphics[width=.5in]{example-image-a}
\caption{This is Image A}
}
\Savefigure{imageb}{%
\centering
\includegraphics[width=.5in]{example-image-b}
\caption{This is Image B}
}
\begin{document}
\lipsum[1]
\Recallfigure[h]{imagea}
\lipsum[2]
\Recallfigure[h]{imageb}
\lipsum[3]
\Recallfigure[h]{another figure}
\end{document}