将 \label 嵌套在 \caption 中和将 \label 放在 \caption 外面有什么区别吗?

将 \label 嵌套在 \caption 中和将 \label 放在 \caption 外面有什么区别吗?

以下编码风格在行为上是否存在差异?

编码样式 A:\caption不包含\label

\begin{figure}
  \includegraphics{cat.eps}      
  \caption{This is a cat.}
  \label{fig:cat}
\end{figure}

编码样式 B:\caption括起来\label

\begin{figure}
  \includegraphics{cat.eps}      
  \caption{\label{fig:cat}This is a cat.}      
\end{figure}

答案1

我不能肯定地说,使用普通的 LaTeX,但如果你使用showlabels包(在草稿模式下非常有用),则标签会显示在两者的不同位置。

代码:

\documentclass{article}
\thispagestyle{empty}
\usepackage{graphicx}
\usepackage{showlabels}
\begin{document}

\begin{figure}
  \includegraphics{vignettes}      
  \caption{This is a cat.}
  \label{fig:cat}
\end{figure}


\begin{figure}
  \includegraphics{vignettes}      
  \caption{\label{fig:cat}This is a cat.}
\end{figure}
\end{document}

结果:

标签和显示标签

答案2

与 Latex 内部命令视图没有区别。例如,命令\addtocontents定义为

\long\def\addtocontents#1#2{%
    \protected@write\@auxout
        {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
        {\string\@writefile{#1}{#2}}}

换句话说,当或将参数传递给 TOC 和 LOF\label时,它将变为无操作。同样,等命令也会将节标题写入运行头。另一方面,开关在很多地方内部使用,以防止导致分页符,例如在节命令之后的命令中。很明显,LaTeX 被设计为将标签放在和命令内部或之后。\caption\section\markboth\if@nobreak\label\@afterheading\caption\sectionxxx

请注意,标签不能放在\caption或的短参数中\section

\caption[\label{xx}Short capt]{Long capt}% DO NOT DO THIS

因为标签将会消失。


例外:对于脚注,标签必须位于脚注本身内,否则它不会被定义并且将引用当前活动计数器,该计数器可能是章节计数器。

答案3

据我所知,编码样式 A 和 B 之间只有两点区别:

  1. A 是图形环境的常规顺序。
  2. A 更容易阅读。

答案4

如何修复 \afterpage 之前的单页上的段落标题和 \afterpage 之后第一页上的文本?

上面的帖子说明了在顶部使用编码样式 B(标记内的标签被标记为\caption{\label{fig:cat}This is a cat.})是获得正确结果的必要条件的情况。具体来说,在那种情况下, 的编码\paragraph{title}\label{text}会导致与\afterpage包一起出现错误的分页,而 则\paragraph{title\label{text}}不会。

此外,根据该线程,最好将标签放在被标记的项目内。

那么标签的位置可能会产生其他影响吗?

相关内容