我想重新定义该命令\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}}}