\newlabel 参考

\newlabel 参考

这个问题提到会hyperref覆盖\newlabel,因此如果加载包,则需要六个(而不是两个)参数。我试图学习\newlabel带有和不带有的语法hyperref,但在文档 PDF这里我什么也没找到。有人能指出一个参考资料吗,我可以在哪里阅读并了解这些命令的工作原理?

答案1

\newlabel需要六个参数的语句hyperref与默认值两个相比并不正确。hyperref仍然只使用两个参数\newlabel,而是在第二个参数里面放了五个参数;默认值是在第二个参数中只打包两个元素……

\label为了更详细地了解这一点,请考虑定义方式的不同,因为它最终将写入\newlabel文件.aux;这是传统的观点\label(来自latex.ltx):

def\label#1{%
  \@bsphack
  \protected@write\@auxout{}%
    {\string\newlabel{#1}{%
      {\@currentlabel}%
      {\thepage}%
    }}%
  \@esphack}

调用\label{<label>}将写入\newlabel{<label>}{{\@currentlabel}{\thepage}}.aux解析为\@currentlabel和,\thepage无论当前标签及其页面表示应该是什么)。因此,\ref{<label>}将返回存储的\@currentlabel(通过\@firstoftwo调用),而\pageref{<label>}将返回存储的\thepage(通过\@secondoftwo调用)。

现在让我们看看\label加载时hyperref(内部nameref.dtx):

\def\label#1{%
  \@bsphack
  \begingroup
    \def\label@name{#1}%
    \label@hook
    \protected@write\@auxout{}{%
      \string\newlabel{#1}{%
        {\@currentlabel}%
        {\thepage}%
        {\@currentlabelname}%
        {\@currentHref}{}%
      }%
    }%
  \endgroup
  \@esphack
}%

现在,对 的调用\label{<label>}将写入\newlabel{<label>}{{\@currentlabel}{\thepage}{\@currentlabelname}{\@currentHref}{}}.aux请注意,前两个元素与传统的 类似\label。不同之处在于添加了三个元素(最后一个元素故意留空{})。后面的讨论在nameref 文档(部分3 实施)。

由于hyperref现在必须处理从 5 集合中提取元素,如果定义\@firstoffive\@secondoffive,... ,\@fifthoffive

最终,\newlabel传统的 andhyperref意义只适用于两个参数。只是使用 时第二个参数包含更多元素hyperref

相关内容