最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

[ManimGL 源碼解讀] SingleStringTex 如何渲染公式

2022-07-17 14:05 作者:EKVTGwNJiElK  | 我要投稿

和?Tex?一樣,定義在?manimlib/mobject/svg/tex_mobject.py。傳入單個(gè)字符串?tex_string?渲染出?SVGMobject。

檢測(cè)類型,保存?tex_string,調(diào)用?SVGMobject.__init__。

init_svg_mobject?大概就是設(shè)置散列(Hash),生成 SVG。

SingleStringTex?重寫了?SVGMobject.hash_seed(獲取散列種子方法)。

與父類相比,SingleStringTex.hash_seed?去掉?file_name(因?yàn)槭?None),添加?tex_string(傳入的 LaTeX 字符串)、alignment(對(duì)齊方式,默認(rèn)?"\centering")、math_mode(是否開啟數(shù)學(xué)環(huán)境,默認(rèn)?True)(為什么要這樣做?)。

SVG_HASH_TO_MOB_MAP?是一個(gè)存儲(chǔ)?VMobject?的散列值的字典。

generate_mobject?生成 SVG。

SingleStringTex?重寫了?get_file_path?方法。它會(huì)根據(jù)一開始提供的?tex_string?渲染 SVG 文件,返回文件名。display_during_execution?給出提示信息。

get_tex_file_body?獲得最終寫入?.tex?的字符串。

get_modified_expression?獲得?tex_string?特殊處理(大概是補(bǔ)全括號(hào)之類的)后的字符串,用?new_tex?保存。

modify_special_strings?特殊處理?tex_string?(這兩個(gè)函數(shù)直接把我整蒙了,get_modified_expression?里面就直接?return?掉,差不多就是起了個(gè)別名。而且它還會(huì)對(duì)一個(gè)字符串?strip?兩次??我很難理解這樣做的用意)。

modify_special_strings?代碼我就不貼了,60+ 行又臭又長)

tex_to_svg_file?讀取?.tex?文件位置,根據(jù)?tex_file_content?計(jì)算散列值構(gòu)造文件名(svg_file)。如果沒有渲染過,則寫入?.tex?文件并渲染它。

get_tex_dir?獲得保存?.tex?文件的文件夾。

get_temp_dir?獲得保存臨時(shí)文件的位置。在 Linux 上是?/tmp。

get_directories?獲得文件夾設(shè)置。

CUSTOMIZATION?一開始是空字典,第一次調(diào)用后就會(huì)把?default_config.yml?和?custom_config.yml(若存在)轉(zhuǎn)換成字典。可以看出,這里有對(duì)?temporary_storage?特判:若它是空字符串?"",則把它設(shè)置為操作系統(tǒng)的默認(rèn)臨時(shí)文件存放位置(tempfile.gettempdir())。

guarantee_existence?保證文件夾存在。如果不存在就新建文件夾。

tex_hash?根據(jù)?tex_content?生成對(duì)應(yīng)散列值,這是用于判斷兩個(gè)?SingleStringTex?是否相等的方法?;叵肭懊娴?SingleStringTex.hash_seed,增加的內(nèi)容正好共同決定了?tex_content。其實(shí)現(xiàn)在你還可以再看看?SVGMobject.init_svg_mobject,相同的不僅不會(huì)重復(fù)渲染,也不會(huì)重復(fù)執(zhí)行?generate_mobject。

現(xiàn)在我們終于弄清 ManimGL 如何生成?.tex?的文件名的細(xì)節(jié)了。這時(shí)文件名保存在?tex_to_svg_file?變量里,最終返回的也是這個(gè)變量。接下來我們來看看 ManimGL 怎么調(diào)用 LaTeX,怎么生成最終的 SVG 文件。

tex_to_svg?把傳入的?tex_file_content?渲染成 SVG,寫入傳入的?svg_file,返回?svg_file。可以看到,svg_file?的后綴轉(zhuǎn)換成?.svg,保存在?tex_file。接著打開文件,把?tex_file_content?寫入?tex_file,開始渲染(如果以前渲染過的話就不會(huì)調(diào)用?tex_to_svg)。渲染完成后,把除了?.svg?的文件刪除。

tex_to_dvi?調(diào)用?letaxxelatex -no-pdf) 把?.tex?渲染成?.dvi.xdv) 文件。

dvi_to_svg?調(diào)用?dvisvgm?把?.dvi?轉(zhuǎn)換成?.svg?文件。

回到生成 SVG 的?generate_mobject,后面是雜七雜八地對(duì)?.svg?一頓操作。不過這些都不是和渲染公式相關(guān)的,不是本文重點(diǎn)。

回到?SVGMobject.__init__,后面是調(diào)用設(shè)置顏色、位置的方法。

再退回?SingleStringTex.__init__,后面是設(shè)置高度、給?submobjects?排序。

沒了。

[ManimGL 源碼解讀] SingleStringTex 如何渲染公式的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
宣武区| 洞口县| 东海县| 喀什市| 虎林市| 离岛区| 德昌县| 新乐市| 皋兰县| 平乡县| 本溪市| 慈利县| 贞丰县| 涞水县| 碌曲县| 龙游县| 安丘市| 八宿县| 房产| 本溪| 上杭县| 永新县| 垦利县| 临邑县| 福清市| 故城县| 平谷区| 甘肃省| 绥宁县| 灵川县| 健康| 民勤县| 南康市| 伊金霍洛旗| 巫山县| 恩施市| 巴林左旗| 五指山市| 江阴市| 远安县| 九龙城区|