如何在对齐环境中重新定义 \label 命令

如何在对齐环境中重新定义 \label 命令

我对重新定义 \label在里面对齐环境。目标是允许标签命令在对齐环境内部和外部表现出不同的行为(例如图形和部分)。

这个例子没有多大意义,但应该显示了 label 命令的意外行为,它似乎被 align 环境的一些内部命令覆盖。我期望文本更换标签:eq:three在公式之后打印,并且下面的引用出错(因为缺少“真实”标签),但是标签却按常理处理。

\documentclass{article}
\usepackage{amsmath}

%%% additional commands (for testing)
\newcommand{\mytext}{\textbf{MY TEXT}}
\newcommand{\replacedtext}{\textit{REPLACED TEXT}}
\newcommand{\replacedlabel}[1]{\textbf{REPLACED LABEL: #1}}

%%% replacement of align environment
\let\alignoriginal\align
\let\endalignoriginal\endalign
\renewenvironment{align}{
  \begingroup
  \let\mytext\replacedtext
  \let\label\replacedlabel
  \alignoriginal
  }{
  \endalignoriginal
  \endgroup}

%%% document
\begin{document}

\section{Section 1}    
\replacedlabel{sec:one}
Just for your information: this is \mytext

\begin{align}
  \mytext \\ %%% just to show that mytext is replaced
  f(x) &= x^2 
  \label{eq:three} \\ %%% this label should be replaced
  g(x) &= x^3 
  \replacedlabel{eq:four} %%% this should be the behavior
\end{align}

Take a look at equation \ref{eq:three} and \ref{eq:four} and on \mytext.     
\end{document}

我想更换\标签命令\替换标签命令,这样第一个公式 (2) 的行为与第二个公式 (3) 的行为相同。这似乎是此命令与对齐环境结合使用时的一个普遍问题,因为其他替换都可以工作。

我希望有人可以帮助我(或者甚至告诉我这是不可能的)。

更新

好的,非常感谢。这就是缺失的一块拼图。事实上,我想以特定的方式打印出标签以进行调试(例如如下所示)。

\documentclass{article}
\usepackage{amsmath}
\usepackage{color}

\makeatletter

\let\labeloriginal\label
\renewcommand{\label}[1]{\labeloriginal{#1}\colorbox{red}{\scriptsize{\texttt{#1}}}\newline}
\newcommand{\eqlabel}[1]{\labeloriginal{#1}\intertext{\colorbox{red}{\scriptsize{\texttt{#1}}}}\nonumber}

\def\label@in@display#1{%
      \ifx\df@label\@empty\else
      \@amsmath@err{Multiple \string\label's:
          label '\df@label' will be lost}\@eha
      \fi
      \eqlabel{#1}%%%\gdef\df@label{#1}%
}

\makeatother

%%% document
\begin{document}

\section{Section 1}
\label{sec:one}

Just for your information:

\begin{align}
  f(x) &= x^2 
  \label{eq:three} \\
  g(x) &= x^3 
  \label{eq:four}
\end{align}

Take a look at equation \ref{eq:three} and \ref{eq:four}.

\end{document}

最后,\参考方程式出错了(它返回部分编号)但这没问题因为我只用它来调试而不是用于最终版本。

非常感谢,丹尼尔

答案1

该文件amsmath可通过texdoc -s amsmath以下方式获取:amsmath.dtx您将发现(第 30 页)的处理label

在数学环境中,align标签将被单独处理,因此您不需要重新定义环境。

我不明白这个意图,所以这里做了一个简单的修改。

\documentclass{standalone}
\usepackage{amsmath}
\usepackage{letltxmacro}
%%% additional commands (for testing)
\newcommand{\mytext}{\textbf{MY TEXT}}
\newcommand{\replacedtext}{\textit{REPLACED TEXT}}
\newcommand{\replacedlabel}[1]{\rlap{\textbf{REPLACED: #1}}}
\makeatletter
\def\label@in@display#1{%
    \ifx\df@label\@empty\else
        \@amsmath@err{Multiple \string\label's:
            label '\df@label' will be lost}\@eha
    \fi
    \replacedlabel{#1}\gdef\df@label{#1}%
}
\makeatother
\begin{document}

\section{Section 1}    
\replacedlabel
Just for your information: this is \mytext

\begin{flalign}
  \mytext \\ %%% just to show that mytext is replaced
  f(x) &= x^2 
    \label{eq:three} \\
  g(x) &= x^3 
  \label{eq:four}
\end{flalign}

Take a look at equation \ref{eq:three} and \ref{eq:four} and on \mytext.     
\end{document}

相关内容