Python视频制作工具Manim入门,文本使用详细介绍
來源:Python數據之道 (ID:PyDataLab)
作者:陽哥
01寫在前面
最近一段時間,我在微信視頻號「價值前瞻」和「Python數據之道」發布了一些視頻,有不少同學問到這些視頻是怎么做的,用什么工具制作的。
在文章 用 python 制作高逼格的數學動畫 中,我跟大家介紹了 Manim 這個視頻制作工具,以及以及案例演示。
不少同學覺得這個工具不錯,問到有沒有完整的使用教程或者相關書籍。據我所知,目前應該是沒有專門的書籍來介紹這個工具的。至于教程,不同版本的Manim有一部分文檔,其中 Manim社區版的文檔相對而言要完善些。
我將基于 Manim社區版(Manim Community)給大家分享Manim入門的內容,當前已有的教程包括:
01-基礎形狀
說明:Manim 社區版,經常縮寫為 manimce,英文全稱是 Manim Community Edition
本次介紹 Manim 中 文本 的使用,使用的版本為 Manim Community v0.14.0,本文內容主要如下:
02Manim的安裝與運行
安裝
如何安裝社區版Manim,參見下面的官方鏈接:
https://docs.manim.community/en/stable/installation.html
如何運行 Manim
用 Manim 繪制圖形,首先需要引入 Manim 庫,然后將需要繪制的內容封裝到一個 類(class) 里面。
社區版的導入代碼如下:
from?manim?import?*對于 編輯好的程序文件( XXXX.py 文件),需要在同一個文件夾下運行命令來運行程序,命令格式如下:
manim?-pql?XXXX.py?DemoSquare上面的命令行中:
manim 是社區版Manim運行程序的主要標志用語;
p 表示程序運行后會進行預覽(圖片或視頻);
ql 表示低質量(quality low), 其他的選項有 -ql, -qm, -qh, -qk, 分別表示 低質量、正常質量、高質量、4K質量;
XXXX.py 是py代碼文件;
DemoSquare 是 py代碼文件中的一個類;
演示過程錄屏如下:
命令行中,還有其他許多參數可以設置,可以通過社區版的支持文檔來進一步了解:
https://docs.manim.community/en/stable/tutorials/configuration.html#command-line-arguments
03文本使用介紹
在 Manim社區版中,文本的使用可以分為幾個大類,分別是:
純文本
標記文本
LaTex 文本
代碼文本
3.1 純文本
純文本是最常見的一類文字,在視頻中使用的標題、正文等,都可以使用純文本,在Manim 中,純文本可以通過 Text() 對象來實現。
比如要輸出 文字 “Python數據之道”,核心代碼如下:
Text("Python數據之道")效果如下:
設置文本大小
對于文本而言,設置文本在屏幕中顯示的大小,是經常要做的一個事情,Text() 對象可以通過多種方法來實現:
設置 scale 屬性值;
設置 set_width 屬性值;
設置 font_size 參數值;
上述代碼的實現效果如下:
設置文本顏色
文本顏色設置包括指定某種顏色以及漸變顏色設置,通常情況下,顏色通過 color 參數來設置,漸變顏色通過 gradient 參數來設置。
演示案例的代碼如下:
#?設置文本顏色 class?Demo3(Scene):def?construct(self):WaterMark.construct(self)s?=?"Python數據之道"t1?=?Text(s,color=BLUE)t1.to_edge(UP,buff=2)t2?=?Text("一份價值,一份收獲",gradient=[BLUE,YELLOW,RED]).next_to(t1,DOWN)t3?=?Text("Hello?World",gradient=[BLUE,YELLOW,RED]).next_to(t2,DOWN)t4?=?Text("@Python數據之道",gradient=[BLUE,YELLOW,RED],font_size=30,fill_opacity=0.8)t4.next_to(t3,DOWN)t5?=?Text("Python數據之道",gradient=[BLUE,YELLOW,RED]).next_to(t4,DOWN)#?當英文和漢字混合時,?當前的manim社區版,使用?gradient?時會出現?bugself.add(t1)self.play(Write(t2))self.play(Create(t3))self.play(Write(t4))self.play(Write(t5))self.wait()上述代碼的實現效果如下:
需要注意的是,當英文和漢字混合時, 當前的manim社區版,使用 gradient 時可能會出現 bug,沒有漸變的效果,上述案例中的 變量 t5 實例 就沒有實現漸變效果。
設置文本樣式
文本樣式的設置,包括文本加粗、斜體文本、文本字體設置、文本透明度設置、文本換行以及行距設置等。
演示案例的代碼如下:
#?設置字體樣式 class?Demo4(Scene):def?construct(self):WaterMark.construct(self)t1?=?Text("Python數據之道",font="Alibaba?PuHuiTi")t1.to_edge(UP,buff=0.5)t2?=?Text("Python數據之道",color=BLUE,font="Times")t2.next_to(t1,DOWN)t3?=?Text("Python數據之道",?weight=BOLD)t3.next_to(t2,DOWN)t4?=?Text("Python數據之道",?slant=ITALIC)t4.next_to(t3,DOWN)t5?=?Text("Python數據之道",?fill_opacity=0.5)t5.next_to(t4,DOWN)t6?=?Text("Hello\nPython",?line_spacing=0.5)t6.next_to(t5,DOWN,buff=1).shift(LEFT)t7?=?Text("Hello\nPython",?line_spacing=2)t7.next_to(t6,RIGHT,buff=1)self.add(t1)self.play(Write(t2))self.play(Write(t3))self.play(Write(t4))self.play(Write(t5))self.add(t6,t7)self.wait()上述代碼的實現效果如下:
需要主要的是,在選擇字體設置時,所選擇的字體需要在自己的電腦中已經安裝了對應的字體,才會有效果。
此外,在對于非英文字體的設置時,可能有些樣式設置會不起作用,具體的需要自己去根據實際情況測試下。
對于咱們而言,一般就是英文和中文的使用,常用的字體加粗、斜體文字、透明度等,是有效的。對于字體,我一般是使用 "Alibaba PuHuiTi" 字體,這個字體可以免費使用。
個性化設置部分文本
在控制顯示過程中,經常會遇到只需要顯示一段文本中一部分文本的情況,可以通過以下幾個參數來進行設置:
t2c,全稱為 "text2color",用來設置部分文字的顏色;
t2f,全稱為 “text2font”,用來設置部分文字的字體;
t2w,全稱為 “text2weight”,用來設置部分文字加粗;
t2s,全稱為 “text2slant”,用來設置部分文字為斜體;
t2g,全稱為 “text2gradient”,用來設置部分文字的漸變顏色;
演示案例的代碼如下:
#?個性化設置部分文本的樣式 class?Demo5(Scene):def?construct(self):WaterMark.construct(self)t1?=?Text("Python數據之道",t2c={"Python":RED,'[7:9]':YELLOW})t1.to_edge(UP,buff=0.5)t2?=?Text("Python數據之道",t2s={"Python":ITALIC})t2.next_to(t1,DOWN)t3?=?Text("Python數據之道",?t2w={"Python":BOLD})t3.next_to(t2,DOWN)t4?=?Text("Python數據之道",?t2f={"Python":"Times"})t4.next_to(t3,DOWN)t5?=?Text("Hello,PyDataLab",?t2g={'PyData':[BLUE,YELLOW,RED],#?'offset':"1",},)t5.next_to(t4,DOWN)t6?=?Text("Hello,Python數據之道",?t2g={'Python':[BLUE,YELLOW,RED],},)t6.next_to(t5,DOWN)t7?=?Text("一份價值,一份收獲",?t2g={'一份價值':[BLUE,YELLOW,RED],},)t7.next_to(t6,DOWN)#?"t2c"、"t2s"、"t2w"、"t2g"、"t2f"?參數設置,可以直接是?字符串,或者是?字符串的位置切片self.add(t1)self.play(Write(t2))self.play(Write(t3))self.play(Write(t4))self.play(Write(t5))self.play(Write(t6))self.play(Write(t7))self.wait()上述代碼的實現效果如下:
通過上面的代碼可以看出,"t2c"、"t2s"、"t2w"、"t2g"、"t2f" 參數設置,可以直接是 字符串,或者是 字符串的位置切片。
需要注意的是,當英文和漢字混合或者全部是中文時, 當前的manim社區版,使用 t2g 對部分文字進行漸變設置 時可能會出現 bug,會出現部分文字漸變效果不完整,或者全部文字都有漸變效果。
純文本應用案例
下面咱們來看一個用純文本實現 “Google” 彩色 logo 的案例,如下:
class?Demo6(Scene):def?construct(self):WaterMark.construct(self)text1?=?Text('Google',t2c={'[:1]':?'#3174f0',?'[1:2]':?'#e53125','[2:3]':?'#fbb003',?'[3:4]':?'#3174f0','[4:5]':?'#269a43',?'[5:]':?'#e53125'},?font_size=58).scale(3)self.play(Write(text1),run_time=3)self.wait()self.play(FadeOut(text1))t2?=?Text('Google',font_size=120)colors?=?[BLUE,?ORANGE,?PURPLE,?PINK,?TEAL,DARK_BROWN,?RED,LIGHT_BROWN,GOLD,BLUE_L_C,ORANGE_L_A,PURPLE_E]*10#?for?i?in?range(len(t2)):#?????t2[i].set_color(colors[i])for?letter?in?t2:letter.set_color(np.random.choice(colors,size=1))self.play(Write(t2),run_time=3)self.wait()上述代碼的實現效果如下:
3.2 標記文本
Manim社區版使用 Pango 來渲染非 LaTex 文本。
Pango標記語言是一種類似 html 的標記語言,可以使用一系列的標記符號。
PangoMarkup is a small markup language like html and it helps you avoid using “range of characters” while coloring or styling a piece a Text. You can use this language with MarkupText.
標記文本的基礎應用
一個簡單的應用案例如下:
class?Markup01(Scene):def?construct(self):WaterMark.construct(self)t1?=?MarkupText('<span foreground="yellow"?size="x-large">Hello,?</span>?<i>Welcome?to?</i>ValueLab?!"')t1.to_edge(UP,buff=2)self.add(t1)self.wait()t2?=?MarkupText('<span foreground="yellow"?size="x-large">一份價值,</span>?一份?<i>收獲</i>!"')t2.next_to(t1,DOWN,buff=1)self.add(t2)self.wait()上述代碼的實現效果如下:
可以看到,對于 Markup 標記語言,在應用于英文文字的時候,應用效果是挺好的,但對于中文字體,上面的文字中,斜體效果就沒有體現出來。不知道是 Pango本身渲染的問題還是 Manim社區版存在一些瑕疵。
當前,Manim中進行文字渲染,支持以下標簽:
標記文本的樣式設置
標記文本的樣式設置包括文字加粗、下劃線、斜體、上標、下表、刪除線等,演示案例的代碼如下:
#?樣式設置,加粗、下劃線、斜體等 class?Markup02(Scene):def?construct(self):WaterMark.construct(self)text1?=?MarkupText("<b>Hello</b>?<i>welcome?to</i>?<b><i>ValueLab</i></b>")text2?=?MarkupText("<s>foo</s>?<u>bar</u>?<big>big</big>?<small>small</small>")text3?=?MarkupText("H<sub>2</sub>O?and?H<sub>3</sub>O<sup>+</sup>")text4?=?MarkupText("type?<tt>help</tt>?for?help")text5?=?MarkupText('<span underline="double">foo</span>?<span underline="error">bar</span>')group?=?VGroup(text1,?text2,?text3,?text4,?text5).arrange(DOWN)self.add(group)上述代碼的實現效果如下:
標記文本的顏色設置
標記文本的顏色設置,主要是漸變色的設置比較復雜,仔細看下面案例中漸變色設置時的各個參數:
#?顏色設置,設置不同的顏色、漸變色等 class?Markup03(Scene):def?construct(self):text1?=?MarkupText(f'all?in?red?<span fgcolor="{YELLOW}">except?this</span>',?color=RED)text2?=?MarkupText("nice?gradient",?gradient=(BLUE,?GREEN))text3?=?MarkupText('nice?<gradient?from="RED"?to="YELLOW">intermediate</gradient>?gradient',gradient=(BLUE,?GREEN),)text4?=?MarkupText('fl?ligature?<gradient?from="RED"?to="YELLOW">causing?trouble</gradient>?here')text5?=?MarkupText('fl?ligature?<gradient?from="RED"?to="YELLOW"?offset="1">defeated</gradient>?with?offset')text6?=?MarkupText('fl?ligature?<gradient?from="RED"?to="YELLOW"?offset="1">floating</gradient>?inside')text7?=?MarkupText('fl?ligature?<gradient?from="RED"?to="YELLOW"?offset="1,1">floating</gradient>?inside')group?=?VGroup(text1,?text2,?text3,?text4,?text5,?text6,?text7).arrange(DOWN)self.add(group)上述代碼的實現效果如下:
文字對齊
在書寫英文文字時,為了排版效果好看,經常需要將文字進行對齊顯示,這個在 Manim中,也可以實現。
演示案例的代碼如下:
#?文字對齊 class?Markup05(Scene):def?construct(self):WaterMark.construct(self)ipsum_text?=?("Lorem?ipsum?dolor?sit?amet,?consectetur?adipiscing?elit.""Praesent?feugiat?metus?sit?amet?iaculis?pulvinar.?Nulla?posuere?""quam?a?ex?aliquam,?eleifend?consectetur?tellus?viverra.?Aliquam?""fermentum?interdum?justo,?nec?rutrum?elit?pretium?ac.?Nam?quis?""leo?pulvinar,?dignissim?est?at,?venenatis?nisi.?Quisque?mattis?""dolor?ut?euismod?hendrerit.?Nullam?eu?ante?sollicitudin,?commodo?""risus?a,?vehicula?odio.?Nam?urna?tortor,?aliquam?a?nibh?eu,?commodo?""imperdiet?arcu.?Donec?tincidunt?commodo?enim?a?tincidunt.")justified_text?=?MarkupText(ipsum_text,?justify=True).scale(0.4)not_justified_text?=?MarkupText(ipsum_text,?justify=False).scale(0.4)just_title?=?Title("Justified")njust_title?=?Title("Not?Justified")self.add(njust_title,?not_justified_text)self.play(Transform(not_justified_text,justified_text,),Transform(njust_title,just_title,),run_time=2,)self.wait(1)上述代碼的實現效果如下:
3.3 LaTex 文本
LaTeX(LATEX,音譯“拉泰赫”)是一種基于ΤΕΧ的排版系統,由美國計算機學家萊斯利·蘭伯特(Leslie Lamport)在20世紀80年代初期開發,利用這種格式,即使使用者沒有排版和程序設計的知識也可以充分發揮由TeX所提供的強大功能,能在幾天、甚至幾小時內生成很多具有書籍質量的印刷品。
對于生成復雜表格和數學公式,這一點表現得尤為突出。因此它非常適用于生成高印刷質量的科技和數學類文檔。這個系統同樣適用于生成從簡單的信件到完整書籍的所有其他種類的文檔。
在 Manim 中使用 latex 文本,需要你的電腦環境中已經安裝了 latex的相關軟件和支持工具。
在 Manim 中,可以通過以下幾種方法來使用 latex 文本,如下:
Tex
MathTex
Title
BulletedList
文本型的 LaTex 可以通過 Tex、Title、BulletedList 來實現,數學公式類型的文本,可以通過 Tex 或 MathTex 來實現。
基礎應用
先來看一個 latex 的基礎應用案例,如下:
class?DemoTex01(Scene):def?construct(self):WaterMark.construct(self)tex1?=?Tex(r"\LaTeX",?font_size=144)tex1.to_edge(UP,buff=1)self.add(tex1)self.wait()tex2?=?Tex(r'$x^2?+?y^2?=?z^2$',?font_size=144)tex2.next_to(tex1,DOWN,buff=0.5)tex3?=?MathTex(r'x^2?+?y^2?=?z^2',?font_size=144,color=BLUE)tex3.next_to(tex2,DOWN,buff=0.5)self.add(tex2)self.wait()self.add(tex3)self.wait()上述代碼的實現效果如下:
在 Tex 或 MathTex 中使用字符串時,一般會使用 r"..." 的形式,而不是 '...' 的形式,這是因為在 latex文本中,經常會涉及到一些特殊的字符,比如 \ 。
在進行數學公式的表達時,使用 Tex 時需要在字符串前后添加符號 $,形式為 r"$...$",使用 MathTex 時,形式為 r"..." 就可以了。兩者之間的區別,需要注意下。
使用 latex 工具包
在 latex 中輸出特殊符號時,可以通過 latex 工具包來實現。
當然,需要你的電腦中已經安裝了對應的 latex 工具包。對于沒有使用過 latex 的同學來說,這個確實會有些繁瑣。
演示案例的代碼如下:
#?使用?latex?工具包 class?DemoTex02(Scene):def?construct(self):WaterMark.construct(self)myTemplate?=?TexTemplate()myTemplate.add_to_preamble(r"\usepackage{mathrsfs}")tex?=?Tex(r'$\mathscr{H}?\rightarrow?\mathbb{H}$}',?tex_template=myTemplate,?font_size=144)self.add(tex)上述代碼的實現效果如下:
數學公式的顏色設置
在 Manim 中,對于數學公式中字符的顏色設置,可以通過參數 set_color_by_tex 和 substrings_to_isolate 的組合來實現不同的效果。
演示案例的代碼如下:
#?數學公式的顏色設置 class?DemoTex03(Scene):def?construct(self):WaterMark.construct(self)eq1?=?MathTex(r"e^x?=?x^0?+?x^1?+?\frac{1}{2}?x^2?+?\frac{1}{6}?x^3?+?\cdots?+?\frac{1}{n!}?x^n?+?\cdots")eq1.scale(1.2)eq1.set_color_by_tex("x",?YELLOW)eq1.to_edge(UP,buff=2)self.add(eq1)self.wait()#?self.play(FadeOut(eq1))eq2?=?MathTex(r"e^x?=?x^0?+?x^1?+?\frac{1}{2}?x^2?+?\frac{1}{6}?x^3?+?\cdots?+?\frac{1}{n!}?x^n?+?\cdots",substrings_to_isolate="x",)eq2.scale(1.2)eq2.set_color_by_tex("x",?RED)eq2.next_to(eq1,DOWN,buff=1)self.add(eq2)self.wait()上述代碼的實現效果如下:
在 eq1 中,僅設置參數 set_color_by_tex 時,是對于包含 “x” 的整個公式進行顏色設置;而在 eq2 中,同時設置參數 set_color_by_tex 和 substrings_to_isolate 時,僅僅對公式中的 “x” 字符進行顏色設置;這兩種是不一樣的應用場景,大家選擇合適的去使用。
我在微信視頻號「價值前瞻」中發布的視頻 “復利效應” 中就使用到類似的案例。
該視頻中涉及數學公式的部分代碼如下:
class?DemoTex04(Scene):def?construct(self):WaterMark.construct(self)equations?=?VGroup(MathTex(r"1.01^{365}?=?37.8",#?size=80,),MathTex(r"1.00^{365}?=?1.00",#?size=80,),MathTex(r"0.99^{365}?=?0.03",#?size=80,),)#?設置寬度#?equations.set_width(FRAME_WIDTH-4)equations.set_width(8)for?equation?in?equations:equation.set_color_by_tex_to_color_map({"1.01":?BLUE,"0.99":?RED,})equations.arrange(DOWN,?buff=0.7,?aligned_edge=LEFT)self.play(Write(equations[0]))self.wait()self.play(Write(equations[2]))self.wait()self.play(Write(equations[1]))self.wait()self.play(equations[1].animate.set_opacity(0.2))self.wait()上述代碼的實現效果如下:
tex 模板應用
在 LaTex 中,可以通過設置使用的模板,來設置使用的字體。此外,在使用中文字符時,經常需要設置中文的模板(一般使用 ctex)。
演示案例的代碼如下:
#?tex?模板應用 class?DemoTex05(Scene):def?construct(self):WaterMark.construct(self)tex1?=?Tex(r'$x^2?+?y^2?=?z^2$',?tex_template=TexFontTemplates.french_cursive,?font_size=144)tex1.to_edge(UP,buff=1)self.add(tex1)self.wait()tex2?=?Tex(r'Hello?你好?\LaTeX',?tex_template=TexTemplateLibrary.ctex,?font_size=144)tex2.next_to(tex1,DOWN,buff=0.5)self.add(tex2)self.wait()上述代碼的實現效果如下:
對于 TexFontTemplates,可以使用的模板說明如下:
A collection of TeX templates for the fonts described at http://jf.burnol.free.fr/showcase.html
公式換行
在數學公式中,可以實現換行效果,如下:
#?公式換行 class?DemoTex06(Scene):def?construct(self):WaterMark.construct(self)tex1?=?MathTex(r'f(x)?&=?3?+?2?+?1\\?&=?5?+?1?\\?&=?6',?font_size=96,)self.add(tex1)self.wait()self.play(FadeOut(tex1))tex2?=?MathTex(r'f(x)?&=?3?+?2?+?1\\?&=?5?+?1?\\?&=?6',?font_size=96,substrings_to_isolate=['5','3'],)tex2.set_color_by_tex_to_color_map({"5":?BLUE,"3":?RED,})self.add(tex2)self.wait()上述代碼的實現效果如下:
Title 對象應用
在視頻中設置文字標題時,可以直接使用 Title 對象,需要說明的是,Title 對象是基于 Tex 來實現的,在涉及中文輸出時,需要設置使用的模板為中文適用的模板。
演示案例的代碼如下:
#?Title?對象應用 class?DemoTex07(Scene):def?construct(self):WaterMark.construct(self)title1?=?Title("Hello,title")self.add(title1)self.wait()self.play(FadeOut(title1))#?使用?“Title”?對象,當有中文時,需要設置中文字體模板(電腦中需要安裝了?ctex)title2?=?Title("你好,title",tex_template=TexTemplateLibrary.ctex)self.add(title2)self.wait()上述代碼的實現效果如下:
列表類型的文本
在文本的使用過程中,會時不時涉及到 列表型文本,目前,在 Manim 中,可以直接實現無序號型的列表文本,通過 BulletedList 對象來實現。
演示案例的代碼如下:
#?列表類型的文本 class?DemoTex08(Scene):def?construct(self):blist?=?BulletedList("Python",?"Java",?"C++",?height=2,?width=2)blist.set_color_by_tex("Python",?RED)blist.set_color_by_tex("Java",?GREEN)blist.set_color_by_tex("C++",?BLUE)self.add(blist)上述代碼的實現效果如下:
3.4 代碼文本
在 IT編程領域,代碼的高亮顯示是一個常見的需求,在 Manim 制作的視頻中,也可以實現代碼高亮的效果,主要是通過 Code() 對象來實現。
下面以快速排序的Python代碼為例,來演示如何在視頻中進行代碼高亮顯示。
class?Code1(Scene):def?construct(self):WaterMark.construct(self)code_str_1?=?"""def?quickSort(Array):??n?=?len(Array)if?n?<=?1:return?Arraybaseline?=?Array[0]left?=?[Array[i]?for?i?in?range(1,?len(Array))?if?Array[i]?<?baseline]?right?=?[Array[i]?for?i?in?range(1,?len(Array))?if?Array[i]?>=?baseline]return?quickSort(left)?+?[baseline]?+?quickSort(right)"""code1?=?Code(code=code_str_1,tab_width=4,background="window",language="Python",font="Monospace",insert_line_no=False,??#?是否顯示代碼行數style='monokai',)code1.scale(0.8).to_edge(UP,buff=1)self.play(Write(code1))self.wait()代碼高亮效果如下:
上述代碼中,變量 code_str_1 是快速排序算法的Python實現代碼, 變量 code1 是 Code() 對象的實例, Code() 有許多參數可以進行設置,這里只對部分參數進行設置:
background 參數,可以選擇 “rectangle” 或 “window”,默認是 “rectangle”,我自己一般喜歡用 “window”;
language 參數是所用的編程語言,支持常用的編程語言;
font 參數,代碼字體,默認為 ?"Monospac821 BT",我一般用 “Monospace”;
insert_line_no 參數,是否顯示代碼行數,默認是 True;需要注意的是,在顯示代碼行數時,有時行數與代碼的對齊效果不一定完美;
style 參數,代碼顯示風格,有多種風格可以選擇,其可選代碼樣式來源于 “pygments” (https://pygments.org/docs/styles/)。可在Python中運行代碼來獲取支持的樣式。
from?pygments.styles?import?get_all_styles styles?=?list(get_all_styles()) style支持的樣式如下:
['default', 'emacs', 'friendly', 'colorful', 'autumn', 'murphy', 'manni', 'monokai', 'perldoc', 'pastie', 'borland', 'trac', 'native', 'fruity', 'bw', 'vim', 'vs', 'tango', 'rrt', 'xcode', 'igor', 'paraiso-light', 'paraiso-dark', 'lovelace', 'algol', 'algol_nu', 'arduino', 'rainbow_dash', 'abap', 'solarized-dark', 'solarized-light', 'sas', 'stata', 'stata-light', 'stata-dark', 'inkpot'] 默認的樣式為 'vim',我一般喜歡用 'monokai' 樣式。
再選擇一款淺色的樣式('solarized-light'),并設置不同的參數值,來對比下效果,如下:
class?Code1(Scene):def?construct(self):WaterMark.construct(self)code_str_1?=?"""def?quickSort(Array):??n?=?len(Array)if?n?<=?1:return?Arraybaseline?=?Array[0]left?=?[Array[i]?for?i?in?range(1,?len(Array))?if?Array[i]?<?baseline]?right?=?[Array[i]?for?i?in?range(1,?len(Array))?if?Array[i]?>=?baseline]return?quickSort(left)?+?[baseline]?+?quickSort(right)"""code1?=?Code(code=code_str_1,tab_width=4,background="window",language="Python",font="Monospace",insert_line_no=False,??#?是否顯示代碼行數style='monokai',)code1.scale(0.8).to_edge(UP,buff=1)self.play(Write(code1))self.wait()code2?=?Code(code=code_str_1,tab_width=4,background="rectangle",?#?rectangle?,?windowlanguage="Python",font="Monospace",insert_line_no=True,??#?是否顯示代碼行數style='solarized-light',#?line_spacing=0.3,)code2.scale(0.8)code2.next_to(code1,DOWN,buff=0.5)self.play(Write(code2))self.wait()代碼高亮效果如下:
Code() 對象還有更多的參數可以進行設置,詳細的參數設置說明,大家可以通過官方文檔來了解。
官方文檔地址:
https://docs.manim.community/en/stable/reference/manim.mobject.svg.code_mobject.Code.html#manim.mobject.svg.code_mobject.Code
04小結
文本的使用,是咱們最常見的領域,在使用文本時,從頻率來看,純文本 是用的最多的,標記文本是對純文本的進一步拓展,而 latex 文本,則是 針對數學公式等特殊且頻率較高的場景來使用的,至于 代碼高亮,則是在IT編程特定領域進行應用。
對于涉及中文的使用,經常需要通過 latex 來實現一些效果,因此,對想進一步深入了解中文排版的同學來,可能需要有一些 latex 的基礎知識。
熟練的使用文本,可以給視頻的排版和外觀帶來不少好處,不要小看這些哦。
END
各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)推薦閱讀
牛逼!Python常用數據類型的基本操作(長文系列第①篇)
牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)
牛逼!Python函數和文件操作(長文系列第③篇)
牛逼!Python錯誤、異常和模塊(長文系列第④篇)
總結
以上是生活随笔為你收集整理的Python视频制作工具Manim入门,文本使用详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 确诊新冠小米员工的活动轨迹,这就是人间真
- 下一篇: Python自动化办公之Excel拆分并