我对重新定义 \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}