\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}
尝试增加额外的空间以满足您的喜好。