我可以从图 10 开始全局更改所有图形和对图的引用吗?
那么数字 10 以及所有对 10 的引用都变成 11 等等?
我可能应该补充一下,我有大约 30 个图,并在图 9 上方添加了一个图,取代了我当前的数量。这就是为什么我需要重新标记所有图和对图的引用。
当前图形标签:
\label{fig:fig1}
,\label{fig:fig2}
, 等等
答案1
不建议用数字来标记图形或其他元素。标签只是一个任意字符串,它应该容易记住或至少有意义,并且与引用对象分配的任何特定数字无关。
你遇到了一个很常见的问题:一份文件只有在完成后才算完成。重复?也许吧,但直到一份文件完成,你不能知道某个部分或某个图形将被分配什么编号,因为您或您的主管或编辑可能会要求将一个部分分成两个,合并两个部分,将一个图形移动到另一个图形之后;可能性是无穷无尽的。
因此,如果你的章节是关于毕达哥拉斯定理的,最好用一个字符串标记它,以提醒你该章节的内容:
\section{Pythagoras' theorem}\label{sec:pythagoras}
您可以使用它来引用\ref{sec:pythagoras}
,然后就会出现正确的数字。无需知道实际数字。
对于图形来说也是一样:
\begin{figure}
\centering
\includegraphics{duck}
\caption{Picture of a duck}\label{fig:duck}
\end{figure}
要获取图形编号,只需输入\ref{fig:duck}
。
在编写文档时,加载这样的包showkeys
非常有用,因为它会显示它们引用的元素旁边的标签,因此在引用时很容易选择正确的名称。
如何解决您的特定问题?只需加载showkeys
包并在引用时查找您已经拥有的名称。\label{fig:new}
为新图添加或任何您喜欢的内容,保持其他不变。下一个图仍将具有\label{fig:fig10}
,但具有
\ref{fig:fig10}
你会得到正确的11号,无需其他干预。引用时记住它即可。
警告对于文档的最终版本,删除了 的加载showkeys
。
答案2
根据 @texenthusiast 的想法,也可以使用图形的文件名作为标签。由于两者都应该是描述性的,因此保持它们同步是合乎逻辑的。这可能是代码:
\documentclass{article}
\usepackage{graphicx}
\usepackage{letltxmacro}
% Save the figure's name in a macro to use the name at the end of the figure environment.
% This is needed, as the label has to be given after the caption command and directly before
% the end of the figure environment is the only place where this is guaranteed.
\LetLtxMacro{\includegraphicsOld}{\includegraphics}
\renewcommand{\includegraphics}[2][]{%
\includegraphicsOld[#1]{#2}%
\def\currentFigureName{#2}%
}
\let\endfigureOld\endfigure
\renewcommand{\endfigure}{%
\label{fig:\currentFigureName}%
\endfigureOld
}
\begin{document}
\begin{figure}
\includegraphics{mtsbwy}
\caption{Description of my figure}
\end{figure}
This is my figure \ref{fig:mtsbwy}.
\end{document}
尽管没有明确设置标签,但引用是正确的。请注意,也可以手动设置和使用标签,因此如果默认启用标签,则不会出现任何问题。
如果一个图形在一个文档中第二次使用,则添加的功能可能会破坏第一个标签。但这似乎相当奇怪,可以通过将所有图形名称保存在全局宏中轻松修复。然后会检查图形是否已加载,并且可以选择新标签(fig:mtsbwy2
或类似的东西,甚至可能是递归的)。
我可以想象一个包含此代码的包,如果加载了 subfloat 命令,可能还会支持它们。这是个好主意吗,还是有理由最好不要这样做?我期待评论。