是否有 ConTeXt 宏来格式化数学表达式中的自然语言

是否有 ConTeXt 宏来格式化数学表达式中的自然语言

通常,使用自然语言短语来表示数学表达式中的条件很有用。例如:

素数集

显然,我能够生成上述输出,但是我对语义有点严格,所以我不得不使用一种肮脏的黑客手段:\text{ is prime}ConTeXt 中是否有一个宏可以使用任意自然语言短语作为运算符?具体来说,自然语言部分应该与运算符周围的间距相同,并使用数学字体的罗马变体。

答案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

相关内容