参考文献(\ref)未出现

参考文献(\ref)未出现

我有这个非常基本的文件:

\documentclass[12pt]{article}
\begin{document}
\label{a}
Reference \ref{a}
\end{document}

但是我编译了几次之后,得到的文档只有“参考”,而没有“参考 1”。我遗漏了什么?

答案1

\refstepcounter您没有引用任何内容,因为该小文档没有增加计数器。\label需要\refstepcounter,因为该宏定义了\@currentlabel,它保存了计数器值(或更好:参考格式)(当然,\@currentlabel可以事先定义以创建“假”标签)

现在,在之前latex.ltx定义一个空的,并且该信息被使用,所以您看到的是而不是。\@currentlabel\begin{document}\labelReferenceReference 1

那个小小的OP文档的文件.aux也很小:

\relax 
\newlabel{a}{{}{1}}

名称后面是标签名称a和交叉引用信息,即{{}{1}}。里面的第一个括号对是空的,而第二个括号的1内容是页码,而不是请求的参考编号——向文件中LaTeX写入了一个空\@currentlabel内容.aux

以下是来自(第 4089f 行)的相关代码latex.ltx,我的评论。

\def\label#1{\@bsphack
  \protected@write\@auxout{}%
         {\string\newlabel{#1}{{\@currentlabel}{\thepage}}}% Use `\@currentlabel`
  \@esphack}
\def\refstepcounter#1{\stepcounter{#1}%
    \protected@edef\@currentlabel
       {\csname p@#1\endcsname\csname the#1\endcsname}% Define `\@currentlabel`
}
\def\@currentlabel{}% Empty definition at the beginning. 

假设一个标准文档类像article,例如\section(不是\section*)在内部使用\refstepcounter{section}(实际上是\@sect调用该宏,但让我们暂时忽略这一点,也secnumdepth必须具有适当的值这一事实)并且以下示例将提供参考:

\documentclass[12pt]{article}
\begin{document}

\section{Foo}\label{a}
Reference \ref{a}
\end{document}

在此处输入图片描述

答案2

LaTeX 的\label-\ref交叉引用机制依赖于\label与某个变量关联的指令- 这可能是与或环境以及等标题counter关联的计数器- 正在递增。(递增通常发生在“幕后”,普通作者看不到。)figuretable\section\subsection

如果由于某种原因,您不想创建\label-\ref种类的交叉引用,您应该研究加载hyperref包并使用其\hypertarget-\hyperlink交叉引用机制。

\hypertarget和宏都接受 2 个参数,而不是 1 个参数(和 的\hyperlink情况一样) 。请考虑以下简单代码:\label\ref

\documentclass[12pt]{article}
\usepackage[colorlinks,allcolors=black]{hyperref}
\begin{document}
\hypertarget{item:a}{a}
\clearpage
Reference \hyperlink{item:a}{item a}
\end{document}

观察\hypertarget和相关\hyperlink指令的第一个参数是(事实上,必须是!)相同的。

编译后,会得到一个两页的文档。在编译后的文档中,如果您单击第二页中的字符串“item a”,查看器将带您到第一页上的字符串“a”。(请注意,根据示例的构造,超链接不是直接可见的,因为链接颜色在文档的序言中设置为黑色。)

答案3

在我的例子中,我使用的是 section*{} 而不是 section{}。其次,我必须将 \label 标签放在 \caption 标签下方。更改这些后,问题就解决了。

相关内容