You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Typst中创建自定义函数实现数学模式内容着色

在Typst中实现数学内容着色的自定义函数

核心解决方案

针对你的需求,这里有两种简洁可行的函数实现方式,解决调用繁琐和变量未定义的问题:

方案一:直接引用文本模式颜色变量

#let col_math(content, color) = math(fill: color, content)

调用示例(数学模式内直接使用):

$col_math(s_2^-, #red)$

这里#red的作用是在数学模式中切换到代码求值环境,引用文本模式的预定义颜色变量——因为数学模式默认解析数学符号,直接写red会被当作数学标识符而非颜色变量,所以必须加#来获取文本环境的变量。

方案二:传递颜色名字符串

如果觉得加#麻烦,可以让函数接受颜色名字符串,内部自动解析为颜色值:

#let col_math(content, color_name) = math(fill: color(color_name), content)

调用示例:

$col_math(s_2^-, "red")$

这种方式支持所有Typst兼容的颜色名字符串,比如"blue"、"#ff6600"等。

关于#的使用时机

简单总结Typst中#的核心场景:

  • 普通文本模式:插入代码表达式(函数调用、变量引用)时必须加#,比如你之前写的#colMath($s_2^-$, red),就是在文本环境中触发代码执行。
  • 数学模式:默认是数学语法解析,若要引用文本环境的变量(如预定义颜色)或执行代码逻辑,需要加#切换到代码环境;传递纯数学内容或字符串时无需加#。
  • 代码/函数定义内部:本身处于代码环境,引用变量、调用函数不需要加#。

为什么你的原函数有问题

你之前写的#let colMath(x, color) = text(fill: color)[$#x$]本质是在文本模式的text块中嵌套数学内容,所以必须在文本环境中用#调用,无法直接在数学模式内使用。改用math函数直接构建带填充色的数学内容,就能适配数学模式内的直接调用。

内容的提问来源于stack exchange,提问作者Adron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:01:20