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 中渲染代码段。它允许用户配置各种属性,例如字体、背景样式、行号等,以便可以精确地控制代码的视觉表现。
参数解释
-
file_name (default:
None
):
指定代码文件的名称,如果为None
,则需要通过code
参数提供代码。 -
code (default:
None
):
要渲染的代码内容。如果不提供file_name
,则必须提供此参数。 -
tab_width (default:
3
):
每个制表符的宽度,以空格数表示。 -
line_spacing (default:
0.3
):
行之间的间距。 -
font_size (default:
24
):
代码字体的大小。 -
font (default:
'Monospace'
):
使用的字体样式,默认是等宽字体。 -
stroke_width (default:
0
):
文字的笔画宽度。 -
margin (default:
0.3
):
代码框的边距。 -
indentation_chars (default:
' '
):
表示缩进的字符,通常为空格字符。 -
background (default:
'rectangle'
):
背景形状,可以是矩形或其他形状。 -
background_stroke_width (default:
1
):
背景的笔画宽度。 -
background_stroke_color (default:
ManimColor('#FFFFFF')
):
背景边框的颜色,使用 ManimColor 方法定义颜色。 -
corner_radius (default:
0.2
):
背景的圆角半径。 -
insert_line_no (default:
True
):
是否在渲染的代码旁插入行号。 -
line_no_from (default:
1
):
行号的起始值。 -
line_no_buff (default:
0.4
):
行号和代码之间的缓冲距离。 -
style (default:
'vim'
):
代码的样式,例如颜色和语法高亮。 -
language (default:
None
):
指定代码的语言以便于高亮。 -
generate_html_file (default:
False
):
是否生成 HTML 文件。 -
warn_missing_font (default:
True
):
是否在缺少指定字体时发出警告。 -
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虽然支持的语言可能会依赖于具体的实现和配置,但以下是一些常见的编程语言选项:
- python: 用于 Python 代码高亮。
- javascript: 用于 JavaScript 代码。
- java: 用于 Java 代码。
- c: 用于 C 语言代码。
- cpp: 用于 C++ 代码。
- html: 用于 HTML 代码。
- css: 用于 CSS 代码。
- bash: 用于 Bash 脚本。
- ruby: 用于 Ruby 代码。
- swift: 用于 Swift 代码。
- 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")