我一直尝试在nor之后使用\label
and \ref
either ,如下所示:\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}