将markdown文件和LaTex公式转为word
通义千问等大模型生成的回答多数是markdown类型的,需要将他们转为Word文件
一 pypandoc 介绍
1. 项目介绍
pypandoc 是一个用于 pandoc 的轻量级 Python 包装器。pandoc 是一个通用的文档转换工具,支持多种格式的文档转换,如 Markdown、HTML、LaTeX、DocBook 等。pypandoc 通过提供一个简单的 Python 接口,使得在 Python 脚本中调用 pandoc 变得更加方便。
2. 安装
使用pip安装:
pip install pypandoc_binary
自动下载 Pandoc并安装
注意:pypandoc 提供了两个包:
pypandoc:需要用户自行安装 pandoc软件才能使用。
pypandoc_binary:包含了预编译的 pandoc 二进制文件,方便用户快速上手。
手动安装
可以手动安装pandoc再安装pypandoc库
pip install pypandoc
也可以先安装pypandoc然后再在pyhon中运行 pypandoc.download_pandoc()函数自动下载并安装 Pandoc,将其存放在 pypandoc 可以访问的目录中。
二、使用Python 将markdown转Word
本脚本实现了三类功能
1、将markdown文件转为word文件
2、将 markdown中段落开头的“-“转为回车,避免渲染成黑点或者空心圆等Word中不常见的符号
3、自定义了模板,格式化输出。
import pypandoc
import time
import re# 定义路径
path1 = r"md.md"
path2 = r".docx"
template_path = r"D:\aTools\ytemplates\templates_s.docx"# 读取原始Markdown文件内容
with open(path1, 'r', encoding='utf-8') as file:content = file.read()# 使用正则表达式将以'- '开头的部分替换为换行符
processed_content = re.sub(r'- ', '\n', content)# 记录开始时间
t1 = time.time()# 将处理后的内容转换为Word文档
pypandoc.convert_text(processed_content,'docx',format='md',outputfile=path2,extra_args=['--reference-doc', template_path]
)# 打印耗时
print(time.time() - t1)
print("转换完成!")
三、直接指定Word格式
直接读取文件(可以为txt或者md)转为指定格式的word。
这里格式是:
1、将 markdown中段落开头的“-“转为回车,避免渲染成黑点或者空心圆等Word中不常见的符号
2、将原来加粗部分继续加粗和左对齐
3、字体为黑色GB2312
注意:代码用正则替换####这些时需要先从4级标题开始替换否则会有逻辑错误,导致奇数个#无法替换。
设置中文字体不能用run.font.name = '仿宋_GB2312’而是用style._element.rPr.rFonts.set(qn(‘w:eastAsia’), ‘仿宋_GB2312’) 设置中文字体。
import re
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn# 定义设置字体和颜色的函数
def set_font_color(run):run.font.name = 'Times New Roman' # 设置西文字体run._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋_GB2312') # 设置中文字体run.font.size = Pt(12)run.font.color.rgb = RGBColor(0, 0, 0)run.italic = False # 去除斜体# 定义路径
path1 = r"C:\Users\xueshifeng\Desktop\数据分割.txt"
path2 = r"C:\Users\xueshifeng\Desktop\数据分割.docx"# 读取原始txt文件内容
with open(path1, 'r', encoding='utf-8') as file:content = file.read()# 处理以'- '开头的项目符号
processed_content = re.sub(r'- ', '\n', content)# 创建一个新的Word文档
doc = Document()# 设置默认字体为仿宋_GB2312
style = doc.styles['Normal']
style.font.name = 'Times New Roman' # 设置西文字体
style._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋_GB2312') # 设置中文字体
style.font.size = Pt(12)
style.font.color.rgb = RGBColor(0, 0, 0)# 正则表达式模式
bold_pattern = re.compile(r'\*\*(.*?)\*\*')
heading4_pattern = re.compile(r'^\s*####\s*(.*)') # 四级标题
heading3_pattern = re.compile(r'^\s*###\s*(.*)') # 三级标题
heading2_pattern = re.compile(r'^\s*##\s*(.*)') # 二级标题
heading1_pattern = re.compile(r'^\s*#\s*(.*)') # 一级标题# 处理每一行内容
for line in processed_content.split('\n'):# 检查四级标题heading_match = heading4_pattern.match(line)if heading_match:title_text = heading_match.group(1).strip()if title_text:heading = doc.add_heading(title_text, level=4)heading.alignment = WD_ALIGN_PARAGRAPH.LEFTfor run in heading.runs:set_font_color(run)run.bold = Truecontinue # 跳过后续处理# 检查三级标题heading_match = heading3_pattern.match(line)if heading_match:title_text = heading_match.group(1).strip()if title_text:heading = doc.add_heading(title_text, level=3)heading.alignment = WD_ALIGN_PARAGRAPH.LEFTfor run in heading.runs:set_font_color(run)run.bold = Truecontinue # 跳过后续处理# 检查二级标题heading_match = heading2_pattern.match(line)if heading_match:title_text = heading_match.group(1).strip()if title_text:heading = doc.add_heading(title_text, level=2)heading.alignment = WD_ALIGN_PARAGRAPH.LEFTfor run in heading.runs:set_font_color(run)run.bold = Truecontinue # 跳过后续处理# 检查一级标题heading_match = heading1_pattern.match(line)if heading_match:title_text = heading_match.group(1).strip()if title_text:heading = doc.add_heading(title_text, level=1)heading.alignment = WD_ALIGN_PARAGRAPH.LEFTfor run in heading.runs:set_font_color(run)run.bold = Truecontinue # 跳过后续处理# 处理普通段落和加粗文本matches = list(bold_pattern.finditer(line))if not matches:paragraph = doc.add_paragraph(line)paragraph.alignment = WD_ALIGN_PARAGRAPH.LEFTfor run in paragraph.runs:set_font_color(run)else:paragraph = doc.add_paragraph()start = 0for match in matches:if match.start() > start:run = paragraph.add_run(line[start:match.start()])set_font_color(run)run = paragraph.add_run(match.group(1))run.bold = Trueset_font_color(run)start = match.end()if start < len(line):run = paragraph.add_run(line[start:])set_font_color(run)paragraph.alignment = WD_ALIGN_PARAGRAPH.LEFT# 保存文档
doc.save(path2)print("转换完成!")
四、将LaTex公式转为Word
将 latex_content字符串$ $ 中间的位置替换为公式,或者直接复制代码到GPT,让GPT修改代码
import pypandoc# 定义包含特定公式的LaTeX字符串
#$ $ 中间的位置替换为公式,或者直接复制代码到GPT,让GPT生成最终代码
latex_content = r"""
\documentclass{article}
\usepackage{amsmath} % 确保包含用于数学排版的包
\begin{document}$ L(y_i, f(x_i)) = \max(0, 1 - y_if(x_i)) $\end{document}
"""# 将LaTeX内容转换为Word文档
output_file = r"xx14.docx"output = pypandoc.convert_text(latex_content, # 输入的字符串'docx', # 输出格式format='latex', # 输入格式(LaTeX)outputfile=output_file, # 输出文件路径extra_args=['--mathml'] # 额外参数,确保公式渲染为MathML格式
)# 检查转换是否成功
if output != '':print(f"转换过程中出现错误: {output}")
else:print(f"Word 文档已生成: {output_file}")
相关文章:
将markdown文件和LaTex公式转为word
通义千问等大模型生成的回答多数是markdown类型的,需要将他们转为Word文件 一 pypandoc 介绍 1. 项目介绍 pypandoc 是一个用于 pandoc 的轻量级 Python 包装器。pandoc 是一个通用的文档转换工具,支持多种格式的文档转换,如 Markdown、HTM…...
grpc 和 http 的区别---二进制vsJSON编码
gRPC 和 HTTP 是两种广泛使用的通信协议,各自适用于不同的场景。以下是它们的详细对比与优势分析: 一、核心特性对比 特性gRPCHTTP协议基础基于 HTTP/2基于 HTTP/1.1 或 HTTP/2数据格式默认使用 Protobuf(二进制)通常使用 JSON/…...
C#面向对象(封装)
1.什么是封装? C# 封装 封装 被定义为“把一个或多个项目封闭在一个物理的或者逻辑的包中”。 在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。 抽象和封装是面向对象程序设计的相关特性。 抽象允许相关信息可视化,封装则使开发者实现所…...
kamailio-kamctl monitor解释
这段输出是 Kamailio 服务器的运行时信息和统计数据的摘要。以下是对每个部分的详细解释: 1. Kamailio Runtime Details cycle #: 3: 表示 Kamailio 的主循环已经运行了 3 个周期。Kamailio 是一个事件驱动的服务器,主循环用于处理事件和请求。if const…...
39. I2C实验
一、IIC协议详解 1、ALPHA开发板上有个AP3216C,这是一个IIC接口的器件,这是一个环境光传感器。AP3216C连接到了I2C1上: I2C1_SCL: 使用的是UART4_TXD这个IO,复用位ALT2 I2C1_SDA: 使用的是UART4_RXD这个IO。复用为ALT2 2、I2C分为SCL和SDA&…...
GPIO配置通用输出,推挽输出,开漏输出的作用,以及输出上下拉起到的作用
通用输出说明: ①输出原理: 对输出数据寄存器的对应位写0 或 1,就可以控制对应编号的IO口输出低/高电平 ②输出类型 推挽输出:IO口可以输出高电平,也可以输出低电平 开漏输出:IO口只能输出低电平 所以…...
Spring AOP 入门教程:基础概念与实现
目录 第一章:AOP概念的引入 第二章:AOP相关的概念 1. AOP概述 2. AOP的优势 3. AOP的底层原理 第三章:Spring的AOP技术 - 配置文件方式 1. AOP相关的术语 2. AOP配置文件方式入门 3. 切入点的表达式 4. AOP的通知类型 第四章&#x…...
DeepSeek 核心技术全景解析
DeepSeek 核心技术全景解析:突破性创新背后的设计哲学 DeepSeek的创新不仅仅是对AI基础架构的改进,更是一场范式革命。本文将深入剖析其核心技术,探讨 如何突破 Transformer 计算瓶颈、如何在 MoE(Mixture of Experts)…...
90,【6】攻防世界 WEB Web_php_unserialize
进入靶场 进入靶场 <?php // 定义一个名为 Demo 的类 class Demo { // 定义一个私有属性 $file,默认值为 index.phpprivate $file index.php;// 构造函数,当创建类的实例时会自动调用// 接收一个参数 $file,用于初始化对象的 $file 属…...
实现网站内容快速被搜索引擎收录的方法
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/6.html 实现网站内容快速被搜索引擎收录,是网站运营和推广的重要目标之一。以下是一些有效的方法,可以帮助网站内容更快地被搜索引擎发现和收录: 一、确…...
WSL2中安装的ubuntu搭建tftp服务器uboot通过tftp下载
Windows中安装wsl2,wsl2里安装ubuntu。 1. Wsl启动后 1)Windows下ip ipconfig 以太网适配器 vEthernet (WSL (Hyper-V firewall)): 连接特定的 DNS 后缀 . . . . . . . : IPv4 地址 . . . . . . . . . . . . : 172.19.32.1 子网掩码 . . . . . . . .…...
机器学习优化算法:从梯度下降到Adam及其变种
机器学习优化算法:从梯度下降到Adam及其变种 引言 最近deepseek的爆火已然说明,在机器学习领域,优化算法是模型训练的核心驱动力。无论是简单的线性回归还是复杂的深度神经网络,优化算法的选择直接影响模型的收敛速度、泛化性能…...
[SAP ABAP] 静态断点的使用
在 ABAP 编程环境中,静态断点通过关键字BREAK-POINT实现,当程序执行到这一语句时,会触发调试器中断程序的运行,允许开发人员检查当前状态并逐步跟踪后续代码逻辑 通常情况下,在代码的关键位置插入静态断点可以帮助开发…...
129.求根节点到叶节点数字之和(遍历思想)
Problem: 129.求根节点到叶节点数字之和 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 直接利用二叉树的先序遍历,将遍历过程中的节点值先利用字符串拼接起来遇到根节点时再转为数字并累加起来,在归的过程中…...
NCCL、HCCL、通信、优化
文章目录 从硬件PCIE、NVLINK、RDMA原理到通信NCCL、MPI原理!通信实现方式:机器内通信、机器间通信通信实现方式:通讯协调通信实现方式:机器内通信:PCIe通信实现方式:机器内通信:NVLink通信实现…...
unity学习21:Application类与文件存储的位置
目录 1 unity是一个跨平台的引擎 1.1 使用 Application类,去读写文件 1.2 路径特点 1.2.1 相对位置/相对路径: 1.2.2 固定位置/绝对路径: 1.3 测试方法,仍然挂一个C#脚本在gb上 2 游戏数据文件夹路径(只读&…...
17 一个高并发的系统架构如何设计
高并发系统的理解 第一:我们设计高并发系统的前提是该系统要高可用,起码整体上的高可用。 第二:高并发系统需要面对很大的流量冲击,包括瞬时的流量和黑客攻击等 第三:高并发系统常见的需要考虑的问题,如内存不足的问题,服务抖动的…...
Spring Boot 实例解析:配置文件
SpringBoot 的热部署: Spring 为开发者提供了一个名为 spring-boot-devtools 的模块来使用 SpringBoot 应用支持热部署,提高开发者的效率,无需手动重启 SpringBoot 应用引入依赖: <dependency> <groupId>org.springfr…...
pytorch图神经网络处理图结构数据
人工智能例子汇总:AI常见的算法和例子-CSDN博客 图神经网络(Graph Neural Networks,GNNs)是一类能够处理图结构数据的深度学习模型。图结构数据由节点(vertices)和边(edges)组成&a…...
计算机网络一点事(23)
传输层 端口作用:标识主机特定进程,TCP,UDP协议 端口号分类:服务器:0-1023,熟知 1024-49151 登记 客户端:49152-65535 功能:实现端到端,进程到进程的通信,…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
