重新定义 \label 和 \ref 命令,使它们无需与 \caption 或 \captionof 相邻即可工作

重新定义 \label 和 \ref 命令,使它们无需与 \caption 或 \captionof 相邻即可工作

我一直尝试在nor之后使用\labeland \refeither ,如下所示:\caption\captionof

Figure \Roman{chapter}.\arabic{figure}: The caption % A manually created caption
\label{fig:the_ref_name} % the ref that sould ref the \Roman{chapter}.\arabic{figure} number

有没有办法使用这对命令,而不必将它们放在\caption或之后\captionof,但这样我就不会失去继续引用方程式、图形、表格和所有通常会引用的东西的能力?

答案1

\label命令根据内部宏为标签存储一个值。该宏由类似 的命令和类似 的环境\@currentlabel设置。但是,您也可以自己设置它,然后下一个命令将采用您指定的值。\section\begin{figure}\label

因为\@currentlabel是包含符号的内部宏@,所以您需要\makeatletter围绕\makeatother使用宏的代码。以下 MWE 使用\edef(扩展定义)为宏分配一个值,以确保计数器由实际值表示。

\documentclass{report}
\begin{document}
\chapter{My chapter}
\setcounter{figure}{8} % set the figure counter to some number for illustration purposes
Figure \Roman{chapter}.\arabic{figure}: The caption % A manually created caption
\makeatletter\edef\@currentlabel{\Roman{chapter}.\arabic{figure}}\makeatother% set value for use by \label
\label{fig:the_ref_name} % assign the label
\section{New section}
As we have seen in Figure \ref{fig:the_ref_name}, figures can have captions.
\end{document}

结果(经过两次编译将标签写入辅助文件并读回):

在此处输入图片描述

上面的代码旨在说明设置内部标签值,随后将其分配给 之类的标签的原理fig:the_ref_name。但是,这当然不太实用。您可以编写一个小宏来同时生成标题和设置标签值:

\documentclass{report}
\makeatletter
\newcommand{\customfigcaption}[1]{%
Figure \Roman{chapter}.\arabic{figure}: #1%
\edef\@currentlabel{\Roman{chapter}.\arabic{figure}}%
}
\makeatother

\begin{document}
\chapter{My chapter}
\setcounter{figure}{8}
\customfigcaption{The caption}
\label{fig:the_ref_name} % assign the label
\section{New section}
As we have seen in Figure \ref{fig:the_ref_name}, figures can have captions.
\end{document}

输出与上面相同。

最后添加的是添加一个幻像部分,允许标签被引用hyperref

\documentclass{report}
\usepackage{hyperref}
\makeatletter
\newcommand{\customfigcaption}[1]{%
Figure \Roman{chapter}.\arabic{figure}: #1%
\csname phantomsection\endcsname%
\edef\@currentlabel{\Roman{chapter}.\arabic{figure}}%
}
\makeatother

\begin{document}
\chapter{My chapter}
\setcounter{figure}{5}
\customfigcaption{The caption}
\label{fig:the_ref_name} % assign the label
\section{New section}
As we have seen in Figure \ref{fig:the_ref_name}, figures can have captions.
\end{document}

在此处输入图片描述

相关内容