![为什么我不能在数学模式下更新 \label 命令?](https://linux22.com/image/283213/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%B8%8D%E8%83%BD%E5%9C%A8%E6%95%B0%E5%AD%A6%E6%A8%A1%E5%BC%8F%E4%B8%8B%E6%9B%B4%E6%96%B0%20%5Clabel%20%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
当我撰写论文并想要引用文档不同部分的章节、图表或公式时,我最终会花费大量时间滚动浏览源代码,以便能够看到我给它赋予了什么标签。
由于浏览我的 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 在评论中指出的那样,有一些软件包showkeys
和showlabels
可以完成我在这里尝试做的事情。但是,这两个软件包都没有提供我想要的对标签外观的控制,所以我仍然对推出自己的版本感兴趣。
答案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% 令人满意,因为出于某种原因,它将公式标签放在右边距,将部分标签放在左边距。由于我不想要这个,而且似乎没有办法改变它,所以我仍在寻找我最初问题的答案。