自己学编程时做了很多笔记,如今累积起来已经有几十个了,有很多图片链,怕哪天图床垮了图片就找不到了,于是就想把当时的 md 文件都转成 pdf 。
看了点文章,就开始实践:
1.下载 pandoc 和 CTex
2.ChatGpt 弄一个脚本,需求是扫描脚本所在目录所有的 md 文件,并输出 pdf 文件到指定目录下,pdf 引擎用 xelatex, 转换用的 latex 模版需要和 md 文件目录放在一起。
最后得到这么一个脚本:
import os
import subprocess
import sys
directory_path = './'
# 确定输出文件夹
if len(sys.argv) == 2:
output_folder = sys.argv[1]
else:
output_folder = ""
# 确保输出文件夹存在
if output_folder and not os.path.exists(output_folder):
os.makedirs(output_folder)
converted_folder = "converted"
failed_folder = "failed"
if not os.path.exists(converted_folder):
os.makedirs(converted_folder)
if not os.path.exists(failed_folder):
os.makedirs(failed_folder)
# 获取目录下所有的md文件
md_files = [f for f in os.listdir(directory_path) if f.endswith(".md")]
for md_file in md_files:
# 构建输出文件路径
if output_folder:
output_path = f'{
output_folder}/{
md_file.replace(".md", ".pdf")}'
else:
output_path = f'{
md_file.replace(".md", ".pdf")}'
# 构建 pandoc 命令
cmd = f'pandoc "{
md_file}" -o "{
output_path}" --pdf-engine=xelatex --template eisvogel.latex --listings -V CJKmainfont="Microsoft YaHei"'
print(cmd)
# 执行命令
try:
subprocess.run(cmd, shell=True, check=True)
os.rename(os.path.join(directory_path, md_file), os.path.join(converted_folder, md_file))
except subprocess.CalledProcessError:
os.rename(os.path.join(directory_path, md_file), os.path.join(failed_folder, md_file))
print("Conversion complete.")
由于我用的 typora ,想让输出的界面效果和 typora 的尽量一致,于是在 typora 官网上找到了个叫eisvogel的模版,模板内容太长了,放在文章最后发。
这个脚本我刚开始尝试下Windows的环境下使用,但不知道是Powershell解析问题还是什么,搞了半天latex出现各种莫名奇妙的错误,查网几个小时下来找不到解决方法,最后只得放弃。
过了几个月,又想起这事,这次不走windows了,改到了wsl上,一些问题查网加上通义AI,总算走通了,做个记录,有windows路线打通了的朋友,告诉我一声。
环境:
OS:Windows 11专业版