manim中实现文字换行和设置字体格式

实现换行

python 复制代码
from manim import *  

class Textline(Scene):  
    def construct(self):   
        self.camera.background_color = "#2F4F14" 
        
        # 创建中心文本  
        horizontal_line = Line(start=LEFT * 8, end=RIGHT * 8, color=WHITE).shift(3 * UP)  
        stext = Text("线性代数", font_size=40,color=RED).next_to(horizontal_line, UP, buff=0.1)  

        # 完整文本内容,确保在一个字符串中  
        content =("""线性代数是数学的一个分支,主要研究向量空间及其线性变换。它的主要内容包括向量、矩阵、行列式、线性方程组和特征值等概念。
        \n线性代数在许多领域中都有广泛的应用,包括物理、工程、计算机科学、经济学等。线性代数的基本概念和工具包括:
        \n\t向量:具有大小和方向的量,通常表示为有序数列。\n矩阵:以矩形阵列的形式组织数值,可以用于表示线性变换以及存储多个向量。
        \n线性方程组:包含多个线性方程的集合,解决线性方程组的解法是线性代数的核心内容。\n\n行列式:一种标量值,能够提供矩阵的某些重要性质,如可逆性。
        \n特征值与特征向量:矩阵在特定条件下的性质,可以用于简化许多线性代数问题。
        \n总之,线性代数提供了一种处理多维数据和问题的有效工具,能够帮助我们理解和解决各种科学和工程问题。
        \n """)

        # 创建文本对象,并设置宽度以自动换行  
        text_object = Text(content, font_size=130, width=13.5,font="MS PGothic")  # 设置宽度以控制换行  

        # 将文本对象放置在中心位置  
        text_object.next_to(stext, DOWN, buff=2).shift(1.8*UP)  

        # 添加到场景并采用动画效果  
        self.add(horizontal_line, stext)  
        self.play(Create(text_object))  
        self.wait(2)  # 等待一会儿以便观看  

参数的介绍:

  1. self.camera.background_color = "#2F4F14": 设置场景的背景颜色为深绿色。

  2. horizontal_line = Line(start=LEFT * 8, end=RIGHT * 8, color=WHITE).shift(3 * UP): 创建一条水平线,起始点在屏幕左侧8个单位,结束点在屏幕右侧8个单位,颜色为白色,向上平移3个单位。

  3. stext = Text("线性代数", font_size=40,color=RED).next_to(horizontal_line, UP, buff=0.1): 创建一个文本对象,内容为"线性代数",字体大小为40,颜色为红色,放置在上一步创建的水平线上方0.1个单位的位置。

  4. content =("""线性代数是数学的一个分支..."""): 定义包含完整文本内容的字符串变量。

  5. text_object = Text(content, font_size=130, width=13.5,font="MS PGothic"): 创建一个文本对象,内容为上一步定义的字符串变量,字体大小为130,宽度为13.5(用于控制自动换行),字体为"MS PGothic"。

  6. text_object.next_to(stext, DOWN, buff=2).shift(1.8*UP): 将上一步创建的文本对象放置在上一步创建的"线性代数"文本对象下方2个单位的位置,并向上平移1.8个单位。

  7. self.add(horizontal_line, stext): 将水平线和"线性代数"文本对象添加到场景中。

  8. self.play(Create(text_object)): 播放创建文本对象的动画效果。

  9. self.wait(2): 暂停动画,等待2秒。

字体格式的介绍:

python 复制代码
from manim import *  
import matplotlib.font_manager  

class AllFonts(Scene):  
    def construct(self):  
        # 获取系统中所有字体  
        fonts = matplotlib.font_manager.findSystemFonts(fontpaths=None)  

        # 创建一个文本框,说明这些字体  
        title = Text("可用字体示例", font_size=48)  
        self.play(Write(title))  
        self.wait(1)  

        # 存储显示的文本对象  
        font_texts = VGroup()  

        # 限制显示前10种字体  
        for i, font in enumerate(fonts[:10]):  # 只取前10个字体  
            font_name = font.split('/')[-1].replace('.ttf', '')  # 获取字体名称  
            font_text = Text(f"字体: {font_name}", font_size=36, font=font)
            font_texts.add(font_text) 
            self.remove(font_texts)
            

        # 显示所有字体  
        self.play(Write(font_texts))  

        # 等待之后结束  
        self.wait(3)

这段代码是使用Manim库来展示系统中可用的字体示例。下面是对代码及每个参数的解释:

函数和参数解释

  1. from manim import *: 导入Manim库,用于创建动画场景和文本等元素。

  2. import matplotlib.font_manager: 导入matplotlib库中的font_manager模块,用于获取系统中的字体信息。

  3. class AllFonts(Scene):: 定义一个名为AllFonts的场景类,用于展示系统中可用的字体。

  4. def construct(self):: 定义construct方法,用于构建场景中的元素和动画效果。

  5. fonts = matplotlib.font_manager.findSystemFonts(fontpaths=None): 使用matplotlib库中的findSystemFonts函数获取系统中所有可用的字体列表。

  6. title = Text("可用字体示例", font_size=48): 创建一个名为title的文本对象,内容为"可用字体示例",字体大小为48。

  7. self.play(Write(title)): 播放Write动画效果,将标题文本对象显示在场景中。

  8. self.wait(1): 等待1秒钟,让标题文本显示一段时间。

  9. font_texts = VGroup(): 创建一个VGroup对象,用于存储显示的字体文对象。

  10. for i, font in enumerate(fonts[:10]):: 遍历前10个系统字体。

  11. font_name = font.split('/')[-1].replace('.ttf', ''): 从字体路径中提取字体名称。

  12. font_text = Text(f"字体: {font_name}", font_size=36, font=font): 创建一个文本对象,显示字体名称和对应的字体样式。

  13. font_texts.add(font_text): 将创建的文本对象添加到font_texts中。

  14. self.remove(font_texts): 从场景中移除font_texts中存储的文本对象。

  15. self.play(Write(font_texts)): 播放Write动画效果,显示所有字体的文本对象。

  16. self.wait(3): 等待3秒钟,让所有字体文本显示一段时间后结束。

运行结果:

复制代码
\['Arial', 'Bahnschrift', text_mobject.py:461 'Calibri', 'Cambria', 'Cambria Math', 'Candara', 'Cascadia Code', 'Cascadia Mono', 'Comic Sans MS', 'Consolas', 'Constantia', 'Corbel', 'Courier New', 'Cursive', 'DengXian', 'Ebrima', 'FangSong', 'Fantasy', 'Franklin Gothic', 'Gabriola', 'Gadugi', 'Georgia', 'Impact', 'Ink Free', 'Javanese Text', 'KaiTi', 'Leelawadee UI', 'Lucida Console', 'Lucida Sans Unicode', 'MS Gothic', 'MS PGothic', 'MS UI Gothic', 'MV Boli', 'Malgun Gothic', 'Microsoft Himalaya', 'Microsoft JhengHei', 'Microsoft JhengHei UI', 'Microsoft New Tai Lue', 'Microsoft PhagsPa', 'Microsoft Sans Serif', 'Microsoft Tai Le', 'Microsoft YaHei', 'Microsoft YaHei UI', 'Microsoft Yi Baiti', 'MingLiU-ExtB', 'MingLiU_HKSCS-ExtB', 'Mongolian Baiti', 'Monospace', 'Myanmar Text', 'NSimSun', 'Nirmala UI', 'PMingLiU-ExtB', 'Palatino Linotype', 'Sans', 'Sans-Serif', 'Segoe Print', 'Segoe Script', 'Segoe UI', 'Segoe UI Emoji', 'Segoe UI Historic', 'Segoe UI Symbol', 'Segoe UI Variable Display', 'Segoe UI Variable Small', 'Segoe UI Variable Text', 'Serif', 'SimHei', 'SimSun', 'SimSun-ExtB', 'Sitka Banner', 'Sitka Display', 'Sitka Heading', 'Sitka Small', 'Sitka Subheading', 'Sitka Text', 'Sylfaen', 'System-ui', 'Tahoma', 'Times New Roman', 'Trebuchet MS', 'Verdana', 'Yu Gothic', 'Yu Gothic UI'\].

这些字体格式是常见的字体名称,用于在文本中指定不同的字体样式。以下是对其中一些常见字体格式的解释:

  1. Serif字体:Serif字体是一种在字母末端或笔画交叉处有额外装饰的字体,例如在字母"T"末端有小横线。这种字体风格通常被用于印刷品和书籍中,例如"Georgia"和"Times New Roman"。

  2. Sans-Serif字体:Sans-Serif字体是指没有额外装饰的字体,没有末端的装饰线条,通常被认为更现代和简洁。例如"Arial"和"Verdana"就是Sans-Serif字体。

  3. Monospace字体:Monospace字体是指每个字符占据相同宽度的字体,适用于排列文本对齐、代码编辑等场景。例如"Courier New"和"Consolas"是Monospace字体。

  4. Cursive字体:Cursive字体是指模仿手写笔迹的字体风格,具有连续的笔画和装饰性。例如"Comic Sans MS"就是一种Cursive字体。

  5. Fantasy字体:Fantasy字体是指具有装饰性和艺术感的字体,通常用于标题和艺术设计。例如"Gabriola"是一种Fantasy字体。

  6. System-ui字体:System-ui字体是指系统默认的UI字体,适用于用户界面设计和系统显示。这种字体通常具有良好的可读性和适配性。

  7. Segoe系列字体:Segoe系列是由微软开发的一组字体,包括不同风格和变体,用于Windows系统和应用程序界面。

  8. Microsoft系列字体:Microsoft系列字体是由微软开发的字体系列,包括各种字体风格和变体,用于Windows系统和应用程序。

相关推荐
江公望14 分钟前
Qt QML实现无边框窗口
开发语言·qt
万邦科技Lafite25 分钟前
实战演练:通过API获取商品详情并展示
大数据·数据库·python·开放api接口
秦禹辰37 分钟前
宝塔面板安装MySQL数据库并通过内网穿透工具实现公网远程访问
开发语言·后端·golang
愈努力俞幸运38 分钟前
uv教程 虚拟环境
python·uv
黄焖鸡能干四碗43 分钟前
智慧教育,智慧校园,智慧安防学校建设解决方案(PPT+WORD)
java·大数据·开发语言·数据库·人工智能
IMER SIMPLE43 分钟前
人工智能-python-深度学习-经典网络模型-LeNets5
人工智能·python·深度学习
企业软文推广1 小时前
奥迪A5L×华为:品牌营销视角下的燃油车智能突围战!
python·华为
一只乔哇噻1 小时前
java后端工程师进修ing(研一版 || day41)
java·开发语言·学习·算法
Pocker_Spades_A1 小时前
Python快速入门专业版(十五):数据类型实战:用户信息录入程序(整合变量、输入与类型转换)
数据库·python
IMER SIMPLE1 小时前
人工智能-python-深度学习-神经网络-GoogLeNet
人工智能·python·深度学习