![是否有 ConTeXt 宏来格式化数学表达式中的自然语言](https://linux22.com/image/363210/%E6%98%AF%E5%90%A6%E6%9C%89%20ConTeXt%20%E5%AE%8F%E6%9D%A5%E6%A0%BC%E5%BC%8F%E5%8C%96%E6%95%B0%E5%AD%A6%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%AD%E7%9A%84%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80.png)
答案1
我不同意 Aditya 关于 ConTeXt 中数学运算符定义方式的观点。正确的方法是定义一个数学标签文本并设置运算符来使用它。例如符号函数(非内置):
\setupmathlabeltext[sgn=sgn]
\definemathcommand[sgn][nolop]{\mfunctionlabeltext{sgn}}
该方法甚至允许使用依赖于语言的运算符标签(例如,在西班牙语中,正弦函数写为“sín”,但它已经是内置的)。
在这里,为了保留文本模式,您必须将标签文本包装到 中\text
。当然,将其定义为数学运算符没有任何意义。
\setupmathlabeltext[en][isprime=\text{is prime}]
\setupmathlabeltext[de][isprime=\text{ist prim}]
\definemathcommand[PRIME][nolop]{\mfunctionlabeltext{isprime}}
\starttext
$\{ x \in \naturalnumbers : x \PRIME \}$
\mainlanguage[de]
$\{ x \in \naturalnumbers : x \PRIME \}$
\stoptext
答案2
如果您确实想将其声明为运算符,则可以使用:
\unexpanded\def\defineNLoperator#1#2%
{\def#1{\mathop{\text{#2}}}}
然后你可以定义一个自然语言运算符
\defineNLoperator\PRIME{is prime}
完整示例:
\unexpanded\def\defineNLoperator#1#2%
{\def#1{\mathop{\text{#2}}}}
\defineNLoperator\PRIME{is prime}
\starttext
$\{ x \in \naturalnumbers : x \PRIME \}$
$a_{\{ x \in \naturalnumbers : x \PRIME \}}$
\stoptext