为什么我不能在数学模式下更新 \label 命令?

为什么我不能在数学模式下更新 \label 命令?

当我撰写论文并想要引用文档不同部分的章节、图表或公式时,我最终会花费大量时间滚动浏览源代码,以便能够看到我给它赋予了什么标签。

由于浏览我的 PDF 输出比浏览文本源更容易,所以我想到了一个想法,通过暂时覆盖\label在页边距中显示标签的命令来使这项任务变得容易得多。这将为我在草稿上工作时节省大量认知负荷,而且一旦到了提交最终版本的时候,我就可以将其改回来。

marginnote包甚至可以在数学模式下将注释放在边缘,因此我尝试了这个:

\usepackage{marginnote}

\let\oldlabel\label
\renewcommand{\label}[1]{\marginnote{\scriptsize #1}\oldlabel{#1}}

这对于章节标题和图表来说非常有效,但对于方程式,我在页边空白处看不到任何注释。此外,如果我这样做

\renewcommand{\label}[1]{HELLO}

方程式的交叉引用仍然正确生成,并且方程式中没有出现“HELLO”。我尝试将其放在\renewcommand后面\begin{document},但这没有任何区别。

那么这是怎么回事?为什么我无法\label在数学模式下重新定义?有没有什么办法可以解决这个问题?

附录

正如@Werner 在评论中指出的那样,有一些软件包showkeysshowlabels可以完成我在这里尝试做的事情。但是,这两个软件包都没有提供我想要的对标签外观的控制,所以我仍然对推出自己的版本感兴趣。

答案1

您的代码不可能与 配合使用amsmath。但是已经有一个包可以完成您想要的工作。

\documentclass{article}
\usepackage{amsmath}
\usepackage[right]{showlabels}

%% remove the braces around the labels
\makeatletter
\def\SL@margintext#1{{\showlabelsetlabel{\SL@prlabelname{#1}}}}
\makeatother

\begin{document}
\section{First}\label{sec_first}

Some text
\begin{align}
a&=b\label{eq:a_b}\\
c&=d\label{eq:c_d}
\end{align}
\end{document}

在此处输入图片描述

答案2

作为临时措施,我正在使用showkeys带有以下代码的包:

\usepackage{url}
\usepackage[notref]{showkeys}

\DeclareUrlCommand\escapeus{\urlstyle{rm}}
\renewcommand{\showkeyslabelformat}[1]{\scriptsize \escapeus{#1}}

url 包是必需的,因为我在标签中使用下划线,而showkeys默认情况下无法正确显示。

但是,这并不能 100% 令人满意,因为出于某种原因,它将公式标签放在右边距,将部分标签放在左边距。由于我不想要这个,而且似乎没有办法改变它,所以我仍在寻找我最初问题的答案。

相关内容