mirror of
https://github.com/3b1b/manim.git
synced 2025-07-30 05:24:22 +08:00
Make sure that altering the tex template files will change tex_hash
This commit is contained in:
@ -137,6 +137,10 @@ for folder in [FILE_DIR, RASTER_IMAGE_DIR, SVG_IMAGE_DIR, ANIMATIONS_DIR, TEX_DI
|
|||||||
TEX_TEXT_TO_REPLACE = "YourTextHere"
|
TEX_TEXT_TO_REPLACE = "YourTextHere"
|
||||||
TEMPLATE_TEX_FILE = os.path.join(THIS_DIR, "template.tex")
|
TEMPLATE_TEX_FILE = os.path.join(THIS_DIR, "template.tex")
|
||||||
TEMPLATE_TEXT_FILE = os.path.join(THIS_DIR, "text_template.tex")
|
TEMPLATE_TEXT_FILE = os.path.join(THIS_DIR, "text_template.tex")
|
||||||
|
with open(TEMPLATE_TEX_FILE, "r") as infile:
|
||||||
|
TEMPLATE_TEX_FILE_BODY = infile.read()
|
||||||
|
with open(TEMPLATE_TEXT_FILE, "r") as infile:
|
||||||
|
TEMPLATE_TEXT_FILE_BODY = infile.read()
|
||||||
|
|
||||||
FFMPEG_BIN = "ffmpeg"
|
FFMPEG_BIN = "ffmpeg"
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ class Brace(TexMobject):
|
|||||||
"width_multiplier": 2,
|
"width_multiplier": 2,
|
||||||
"max_num_quads": 15,
|
"max_num_quads": 15,
|
||||||
"min_num_quads": 0,
|
"min_num_quads": 0,
|
||||||
|
"background_stroke_width": 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, mobject, direction=DOWN, **kwargs):
|
def __init__(self, mobject, direction=DOWN, **kwargs):
|
||||||
|
@ -36,7 +36,7 @@ class TexSymbol(VMobjectFromSVGPathstring):
|
|||||||
|
|
||||||
class SingleStringTexMobject(SVGMobject):
|
class SingleStringTexMobject(SVGMobject):
|
||||||
CONFIG = {
|
CONFIG = {
|
||||||
"template_tex_file": TEMPLATE_TEX_FILE,
|
"template_tex_file_body": TEMPLATE_TEX_FILE_BODY,
|
||||||
"stroke_width": 0,
|
"stroke_width": 0,
|
||||||
"fill_opacity": 1.0,
|
"fill_opacity": 1.0,
|
||||||
"background_stroke_width": 5,
|
"background_stroke_width": 5,
|
||||||
@ -54,7 +54,7 @@ class SingleStringTexMobject(SVGMobject):
|
|||||||
self.tex_string = tex_string
|
self.tex_string = tex_string
|
||||||
file_name = tex_to_svg_file(
|
file_name = tex_to_svg_file(
|
||||||
self.get_modified_expression(tex_string),
|
self.get_modified_expression(tex_string),
|
||||||
self.template_tex_file
|
self.template_tex_file_body
|
||||||
)
|
)
|
||||||
SVGMobject.__init__(self, file_name=file_name, **kwargs)
|
SVGMobject.__init__(self, file_name=file_name, **kwargs)
|
||||||
if self.height is None:
|
if self.height is None:
|
||||||
@ -251,7 +251,7 @@ class TexMobject(SingleStringTexMobject):
|
|||||||
|
|
||||||
class TextMobject(TexMobject):
|
class TextMobject(TexMobject):
|
||||||
CONFIG = {
|
CONFIG = {
|
||||||
"template_tex_file": TEMPLATE_TEXT_FILE,
|
"template_tex_file_body": TEMPLATE_TEXT_FILE_BODY,
|
||||||
"alignment": "\\centering",
|
"alignment": "\\centering",
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ class BulletedList(TextMobject):
|
|||||||
"buff": MED_LARGE_BUFF,
|
"buff": MED_LARGE_BUFF,
|
||||||
"dot_scale_factor": 2,
|
"dot_scale_factor": 2,
|
||||||
# Have to include because of handle_multiple_args implementation
|
# Have to include because of handle_multiple_args implementation
|
||||||
"template_tex_file": TEMPLATE_TEXT_FILE,
|
"template_tex_file_body": TEMPLATE_TEXT_FILE_BODY,
|
||||||
"alignment": "",
|
"alignment": "",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,34 +6,34 @@ from constants import TEX_DIR
|
|||||||
from constants import TEX_TEXT_TO_REPLACE
|
from constants import TEX_TEXT_TO_REPLACE
|
||||||
|
|
||||||
|
|
||||||
def tex_hash(expression, template_tex_file):
|
def tex_hash(expression, template_tex_file_body):
|
||||||
id_str = str(expression + template_tex_file)
|
id_str = str(expression + template_tex_file_body)
|
||||||
hasher = hashlib.sha256()
|
hasher = hashlib.sha256()
|
||||||
hasher.update(id_str.encode())
|
hasher.update(id_str.encode())
|
||||||
# Truncating at 16 bytes for cleanliness
|
# Truncating at 16 bytes for cleanliness
|
||||||
return hasher.hexdigest()[:16]
|
return hasher.hexdigest()[:16]
|
||||||
|
|
||||||
|
|
||||||
def tex_to_svg_file(expression, template_tex_file):
|
def tex_to_svg_file(expression, template_tex_file_body):
|
||||||
tex_file = generate_tex_file(expression, template_tex_file)
|
tex_file = generate_tex_file(expression, template_tex_file_body)
|
||||||
dvi_file = tex_to_dvi(tex_file)
|
dvi_file = tex_to_dvi(tex_file)
|
||||||
return dvi_to_svg(dvi_file)
|
return dvi_to_svg(dvi_file)
|
||||||
|
|
||||||
|
|
||||||
def generate_tex_file(expression, template_tex_file):
|
def generate_tex_file(expression, template_tex_file_body):
|
||||||
result = os.path.join(
|
result = os.path.join(
|
||||||
TEX_DIR,
|
TEX_DIR,
|
||||||
tex_hash(expression, template_tex_file)
|
tex_hash(expression, template_tex_file_body)
|
||||||
) + ".tex"
|
) + ".tex"
|
||||||
if not os.path.exists(result):
|
if not os.path.exists(result):
|
||||||
print("Writing \"%s\" to %s" % (
|
print("Writing \"%s\" to %s" % (
|
||||||
"".join(expression), result
|
"".join(expression), result
|
||||||
))
|
))
|
||||||
with open(template_tex_file, "r") as infile:
|
new_body = template_tex_file_body.replace(
|
||||||
body = infile.read()
|
TEX_TEXT_TO_REPLACE, expression
|
||||||
body = body.replace(TEX_TEXT_TO_REPLACE, expression)
|
)
|
||||||
with open(result, "w") as outfile:
|
with open(result, "w") as outfile:
|
||||||
outfile.write(body)
|
outfile.write(new_body)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user