\triangleleft 和 \bowtie

\triangleleft 和 \bowtie

我想重新定义该命令\triangleleft,使其始终为绿色:

\let\oldtriangleleft\triangleleft
\renewcommand\triangleleft{\textcolor{green}{\oldtriangleleft}}

当我使用命令时$\bowtie$,它会抱怨“缺少 { 插入。”这是因为\bowtie是基于 定义的\triangleleft吗?在这种情况下,有解决办法吗?

答案1

我认为重新定义它不是一个好主意。但如果你有理由这样做:\bowtie被稳健地定义为

\mathrel \triangleright \joinrel \mathrel \triangleleft

因此您可以执行以下操作:

\documentclass{article}

\pagestyle{empty}

\usepackage{amsmath}
\usepackage{xcolor}

\let\oldtriangleleft\triangleleft
\renewcommand\triangleleft{\mathbin{\color{green}\oldtriangleleft}}
\DeclareRobustCommand\bowtie{\mathrel\triangleright\joinrel\mathrel\oldtriangleleft}

\begin{document}

\[A\oldtriangleleft B\]
\[A\triangleleft B\]
\[A\bowtie B\]

\end{document}

请注意,我将 new 放在\triangleleft里面\mathbin以使其成为二元运算符,并保留原始运算符的间距。

在此处输入图片描述

答案2

如果重新定义命令被其他命令使用,则该命令总是会带来一些风险。这是一个例子。

不幸的是,没有通用规则来判断重新定义是否会损害其他命令。您已经发现被\triangleleft使用,\bowtie并且几乎显然存在问题,因为\bowtie被定义为

\DeclareRobustCommand{\bowtie}{%
  \mathrel\triangleright\joinrel\mathrel\triangleleft}

fontmath.ltx你应该做的是

\let\oldtriangleleft\triangleleft
\renewcommand\triangleleft{\textcolor{green}{\oldtriangleleft}}

\DeclareRobustCommand{\bowtie}{%
  \mathrel\triangleright\joinrel\mathrel\oldtriangleleft}

并将\bowtie使用“无色”三角形。

但是,我不推荐这种方法。相反,应该为绿色三角形定义一个新命令,以反映其预期含义。

如果要以与黑色三角形相同的方式使用左侧的绿色三角形,我建议将其声明为二元运算(\triangleleft 二元关系符号):

\renewcommand\triangleleft{\mathbin{\textcolor{green}{\oldtriangleleft}}}

相关内容