Сообщество Manim: Цвет в уравнении через текст

Вопрос или проблема

У меня есть следующий код на Python для отображения матрицы в Manim Community:

from manim import *

class Example(Scene):
    def construct(self):
        A = MathTex(
            r"A="
            r"\begin{pmatrix}"
            r"a_{11} & a_{12} & \dots  & a_{1n}\\"
            r"a_{21} & a_{22} & \dots  & a_{2n}\\"
            r"\vdots & \vdots & \ddots & \vdots\\"
            r"a_{n1} & a_{n2} & \dots  & a_{nn}"
            r"\end{pmatrix}"
        ).center()

        self.play(Write(A))

Я бы хотел, чтобы каждый “a” имел одинаковый цвет (например, красный).

Я знаю, что могу отображать индекс и затем раскрашивать каждую “a” индивидуально по индексу, но это становится все более утомительным для больших уравнений.

Существует ли способ сделать это более умно, например, раскрашивая по тексту или перебирая уравнение?

Существует set_color_by_tex в MathTex, но вам нужно внимательно прочитать документацию Подстроки и части, где говорится

Обратите внимание, что set_color_by_tex() раскрашивает всю подстроку, содержащую Tex, а не только конкретный символ или выражение Tex

Таким образом, при применении к MathTex раскрашивается все уравнение. Поскольку это не то, что вам нужно, вы можете использовать параметр substrings_to_isolate у MathTex

Пример (почти) работающего кода выглядит следующим образом

class Example(Scene):
    def construct(self):
        A = MathTex(
            r"A=a_{11} & a_{12} & \dots  & a_{1n}\\a_{21} & a_{22} & \dots  & a_{2n}\\\vdots & \vdots & \ddots & \vdots\\a_{n1} & a_{n2} & \dots  & a_{nn}",
            substrings_to_isolate="a"
        ).center()
        
        A.set_color_by_tex("a", RED)

        self.play(Write(A))

Как видите, я убрал \begin{pmatrix} & \end{pmatrix}, чтобы это заработало. Возможно, вы сможете сделать запрос в их GitHub, чтобы узнать, должно ли работать применение substrings_to_isolate к матрице MathTex или нет.

Ответ или решение

Для решения задачи окрашивания символа "a" в матрице, отображаемой с помощью Manim, можно воспользоваться функцией set_color_by_tex в сочетании с параметром substrings_to_isolate. Эта возможность позволяет вам задать определённые подстроки, которые следует изолировать для изменения их цвета.

Ваша приведённая конструкция кода содержит хороший старт, но необходимо внести некоторые изменения, чтобы ввести матрицу непосредственно с соответствующими данными и не потерять форматирование. Ниже представлена окончательная версия кода, где "a" будет окрашен в красный цвет:

from manim import *

class Example(Scene):
    def construct(self):
        # Здесь мы создаем объект MathTex, содержащий всю информацию о матрице
        A = MathTex(
            r"A = \begin{pmatrix}"
            r"a_{11} & a_{12} & \dots & a_{1n} \\"
            r"a_{21} & a_{22} & \dots & a_{2n} \\"
            r"\vdots & \vdots & \ddots & \vdots \\"
            r"a_{n1} & a_{n2} & \dots & a_{nn}"
            r"\end{pmatrix}",
            substrings_to_isolate="a"  # Изолируем символы "a"
        ).center()

        # На данной строке мы устанавливаем цвет для каждого "a"
        A.set_color_by_tex("a", RED)

        # Запускаем анимацию для отображения матрицы
        self.play(Write(A))

Объяснение:

  1. MathTex и substrings_to_isolate: Мы используем MathTex для создания более сложной математической структуры. Используя параметр substrings_to_isolate, мы указываем, что хотим выделить все "a" в наших данных.

  2. set_color_by_tex: После того, как мы изолировали символы "a", можно вызвать set_color_by_tex("a", RED) для окрашивания всех символов "a" в красный цвет.

  3. Форматирование: В приведённом коде я сохранил форматирование матрицы с помощью \begin{pmatrix} и \end{pmatrix}, чтобы отображение выглядело корректно.

Запустив этот код, вы получите матрицу, в которой все "a" окрашены в красный цвет, что значительно упрощает процесс, особенно для больших уравнений и матриц. Таким образом, вам не придётся вручную окрашивать каждую переменную, и код становится более читабельным и удобным.

Оцените материал
Добавить комментарий

Капча загружается...