Manim的一个用于数学动画的 Python 库中渲染代码的功能。

news2024/9/20 14:48:54

   Code 函数是 Manim(一个强大的数学动画库)中的一个重要工具,旨在将代码片段以视觉化的方式呈现。在教育和演示场合中,向观众展示算法或代码逻辑时,清晰的视觉效果是必不可少的。通过 Code 函数,用户可以轻松地将特定编程语言的代码导入,并且自定义其外观,包括字体、颜色、背景形状和行间距等。

该函数支持多种编程语言,如 Python、Java 和 C++ 等,使得用户能够根据需要选择语言并进行语法高亮。此外,Code 函数还实现了行号功能,方便观众追踪上下文,从而增强理解。通过调节参数,如 tab_width 和 line_spacing,用户可以精细控制代码的表现形式。这种功能让 Manim 在编程教育和技术讲座中,成为一个极具价值的工具,不仅能展示数学概念,还能有效传达编程思想。

Code(file_name=None, code=None, tab_width=3, line_spacing=0.3, font_size=24, 
font='Monospace', stroke_width=0, margin=0.3, indentation_chars='    ', 
background='rectangle', background_stroke_width=1, 
background_stroke_color=ManimColor('#FFFFFF'), corner_radius=0.2, insert_line_no=True, 
line_no_from=1, line_no_buff=0.4, style='vim', language=None, generate_html_file=False, 
warn_missing_font=True, **kwargs)

Code 函数用于在 Manim 中渲染代码段。它允许用户配置各种属性,例如字体、背景样式、行号等,以便可以精确地控制代码的视觉表现。

参数解释

  1. file_name (default: None):
    指定代码文件的名称,如果为 None,则需要通过 code 参数提供代码。

  2. code (default: None):
    要渲染的代码内容。如果不提供 file_name,则必须提供此参数。

  3. tab_width (default: 3):
    每个制表符的宽度,以空格数表示。

  4. line_spacing (default: 0.3):
    行之间的间距。

  5. font_size (default: 24):
    代码字体的大小。

  6. font (default: 'Monospace'):
    使用的字体样式,默认是等宽字体。

  7. stroke_width (default: 0):
    文字的笔画宽度。

  8. margin (default: 0.3):
    代码框的边距。

  9. indentation_chars (default: ' '):
    表示缩进的字符,通常为空格字符。

  10. background (default: 'rectangle'):
    背景形状,可以是矩形或其他形状。

  11. background_stroke_width (default: 1):
    背景的笔画宽度。

  12. background_stroke_color (default: ManimColor('#FFFFFF')):
    背景边框的颜色,使用 ManimColor 方法定义颜色。

  13. corner_radius (default: 0.2):
    背景的圆角半径。

  14. insert_line_no (default: True):
    是否在渲染的代码旁插入行号。

  15. line_no_from (default: 1):
    行号的起始值。

  16. line_no_buff (default: 0.4):
    行号和代码之间的缓冲距离。

  17. style (default: 'vim'):
    代码的样式,例如颜色和语法高亮。

  18. language (default: None):
    指定代码的语言以便于高亮。

  19. generate_html_file (default: False):
    是否生成 HTML 文件。

  20. warn_missing_font (default: True):
    是否在缺少指定字体时发出警告。

  21. kwargs:
    允许传递其他参数。 

示例代码

现在,我们将使用上述所有参数来写一个示例代码段:

from manim import *

class CodeFromString(Scene):
    def construct(self):
        code1 = '''from manim import Scene, Square

        class FadeInSquare(Scene):
        def construct(self):
        s = Square()
        self.play(FadeIn(s))
        self.play(s.animate.scale(2))
        self.wait()
        '''
        rendered_code1 = Code(  
                    file_name=None,  #指定代码文件的名称,如果为 None,则需要通过 code 参数提供代码。
                    code=code1  ,  #要渲染的代码内容。如果不提供 file_name,则必须提供此参数。
                    tab_width=4,  #每个制表符的宽度,以空格数表示。
                    line_spacing=0.4,  #行之间的间距。
                    font_size=24,     #代码字体的大小。
                    font="Monospace",  #使用的字体样式,默认是等宽字体。
                    stroke_width=1,  #文字的笔画宽度。
                    margin=0.8,      #代码框的边距。
                    indentation_chars='    ',  #表示缩进的字符,通常为空格字符。
                    background="square",  #背景形状,可以是矩形或其他形状。
                    background_stroke_width=1,  #背景的笔画宽度。
                    background_stroke_color=ManimColor('#AAAAAA'),  #背景边框的颜色,使用 ManimColor 方法定义颜色。
                    corner_radius=2.5,  #背景的圆角半径。
                    insert_line_no=True,  #是否在渲染的代码旁插入行号。
                    line_no_from=1,  #行号的起始值。
                    line_no_buff=0.5,  #行号和代码之间的缓冲距离。
                    style='monokai',  #代码的样式,例如颜色和语法高亮。
                    language='Python',  #指定代码的语言以便于高亮。
                    generate_html_file=False,  #是否生成 HTML 文件。
                    warn_missing_font=False  #是否在缺少指定字体时发出警告。
        )
        self.add(rendered_code1)

 运行结果:

 示例2:

from manim import *

class CodeFromString(Scene):
    def construct(self):
        code = '''from manim import Scene, Square

class FadeInSquare(Scene):
    def construct(self):
        s = Square()
        self.play(FadeIn(s))
        self.play(s.animate.scale(2))
        self.wait()
'''
        rendered_code = Code(code=code, tab_width=4, background="window",
                            language="Python", font="Monospace")
        self.add(rendered_code)

 language 参数可以用于指定要高亮显示的编程语言。

language 参数可以用于指定要高亮显示的编v虽然支持的语言可能会依赖于具体的实现和配置,但以下是一些常见的编程语言选项:

  1. python: 用于 Python 代码高亮。
  2. javascript: 用于 JavaScript 代码。
  3. java: 用于 Java 代码。
  4. c: 用于 C 语言代码。
  5. cpp: 用于 C++ 代码。
  6. html: 用于 HTML 代码。
  7. css: 用于 CSS 代码。
  8. bash: 用于 Bash 脚本。
  9. ruby: 用于 Ruby 代码。
  10. swift: 用于 Swift 代码。
  11. go: 用于 Go 语言代码。

具体的支持语言和高亮方式可以参考相应的文档或源代码

1.Python和C的效果:

from manim import *

class CodeFromStringC(Scene):
    def construct(self):
        code1 = '''from manim import Scene, Square

            class FadeInSquare(Scene):
                def construct(self):
                    s = Square()

            '''
        code2 ='''#include <studio.h>
 
            int main()
            {
                printf("Hello, World");
                return(0);
            }
            '''
        rendered_code1 = Code(code=code1, tab_width=4, background="window",
                            language="Python", font="Monospace")
        rendered_code2 = Code(code=code2, tab_width=4, background="window",
                            language="C", font="Monospace")
        aa=VGroup(rendered_code1,rendered_code2)
        aa.arrange(DOWN, buff=0.5) 
        self.add(aa)

 2.C++和C#的效果:

from manim import *

class CodeFromStringC(Scene):
    def construct(self):
        code1 = '''#include<iostream> 
 
int main()
{
    std::cout << "Hello World";
    return 0;
}
            '''
        code2 ='''using System;
class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Hello, World");
    }
}
            '''
        rendered_code1 = Code(code=code1, tab_width=4, background="window",
                            language="C++", font="Monospace")
        rendered_code2 = Code(code=code2, tab_width=4, background="window",
                            language="C#", font="Monospace")
        aa=VGroup(rendered_code1,rendered_code2)
        aa.arrange(DOWN, buff=0.5) 
        self.add(aa)

3. Bash,Basic和HTML

from manim import *

class CodeFromStringB(Scene):
    def construct(self):
        code1 = '''echo "Hello, World"'''
        code2 ='''PRINT "Hello, World"'''
        code3 =''' Hello, World'''
        code4 ='''public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
'''
        rendered_code1 = Code(code=code1, tab_width=4, background="window",
                            language="Bash", font="Monospace")
        rendered_code2 = Code(code=code2, tab_width=4, background="window",
                            language="Basic", font="Monospace")
        rendered_code3 = Code(code=code3, tab_width=4, background="window",
                            language="HTML", font="Monospace")
        rendered_code4 = Code(code=code4, tab_width=4, background="window",
                            language="Java", font="Monospace")
        aa=VGroup(rendered_code1,rendered_code2,rendered_code3,rendered_code4)
        aa.arrange(DOWN, buff=0.5) 
        self.add(aa)

 后面还有很多,你们也可以试一下。

8. Clipper

? "Hello, World"

9. Delphi

program HelloWorld;
begin
  Writeln('Hello, World');
end.

10. CoffeeScript

console.log 'Hello, World'

11. MatLab

disp('Hello, World')

12. Julia

println("Hello, World")

13. JavaScript

document.write('Hello, World');

14. Logo

print [Hello, World]

15. jQuery

$("body").append("Hello, World");

16. Perl 5

print "Hello, World";

17. Pascal

program HelloWorld;
begin
  WriteLn('Hello, World');
end.

18. Objective-C

#import 
#import 
 
int main(void)
{
    NSLog(@"Hello, World");
    return 0;
}

19. Visual Basic .NET

Module Module1
    Sub Main()
        Console.WriteLine("Hello, World")
    End Sub
End Module

20. R

cat('Hello, World')

21. VBScript

MsgBox "Hello, World"

22. XSLT

      Hello, World

23. Processing

void setup(){
  println("Hello, World");
}

24. Ruby

puts "Hello, World"

25. Swift

print("Hello, World")

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

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

相关文章

KOLA: CAREFULLY BENCHMARKING WORLD KNOWLEDGE OF LARGE LANGUAGE MODELS

文章目录 题目摘要简介KOLA 基准实验评估结论和未来工作道德声明 题目 KOLA&#xff1a;仔细对大型语言模型的世界知识进行基准测试 论文地址:https://arxiv.org/abs/2306.09296 项目地址:https://github.com/ranahaani/GNews 摘要 大型语言模型 (LLM) 的卓越性能要求评估方法…

【种草官招募令】

&#x1f31f; 你是时尚达人吗&#xff1f; 对潮流服饰有着独到的见解&#xff1f; 想通过分享赢得关注&#xff0c;还能赚取丰厚报酬&#xff1f; 来加入我们的电商种草官行列吧&#xff01; &#x1f457; 我们致力于发现和培养更多热爱时尚、善于种草的你&#xff0c;将…

Imagination CPU系列研讨会|RISC-V平台的性能分析和调试

为了让开发者及工程师深入了解 Imagination 的 CPU 产品及相关解决方案&#xff0c;Imagination 将陆续推出 5 期线上研讨会&#xff0c;包含 RISC-V 平台的性能分析和调试&#xff1b;RISC-V 安全和全球平台可信执行环境&#xff08;TEE&#xff09;&#xff1b;RISC-V 软件生…

人工智能缺陷检测方案METIS(梅迪斯):汽车零部件检测

#汽车零部件#机器视觉检测&#xff0c;作为当今科技领域的热门话题&#xff0c;正日益受到世人的瞩目。随着机器视觉系统的不断开发与优化&#xff0c;那些繁重而复杂的人工检测工作&#xff0c;已经逐渐被机器视觉检测所替代。今天&#xff0c;我们就来深入探讨一下&#xff0…

作业08.13

一、TCP机械臂测试 通过w(红色臂角度增大)s&#xff08;红色臂角度减小&#xff09;d&#xff08;蓝色臂角度增大&#xff09;a&#xff08;蓝色臂角度减小&#xff09;按键控制机械臂 注意&#xff1a;关闭计算机的杀毒软件&#xff0c;电脑管家&#xff0c;防火墙 1&#x…

构建实时数据仓库:流式处理与实时计算技术解析

目录 一、流式处理 请求与响应 批处理 二、实时计算 三、Lambda架构 Lambda架构的缺点 四、Kappa架构 五、实时数据仓库解决方案 近年来随着业务领域的不断拓展&#xff0c;尤其像互联网、无线终端APP等行业应用的激增&#xff0c;产生的数据量呈指数级增长&#xff0c;对海量数…

C++系列-继承中的对象模型

继承中的对象模型 通过查看子类的内存大小通过Developer Command Prompt查看结构 山中问答 李白 〔唐代〕 问余何意栖碧山&#xff0c;笑而不答心自闲。 桃花流水窅然去&#xff0c;别有天地非人间。 无论哪种继承方式&#xff0c;父类中的private成员在子类中均不可以访问。pu…

Polars简明基础教程十二:可视化(二)

设置绘图后端 我们可以使用 hv.extension 更改绘图后端。但是&#xff0c;我们不在此处运行此单元格&#xff0c;因为它会导致下面的 Matplotlib/Seaborn 图表无法渲染。 注释&#xff1a; hvPlot 利用 HoloViews 库来构建图表&#xff0c;并且可以使用多个后端进行渲染&…

农业物联网6公里WiFi远距离传输模块,信号传输不再受限,抗干扰、连接快

在数字化时代&#xff0c;WiFi已成为我们生活中不可或缺的一部分。然而&#xff0c;你是否曾遇到过这样的困扰&#xff1a;在户外或大型场所&#xff0c;WiFi信号总是那么微弱&#xff0c;甚至完全无法连接。这时候&#xff0c;一种能够实现6公里远距离WiFi传输的神秘模块便应运…

go-zero中间件的使用

一、自定义中间件 1、在api中在服务中定义一个中间件,名字随便取 type PostDemoReq {Name string json:"name" validate:"required" // 姓名Age int64 json:"age" validate:"required,gte1,lte130" // 年龄// optional 表示可选,omi…

RAG与LLM原理及实践(11)--- Milvus hybrid search 源码分析及思想

目录 背景 hybrid search 源码分析 WeightedRanker 源码 hybrid search 核心 参数详解 基本入参 扩展入参 aysnc方式代码调用案例 说明 源码逻辑 prepare 调用过程 stub 调用结果 stub 调用过程 blocking 与 async 调用方式 深入内部core weightedRanker 的ch…

拼图小游戏单机版---java实现

一、为什么要在这个阶段做这样的一个项目&#xff1f; 1、理解Swing框架&#xff1a; 这个项目使用了Swing框架来构建图形用户界面&#xff08;GUI&#xff09;。通过实践&#xff0c;你可以更好地掌握如何使用Swing组件&#xff08;如JFrame, JLabel, JMenuBar等&#xff09;…

Redis20-通信协议

目录 RESP协议 概述 数据类型 模拟Redis客户端 RESP协议 概述 Redis是一个CS架构的软件&#xff0c;通信一般分两步&#xff08;不包括pipeline和PubSub&#xff09;&#xff1a; 客户端&#xff08;client&#xff09;向服务端&#xff08;server&#xff09;发送一条命…

6RA8075-6DV62-0AA0模块可面价

6RA8075-6DV62-0AA0模块可面价 6RA8075-6DV62-0AA0模块可面价 6RA8075-6DV62-0AA0模块可面价 6ES7655-5DX40-2AA0模块接线图 6ES7655-5DX40-2AA0模块说明书 6ES7655-5DX40-2AA0模块选型手册 6ES7655-5DX40-2AA0功能模块是指数据说明、可执行语句等程序元素的集合&#xf…

permutation sequence(

60. Permutation Sequence class Solution:def getPermutation(self, n: int, k: int) -> str:def rec(k, l, ans, n):if(n0): return# 保留第一个位置&#xff0c;剩下数字的组合leftCom math.factorial(n - 1) #用于计算 (n-1) 的阶乘值ele k // leftCommod k % leftCo…

SpringBoot入门笔记

本文是看黑马老师讲课视频学习笔记整理 目录 入门案例 基于IDEA联网 基于Springboot官网创建 基于阿里云创建项目 手工创建 隐藏文件 入门案例解析: parent​编辑 starter 引导类 内嵌tomcat 入门案例 基于IDEA联网 RestController RequestMapping("/books&…

Electron:摄像头录制和屏幕录制

摄像头录制 main.js const { app, BrowserWindow} require(electron)let mainWin null const createWindow () > {mainWin new BrowserWindow({width: 800,height: 600,title: 自定义菜单,webPreferences: {// 允许渲染进程使用nodejsnodeIntegration: true,// 允许渲…

首站,北京!OpenCSG邀您共赴AI之约【2024戴尔科技峰会预告】

图片来源&#xff1a;戴尔 在数字化浪潮的推动下&#xff0c;人工智能正成为推动社会进步的关键力量及带来生产力的提升。据相关数据显示,全球企业对人工智能的投资已增长50%&#xff0c;预计到2025年&#xff0c;人工智能将为全球经济贡献15.7万亿美元。人工智能将革新我们的生…

PyTorch深度学习实战(12)—— 神经网络工具箱nn.functional

1. nn.functional torch.nn中还有一个很常用的模块&#xff1a;nn.functional。torch.nn中的大多数layer&#xff0c;在functional中都有一个与之相对应的函数。nn.functional中的函数和nn.Module的主要区别在于&#xff1a;使用nn.Module实现的layer是一个特殊的类&#xff0c…

【人工智能】Transformers之Pipeline(九):物体检测(object-detection)

目录​​​​​​​ 一、引言 二、物体检测&#xff08;object-detection&#xff09; 2.1 概述 2.2 技术原理 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模型排名 三、总结 一、引言 pipel…