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

如何在Manim的Table组件中为单元格文本添加删除线效果

问题根源

两种实现尝试不生效的核心原因:

  • 传入纯字符串作为单元格内容时,Table类默认直接调用Text()构造文本对象,不会自动开启Pango富文本标记解析,手写的<span>标签会被识别为普通字符直接渲染。
  • Table单元格默认使用Text类渲染内容而非Tex/MathTex类,原生不解析LaTeX语法,直接写入LaTeX删除线命令无法被正确识别。
可行实现方案

方案1:单独传入带删除线的Text对象(推荐,灵活度最高)

Table支持直接传入已实例化的Mobject作为单元格内容,无需局限于纯字符串。仅需要给加删除线的单元格传入构造时带strikethrough参数的Text对象即可,其余单元格仍可使用普通字符串。
完整可运行示例:

from manim import *

class TableExamples(Scene):
    def construct(self):
        t0 = Table(
            [
                # 第一个单元格传入带红色删除线的Text对象
                [Text("This", strikethrough=True, strikethrough_color=RED), "is a"],
                ["simple", "Table in \n Manim."]
            ]
        )
        t1 = Table(
            [["This", "is a"],
            ["simple", "Table."]],
            row_labels=[Text("R1"), Text("R2")],
            col_labels=[Text("C1"), Text("C2")])
        t1.add_highlighted_cell((2,2), color=YELLOW)
        t2 = Table(
            [["This", "is a"],
            ["simple", "Table."]],
            row_labels=[Text("R1"), Text("R2")],
            col_labels=[Text("C1"), Text("C2")],
            top_left_entry=Star().scale(0.3),
            include_outer_lines=True,
            arrange_in_grid_config={"cell_alignment": RIGHT})
        t2.add(t2.get_cell((2,2), color=RED))
        t3 = Table(
            [["This", "is a"],
            ["simple", "Table."]],
            row_labels=[Text("R1"), Text("R2")],
            col_labels=[Text("C1"), Text("C2")],
            top_left_entry=Star().scale(0.3),
            include_outer_lines=True,
            line_config={"stroke_width": 1, "color": YELLOW})
        t3.remove(*t3.get_vertical_lines())
        g = Group(
            t0,t1,t2,t3
        ).scale(0.7).arrange_in_grid(buff=1)
        self.add(g)

该方案无需修改表格全局配置,单个单元格的字体、颜色、特殊效果都可以单独自定义,适配绝大多数场景。

方案2:全局开启富文本解析,支持标签写删除线

如果需要批量给多个单元格添加删除线、字体颜色、斜体等富文本效果,可以在初始化Table时指定element_to_mobject参数,全局开启Text的markup解析能力,之后即可直接在字符串中使用Pango支持的富文本标签。
核心代码示例:

t0 = Table(
    [
        # 直接在字符串中写删除线标签
        ['<span strikethrough="true" strikethrough_color="red">This</span>', "is a"],
        ["simple", "Table in \n Manim."]
    ],
    # 全局配置单元格文本构造逻辑,开启markup解析
    element_to_mobject=lambda content: Text(content, markup=True)
)

注意:开启markup解析后,字符串中的<、>、&等特殊字符需要按照Pango标记规则做转义。

方案3:切换LaTeX渲染,用LaTeX命令实现删除线

如果表格内包含大量数学公式,需要全量使用LaTeX渲染内容,可以将单元格渲染类切换为Tex,引入ulem包后使用\sout命令实现删除线。
核心代码示例:

from manim import TexTemplate

t0 = Table(
    [
        [r"\sout{This}", "is a"],
        ["simple", "Table in \n Manim."]
    ],
    # 切换为Tex渲染,引入ulem包支持删除线命令
    element_to_mobject=lambda content: Tex(
        content,
        tex_template=TexTemplate(preamble=r"\usepackage{ulem}")
    )
)

该方案渲染普通文本的效率低于Text类,仅建议在有大量公式需求的场景使用。

内容的提问来源于stack exchange,提问作者FluidMechanics Potential Flows

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:00:55