区分字母表与其他字母的条件宏

区分字母表与其他字母的条件宏

\eqrel{}{}{}我正在尝试制作一个宏,使其形式为:#1 \quad #2 \quad #3如果#2是英文或希腊字母则给出结果,#1 #2 #3否则给出结果。

我的代码:

\documentclass{article}

\usepackage{amsmath}

\newcommand{\eqrel}[3]{
    \ifcat#2\relax
    {#1#2#3}
    \else
    {#1\quad#2\quad#3}
    \fi
}
\begin{document}
\noindent
$ \eqrel{x}{\sim}{y} $\\
$ \eqrel{x}{R}{y} $\\
$ \eqrel{x}{\Omega}{y} $

\end{document}

但这不能检测希腊字母:

在此处输入图片描述

任何评论都将受到赞赏。

答案1

这可能是可行的;如果是#1控制序列,您可以假设它是一个\mathchardef标记;然后您可以检查相对数学代码以查看它所取的数学组。

但是,还有一个更简单的方法:

\newcommand{\eqrel}[3]{#1\mathrel{#2}#3}

因此中间符号被视为关系符号,与其标准性质无关。

\documentclass{article}

\usepackage{amsmath}

\newcommand{\eqrel}[3]{#1\mathrel{#2}#3}

\begin{document}

$ \eqrel{x}{\sim}{y} $

$ \eqrel{x}{R}{y} $

$ \eqrel{x}{\Omega}{y} $

\end{document}

在此处输入图片描述

如果要在非关系符号周围使用更多空间,可以执行以下操作:

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand{\check@rel}[1]{%
  \sbox\z@{\thickmuskip=0mu${}#1{}$}%
  \sbox\tw@{${}#1{}$}%
  \ifdim\wd\z@=\wd\tw@
    % #1 is not a relation symbol
    \mathrel{\;#1\;}%
  \else
    #1
  \fi
}
\newcommand{\eqrel}[3]{#1\check@rel{#2}#3}
\makeatother

\begin{document}

$ \eqrel{x}{\sim}{y} $

$ \eqrel{x}{R}{y} $

$ \eqrel{x}{\Omega}{y} $

\end{document}

在此处输入图片描述

尝试增加额外的空间以满足您的喜好。

相关内容