带公式的markdown转成docx和pdf

本文介绍了如何将包含公式的Markdown文件转换为docx和pdf格式。转换pdf时需启用tex_math_dollars选项并指定字体解决汉字问题,可以使用tzengyuxio的模板解决中文换行。转换docx时,若公式显示为问号,可能是因为缺少公式字体,更换为Cambria Math字体即可。参考了相关博客文章提供解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pdf:

对公式的支持需要加入tex_math_dollars选项,
pandoc -f markdown+tex_math_dollars -t latex ./test.md -o test.pdf --latex-engine=xelatex
上面的命令转换出的pdf没有汉字,传说是因为没有指定字体,所以下面这样才行,
pandoc -f markdown+tex_math_dollars ./test.md -o test.pdf --latex-engine=xelatex -V mainfont="KaiTi"
或者,
pandoc -f markdown+tex_math_dollars ./test.md -o test.pdf --latex-engine=xelatex -V mainfont="SimSun"
查看系统支持的字体,
fc-list
fc-list >fc-list.txt
上面命令输出的pdf中文换行有问题,下面利用tzengyuxio提供的pm-template.latex解决中文换行问题,最终的完整命令
pandoc -f markdown+tex_math_dollars ./test.md -o test.pdf --latex-engine=xelatex --template=template_pdf.latex

### 将包含数学公式PDF准确无误地换成Word文档 为了实现这一目标,可以利用具有强大格式兼容性的工具来处理。对于此需求而言,Pandoc是一个不错的选择,因为其能够支持多种文件格式间的换,并且在处理复杂内容方面表现出色[^2]。 然而需要注意的是,在直接从PDFDocx的过程中可能会遇到一些挑战,尤其是涉及到保持数学公式原样不变的情况下。因此建议先将PDF中的内容提取出来并保存为一种中间格式——如LaTeXMarkdown,这两种格式都擅长描述结构化文本以及数学表达式;之后再借助于Pandoc完成最终的目标换过程。 具体操作如下: #### 使用pymuPDF读取PDF并将页面内容导出为图片形式 由于PDF内部表示方式较为特殊,直接解析可能无法很好地保留原有布局与样式信息,所以这里采用间接手段:把每一页渲染成为高分辨率图像,随后通过OCR技术识别其中的文字部分。这种方法虽然绕了一圈但是能较好地解决公式显示问题。 ```python import fitz # pymupdf库的别名 from PIL import Image, ImageDraw, ImageFont def pdf_to_images(pdf_path): doc = fitz.open(pdf_path) images_list = [] for page_num in range(len(doc)): page = doc.load_page(page_num) pix = page.get_pixmap() img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) images_list.append(img) return images_list ``` #### 利用Tesseract OCR引擎获取文字数据并与原始图片合成新PDF 安装必要的依赖包后,可以通过调用tesserocr接口来进行光学字符识别工作。考虑到数学符号的存在,还需要额外指定合适的配置参数以提高准确性。 ```bash pip install pytesseract tesserocr pillow sudo apt-get install tesseract-ocr libtesseract-dev libleptonica-dev ``` ```python import pytesseract pytesseract.pytesseract.tesseract_cmd = r'/usr/bin/tesseract' def ocr_image(image_file): text = pytesseract.image_to_string( image_file, lang='chi_sim', config=r'-c preserve_interword_spaces=1 --psm 6' ) return text.strip() images_with_text = [] for idx, img in enumerate(images_from_pdf): txt = ocr_image(img) new_img = Image.new('RGBA', (img.size[0]+300, img.size[1]), color=(255,255,255)) d = ImageDraw.Draw(new_img) fnt = ImageFont.truetype("/path/to/some/font.ttf", size=48) d.text((new_img.size[0]-290, 10), str(idx+1)+': '+txt[:min(70,len(txt))], font=fnt, fill="black") combined_im = Image.alpha_composite(new_img.convert('RGBA'), img.convert('RGBA')) images_with_text.append(combined_im) output_filename = "combined.pdf" images_with_text[0].save(output_filename, save_all=True, append_images=images_with_text[1:]) ``` #### 应用Pandoc进行最后一步换 当拥有了经过预处理后的高质量PDF副本以后,就可以放心大胆地交给Pandoc去完成了! ```bash pandoc input.pdf -o output.docx --pdf-engine=xelatex ``` 上述方法能够在很大程度上保证数学公式及其他重要细节不丢失的前提下顺利完成PDF到Word文档的变。当然实际应用过程中还需根据具体情况调整各环节的具体设置选项。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值