上标 Mathrel

上标 Mathrel

我想定义也可以用于上标的数学关系。例如,我想使用

\newcommand\mesh{\mathrel{\#}}

和 都是A\mesh BA^\mesh除非我写 ,否则后者会出错A^{\mesh},但我不想记住到处都加上括号。这可能吗?

谢谢您的任何提示!

答案1

在此处输入图片描述

应该使用括号,但你可以将其声明\mesh为 mathchardef 标记而不是宏\mathrel

\documentclass{article}


\DeclareMathSymbol\mesh{\mathrel}{operators}{`\#}
\begin{document}

\[
a \mesh b + C^\mesh
\]

\end{document}

答案2

^您可以在数学模式下激活上标字符(请参阅特克斯常见问题例如)。

首先,提醒一下猫代码

  • catcode7对应于“上标”,它是 的默认 catcode ^
  • catcode12对应于“其他”(如数字和标点符号),
  • catcode13对应“active”,该角色表现得像一个宏。

^通过将数学模式中的设置\mathcode的价值"8000。此特殊代码意味着将使用 的活动定义 (catcode 13) ^,即使其实际 catcode 不同。但我们还需要将 的 catcode 更改^12(其他) 以使其处于非活动状态,因为上标将使用宏处理。

在里面\AtBeginDocument,将的原始含义保存^在命令中,比如说\my@standardsup,并^在数学模式下激活:

\AtBeginDocument{%
  \begingroup % save standard superscript definition
    \catcode`\^=7
    \global\let\my@standardsup=^
  \endgroup
  \catcode`\^=12     % set ^ catcode to other
  \mathcode`\^="8000 % make ^ active in math mode
}

当设置时\my@standardsup,我们需要确保^有其标准定义(catcode 7),以防其他包已经对其进行了修改(事实上\begingroup\endgroup在这里是没用的,因为我们紧接着重新定义了 catcode)。

现在可以定义 的活动定义来^支撑其参数并将其放在上标中:

\begingroup
  \lccode`\~=`\^
  \lowercase{\endgroup%
  \def~}#1{\my@standardsup{#1}%
}%

这里使用了一些\lowercase技巧,可以在不实际更改 catcode 的情况下做到这一点(请参阅特克斯常见问题了解详情)。

您还需要重新定义\pr@m@s宏(在 中定义latex.ltx并由素数 char 使用'),因为 的 catcode^现在是12。因此,在设置 catcode 后,只需复制其定义即可。这可以避免Double superscript在使用素数(如在x'^a和 中x''^a)时出错:

\begingroup \catcode`\^=12%
\gdef\pr@m@s{% copy of \@pr@m@s code from latex.ltx
  \ifx'\@let@token
    \expandafter\pr@@@s
  \else
    \ifx^\@let@token
      \expandafter\expandafter\expandafter\pr@@@t
    \else
      \egroup
    \fi
  \fi}
\endgroup

完整示例(使用\makeatletter\makeatother处理@字符):

\documentclass{article}

\usepackage{amsmath}

\makeatletter
\AtBeginDocument{%
  \begingroup % save standard superscript definition
    \catcode`\^=7
    \global\let\my@standardsup=^
  \endgroup
  \catcode`\^=12     % set ^ catcode to other
  \mathcode`\^="8000 % make ^ active in math mode
}

%% brace ^ argument
\begingroup
  \lccode`\~=`\^
  \lowercase{\endgroup%
  \def~}#1{\my@standardsup{#1}%
}%

%% fix prime symbol
\begingroup \catcode`\^=12%
\gdef\pr@m@s{% copy of \@pr@m@s code from latex.ltx
  \ifx’\@let@token
    \expandafter\pr@@@s
  \else
    \ifx^\@let@token
      \expandafter\expandafter\expandafter\pr@@@t
    \else
      \egroup
    \fi
  \fi}
\endgroup
\makeatother

\newcommand\mesh{\mathrel{\#}}
\newcommand\smallplus{\mathbin{\texttt{+}}}
\newcommand\indep{\mathrel{\perp\!\!\!\perp}}
\newcommand\myrel{\mathrel{\overset{\textsf{a.e.}}{\sim}}}

\begin{document}

\begin{align*}
  A \mesh B      &  & A^\mesh      &  & A^{\mesh}      &  & A'^\mesh      &  & A'^{\mesh}      \\
  A \smallplus B &  & A^\smallplus &  & A^{\smallplus} &  & A'^\smallplus &  & A'^{\smallplus} \\
  A \indep B     &  & A^\indep     &  & A^{\indep}     &  & A'^\indep     &  & A'^{\indep}     \\
  A \myrel B     &  & A^\myrel     &  & A^{\myrel}     &  & A'^\myrel     &  & A'^{\myrel}
\end{align*}

\end{document}

^ 处于活动状态

相关内容