背景
最近在用latex做笔记,有时笔记中需要插入较多图片,以手工的方式逐个插入图片费时费力,所以想到用python管理脚本,实现图片的自动插入。
方案
我使用的解决方案是,为每一个图片生成一个独立的tex文件,放置该图片的引用信息,然后以“/include{img_tex_path.tex}”的方式,把图片插入到latex文件中的对应位置。
用python为每一个图片生成独立tex文件的脚本如下:
import os
import glob
def write_fig_2_tex(fig_path,fig_width=12,fig_caption=""):
# 图片信息整理
fig_path = "/".join(os.path.split(fig_path)[:]) # 图片路径标准化
fig_name = os.path.split(fig_path)[-1].split(".")[0] # 图片name
fig_label = "fig:"+fig_name # 图片label
# 创建并打开tex文件
tex_path = fig_path.split(".")[0]+".tex"
tex_file = open(tex_path,"w",encoding="utf-8")
# # 写入图片引用信息--方式1
# tex_file.write(
# "\\begin{{figure}}[htbp]\n"
# "\t\centering\n"
# "\t\includegraphics[width={}cm]".format(fig_width)+"{"+fig_path+"}\n"
# "\t\caption{"+fig_caption+"}\n"
# "\t\label{"+fig_label+"}\n"
# "\end{figure}\n"
# "\clearpage\n"
# )
# 写入图片引用信息--方式2
tex_file.write(
f"\\begin{{figure}}[htbp]\n"
f"\t\centering\n"
f"\t\includegraphics[width={fig_width}cm]{{{fig_path}}}\n"
f"\t\caption{{{fig_caption}}}\n"
f"\t\label{{{fig_label}}}\n"
f"\end{{figure}}\n"
f"\clearpage\n"
)
# 关闭tex文件
tex_file.close()
if __name__ =="__main__":
fig_dir = "data/chap05/figs/"
fig_paths = glob.glob(fig_dir+"*.png")
for fig_path in fig_paths:
write_fig_2_tex(fig_path,fig_width=12,fig_caption=" ")
如果想把一个文件夹下的所有图片的latex插入信息放进同一个tex文件中,可参考以下代码:
import os
import glob
img_dir = "data/chap01/sections/figs/"
tex_path = img_dir+"/figs.tex"
tex_file = open(tex_path,"w",encoding="utf-8")
#tex_file = open(tex_path,"w+",encoding="utf-8")
for i in range(1,60):
img_path = img_dir+"/{}.png".format(i)
if os.path.exists(img_path):
# 图片信息整理
fig_path = "/".join(os.path.split(img_path)[:]) # 图片路径标准化
fig_name = os.path.split(fig_path)[-1].split(".")[0] # 图片name
fig_label = "fig:"+fig_name # 图片label
fig_width = 12
fig_caption = f"sub-fig-{i}"
tex_file.write(
f"\\begin{{figure}}[htbp]\n"
f"\t\centering\n"
f"\t\includegraphics[width={fig_width}cm]{{{fig_path}}}\n"
f"\t\caption{{{fig_caption}}}\n"
f"\t\label{{{fig_label}}}\n"
f"\end{{figure}}\n"
f"\clearpage\n"
)
tex_file.close()
扩展
类似地,可以用python批量/自动处理其他latex文件或命令。