我从我的论文风格中取出这一行,并将它添加到我的文档中(前面是\makeatletter
),它的作用是,每当我使用它\ref{figureid}
而不是只放图号时,它都会放“图 1”。
我可以对表格做同样的事情,\def\p@table{Table~)
但我不知道具体是什么:
\p@figure
\p@table
我假设它们是由 ref 内部使用的,但还有其他什么吗(例如\p@(object)
总是用作某事物的开头......)
答案1
这些是与环境相关的 LaTeX 内核宏。简单来说,任何被 包围的东西\begin{foo}...\end{foo}
都是环境。例如图形或表格。
每次插入表时,计数器都会递增。这个计数器(我们称之为)foo
有一个名为的关联宏\p@foo
。这个宏扩展为计数器 foo 的打印“引用前缀”。
当命令执行时,任何\ref
由计数器创建的值foo
都会产生扩展。justs打印计数器“foo”的值。\p@foo\thefoo
\label
\thefoo
改为foo
或就会更有意义了figure
。table
该\def
部分定义宏。例如,您可以说\def\milan{Milan Ramaiyan}
,并且每次输入时\milan
它也会扩展。Milan Ramaiyan。@
符号只是 TeX 和 LaTeX 使用的特殊符号,以避免意外覆盖命令。它需要特殊处理,这就是为什么需要makeatletter
和的原因。makeatother
答案2
除了 Yiannis 的精细解释之外:你甚至可以扩展这些\p@
宏,使其\p@figure
不仅仅是一个前缀。source2e.pdf
在部分中给出提示53.2 反向引用的扩展。
本次修改
\makeatletter
\renewcommand*\refstepcounter[1]{\stepcounter{#1}%
\protected@edef\@currentlabel
{\csname p@#1\expandafter\endcsname\csname the#1\endcsname}}
\makeatother
允许您\p@figure
使用参数进行定义,从而实现更复杂的格式。并且它仍然向后兼容原始版本。任意示例:
\renewcommand*{\p@figure}[1]{\emph{figure~(#1)}}
给出见图(1)。这样,您可以添加前缀和后缀以及格式。
答案3
Stefan 的答案的一个打包替代方案是使用包fncylab
,它进行了他提到的更改,还定义了一个\labelformat
宏来轻松操作\p@counter
s。例如,当应用于方程式上的标签时,\labelformat{equation}{(#1)}
使s\ref
的行为像\eqref
。(实际上,我在我的文档中默认激活了此功能。裸露的数字很少有用。)
答案4
我使用了\usepackage{hyperref}
并应用了\autoref{tab:minimum-cut-set}
。它将生成我们想要看到的“表 1.2”(例如)。但是,对于算法,虽然“算法”大写,但它显示“算法 2.1”(例如)。
标题表、图片均显示正常。只有算法出现了我上面提到的问题。