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

news2024/12/23 13:15:35

 实现换行

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秒。

字体格式的介绍:

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系统和应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2172996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0. Pixel3 在Ubuntu22下Android12源码拉取 + 编译

0. Pixel3 在Ubuntu22下Android12源码拉取 编译 原文地址: http://www.androidcrack.com/index.php/archives/3/ 1. 前言 这是一个非常悲伤的故事, 因为一个意外, 不小心把之前镜像的源码搞坏了. 也没做版本管理,恢复不了了. 那么只能说是重新做一次. 再者以前的镜像太老旧…

828华为云征文|部署去中心化网络的 AI 照片管理应用 PhotoPrism

828华为云征文|部署去中心化网络的 AI 照片管理应用 PhotoPrism 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 PhotoPrism3.1 PhotoPrism 介绍3.2 PhotoPrism…

OpenHarmony标准系统上实现对rk系列芯片NPU的支持(驱动移植)

1.将RKNPU驱动移植到Openharmony内核 本文以rk3568为例,将RKNPU驱动移植到Openharmony使用的kernel 5.10中 开发环境 DAYU200 rk3568开发板OpenHarmony 4.1 Release 64位系统 文档约定:4.1r_3568为OpenHarmony标准系统源码根目录 1.0 环境准备 1.搭建O…

Windows11 + Ubuntu 24.10

我在win11安装Ubuntu主板:华硕主板Z790 DARK HERO,进入安装,所以文章中bios系统设置为华硕的bios系统。 一、确认系统信息-BIOS为UEFL 备注:UEFL优于MBR,具体可以查询问ai。如果BIOS模式中不是UEFL,建议为UEFL 1、 win+R 输入 msinfo32,打开系统信息,可以看到…

printf详解

printf("hello \nworld\n"):将hello word打印到屏幕上,在使用printf函数时可以多次使用换行符\n,想在哪里加都可以 int main() {printf("hello \nworld\n");return 0; } 占位符:在printf中,占位…

delphi制作漂亮的农历窗体(IntraWeb+Layui的完美结合)

delphi制作漂亮的农历窗体(IntraWebLayui的完美结合) 不需要安装服务器,Apache和IIS都不需要,自带企业级服务器。 运行exe服务器就架好了,直接打开手机浏览器或者电脑浏览器,网页就出来了,如果…

AI驱动TDSQL-C Serverless 数据库技术实战营-颠覆传统分析模式:智能体与TDSQL-C结合实现人才的可视化数据分析

文章目录 前言云数据库的对比传统云数据库:TDSQL-C Serverless: 智能体与TDSQL-C的结合思路 算力服务器与数据库服务器申请与部署购买 TDSQL-C Mysql Serverless 实例购买HAI高算力服务器 准备工作准备数据下载依赖 案例开发创建数据库开启智能体与TDSQL-C结合 总结…

智能新宠:BabyAlpha A2开启家庭机器人新时代

具身智能领域的“疯狂”,已经迈入了全新的阶段!让我们一起来看看这段视频:一个人形机器人在前面奔跑,一群机器狗紧随其后;接着是人追赶机器狗,随后机器狗又追逐人……视频最后,那个机器人似乎还…

【Python】Daphne:Django 异步服务的桥梁

Daphne 是 Django Channels 项目的一部分,专门用于为 Django 提供支持 HTTP、WebSocket、HTTP2 和 ASGI 协议的异步服务器。Daphne 是一个开源的 Python 异步服务器,它可以帮助开发者运行异步应用程序,并且非常适合与 Django Channels 一起使…

回家啦回家啦

耒阳也有茶颜月色了,没忍住喝了一杯! 衡阳卤粉,想出来的味道👅,一般般 但一个粉店能做到24小时不打烊,应该也还行哈 银行竟然支持扫脸取钱了!!

【微服务即时通讯系统】——etcd一致性键值存储系统、etcd的介绍、etcd的安装、etcd使用和功能测试

文章目录 etcd1. etcd的介绍1.1 etcd的概念 2. etcd的安装2.1 安装etcd2.2 安装etcd客户端C/C开发库 3. etcd使用3.1 etcd接口介绍 4. etcd使用测试4.1 原生接口使用测试4.2 封装etcd使用测试 etcd 1. etcd的介绍 1.1 etcd的概念 Etcd 是一个基于GO实现的 分布式、高可用、一致…

通过OpenScada在ARMxy边缘计算网关上实现数字化转型

随着工业4.0概念的普及,数字化转型已成为制造业升级的关键路径之一。在此背景下,边缘计算技术因其能够有效处理大量数据、减少延迟并提高系统响应速度而受到广泛关注。ARMxy边缘计算网关,特别是BL340系列,凭借其强大的性能和灵活的…

--杂项2--

将之前实现的顺序表、栈、队列都更改成模板类 #include <iostream> #include <string.h> using namespace std;template <typename T> class Stack { private:T* a;int top;int size1;public:Stack(int c) : a(new T[c]), top(-1), size1(c) {}~Stack() { de…

IDEA 系列产品 下载

准备工作 下载 下载链接&#xff1a;https://www.123865.com/ps/EF7OTd-mbHnH 仅供参考 环境 演示环境&#xff1a; 操作系统&#xff1a;windows10 产品&#xff1a;IntelliJ IDEA 版本&#xff1a;2024.1.2 注意&#xff1a;如果需要其他产品或者版本可以自行下载&#xff0…

ArcEngine C#二次开发图层处理:根据属性分割图层(Split)

需求&#xff1a;仅根据某一属性&#xff0c;分割图层&#xff0c;并以属性值命名图层名称保存。 众所周知&#xff0c;ArcGIS ArcToolbox中通过Split可以实现图形分割一个图层&#xff0c;以属性值命名图层&#xff0c;如下图所示。 本文仅仅依据属性值&#xff0c;将一个shp…

Android界面控件概述

节选自《Android应用开发项目式教程》&#xff0c;机械工业出版社&#xff0c;2024年7月出版 做最简单的安卓入门教程&#xff0c;手把手视频、代码、答疑全配齐 控件是Android界面的重要组成单元&#xff0c;Android应用主要通过控件与用户交互&#xff0c;Android提供了非常…

YUView:YUV查看工具

文章目录 引言安装步骤使用YUView查看YUV数据播放与分析功能亮点注意事项 YUView的架构设计 引言 本文将介绍如何在Ubuntu 20.04上安装YUView&#xff0c;并分享其基本使用方法。 安装步骤 安装依赖项 在开始安装YUView前&#xff0c;先确保安装了所有必需的依赖包。打开终…

VGA/HDMI/DP接口和USB、串口通信协议

1、视频接口 开始之前我们先聊一聊数字信号和模拟信号&#xff0c;模拟信号和数字信号的不同之处在于它们所传输的信息的形式。模拟信号是一个连续的信号&#xff0c;可以以在无限小的时间内进行测量。数字信号则是以离散的形式进行传输&#xff0c;它的数值只能是离散的、有限…

每日一题学习笔记

给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间结点&#xff0c;提示&…

Unity中的GUIStyle错误:SerializedObject of SerializedProperty has been Disposed.

一运行就循环打印这个报错&#xff0c; 解决办法&#xff0c;每次改参数之后在HIerarchy中手动保存&#xff0c;就会停止循环打印&#xff0c;style中的字体也显示出来了&#xff0c; 或者 直接换个低版本的