最近在用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文件或命令。