当前位置:首页 > 技术分析 > 正文内容

怎么用VSCode为今日头条写文章?

ruisui883个月前 (03-12)技术分析38

怎么用VSCode为今日条头写文章?

答案和摘要:用VSCode写Markdown文档,让AI写一个把Markdown文档转换为Word文档的python程序。

问题的来源

在今日头条发表图文并茂的文章,要求使用Word文档格式。而我作为码农,VSCode是最顺手的编辑器。这就产生的一个问题:怎么用VSCode为今日头条写文章呢?

先申明一下,我

o 不想买Word,更不用说MS Office全套,
o 不想看WPS的广告,
o LibreOffice竟然也要58元人民币,
o 我不想盗版,
o 而Pages又不合以前用Office/WPS的习惯,

那么我选择用VSCode,并不是因为娇情吧。

即便有MS Office可用,但考虑到我的文章中会插入很多代码,MS Office也不是一个好的选择啊。

对于我的写作来说,用Markdown格式写文章是最方便的,而且我的Word中过分灵活的格式变化,也是深恶痛绝。

所以,我真的有一个问题,怎么用VSCode的Markdown格式为今日头条写的Word格式的文章呢?

失败的方案一,利用VSCode插件

首先,我尝试了利用VSCode插件来完成这个任务,下载了一个Markdown转Word的插件,但是失败了。转换的效果很不好,会有一些莫明其妙的问题,比如标题字体有大有小,字体不存在等等;会有一些画蛇添足的问题,比如每页加上文档标题。

可能的方案二,利用写Markdown的软件

我尝试过一些免费的写Markdown的软件,没有一个比得上VSCode。而且考虑到我要插入代码到文章中,用两个编辑器写一篇文章,也不合理啊。

当然,我没有尝试过收费的软件。所以,这个方案暂时也不可行。

够用的方案三,用python程序

我最终选择了用python程序来完成这个任务。我手工撸过一个python程序来把Makrdown转换为Docx,但我限制了一些功能,比如不使用列表。因为处理Markdown文档,我是硬编码实现的,现在我想增加这些功能。

我想告诉朋友们,怎么写这个python程序呢?

我找了一个流行的AI(实际豆包,Deepseek等等都可以),一般来说我都是问下面几个问题:
1. 能给我写一个python程序把Markdown转换为Word吗?
2. 能加上图吗?
3. 图是本地的,读本地文件就可以,不需要访问网络。
4. 能加上ordered和unordered list吗?
5. 能加上code block吗?

然后,它就给出了一个python程序。

import markdown
from docx import Document
from docx.shared import Pt
from bs4 import BeautifulSoup
def markdown_to_word(md_file_path, word_file_path):
    # Read the Markdown file
    with open(md_file_path, "r", encoding="utf-8") as md_file:
        md_content = md_file.read()
    # Convert Markdown to HTML
    html_content = markdown.markdown(md_content, extensions=["fenced_code"])
    # Create a new Word document
    doc = Document()
    # Add custom style for code blocks
    styles = doc.styles
    if "Code" not in styles:
        style = styles.add_style("Code", 1)  # 1 means paragraph style
        font = style.font
        font.name = "Courier New"
        font.size = Pt(10)
    # Parse the HTML and add content to the Word document
    soup = BeautifulSoup(html_content, "html.parser")
    for element in soup.find_all(True):  # True means all tags
        if element.name == "h1":
            doc.add_heading(element.text.strip(), level=1)
        elif element.name == "h2":
            doc.add_heading(element.text.strip(), level=2)
        elif element.name == "h3":
            doc.add_heading(element.text.strip(), level=3)
        elif element.name == "p":
            doc.add_paragraph(element.text.strip())
        elif element.name == "ul":
            ul_list = []
            for li in element.find_all("li"):
                ul_list.append(li.text.strip())
            p = doc.add_paragraph()
            for item in ul_list:
                p.add_run(f"o {item}\n")
        elif element.name == "ol":
            ol_list = []
            for li in element.find_all("li"):
                ol_list.append(li.text.strip())
            p = doc.add_paragraph()
            for i, item in enumerate(ol_list, start=1):
                p.add_run(f"{i}. {item}\n")
        elif element.name == "a":
            run = doc.add_paragraph().add_run(element.text.strip())
            run.bold = True
            run.italic = True
        elif element.name == "strong":
            run = doc.add_paragraph().add_run(element.text.strip())
            run.bold = True
        elif element.name == "em":
            run = doc.add_paragraph().add_run(element.text.strip())
            run.italic = True
        elif element.name == "pre":
            code_block = element.code.string
            p = doc.add_paragraph(style="Code")
            p.add_run(code_block)
    # Save the Word document
    doc.save(word_file_path)
# Example usage
md_file = "writingForHeadline.md"
docx_file = "writingForHeadline.docx"
markdown_to_word(md_file, docx_file)

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2720.html

标签: vscode怎么用
分享给朋友:

“怎么用VSCode为今日头条写文章?” 的相关文章

Linux发行版Nobara更新39版本,号称“专为游戏玩家定制”

IT之家 12 月 27 日消息,Linux 发行版 Nobara 今天推出了 39 版本,主要改进了“Gamescope 合成器”,并更新了 OBS Studio、部分驱动程序及 Nautilus 文件管理器,小伙伴们可以点此访问项目地址。IT之家经过查询得知,Nobara 是一款基于 Fedor...

Linux世界的多样性:yum和apt的对比,让你感受不同发行版的特色

yum和apt是两种常用的Linux软件包管理器,它们都可以用来安装、更新和删除软件包。但是,它们之间也有一些重要的区别,本文将对它们进行分析对比。yum是Yellowdog Updater Modified的缩写,它是基于RPM(Red Hat Package Manager)的软件包管理器,主要...

「 VUE3 + TS + Vite 」父子组件间如何通信?

组件之间传值,大家都很熟悉,涉及到 VUE3 +TS 好多同学就无从下手了,所以分享这篇文章,希望看完后提起 VUE3+TS 能够不慌不忙。平时使用的函数如:ref、reactive、watch、computed 等需要先引入才能使用,但是本篇文章介绍的 defineProps、withDefaul...

Java教程:gitlab-使用入门

1 导读本教程主要讲解了GitLab在项目的环境搭建和基本的使用,可以帮助大家在企业中能够自主搭建GitLab服务,并且可以GitLab中的组、权限、项目自主操作GitLab简介GitLab环境搭建GitLab基本使用(组、权限、用户、项目)2 GitLab简介GitLab是整个DevOps生命周期...

虚幻引擎5.5发布

IT之家 11 月 13 日消息,虚幻引擎 5.5 现已发布。据介绍,新版本虚幻引擎在动画创作、虚拟制作和移动游戏开发方面取得进步;渲染、摄像机内视觉特效和开发人员迭代等领域的部分功能已可用于生产。IT之家整理部分功能亮点如下:动画Sequencer增强虚幻引擎的非线性动画编辑器 Sequencer...

Vue2的16种传参通信方式

前言先直入主题列出有哪些传参方式,下面再通过事例一一讲解。props(父传子)$emit与v-on (子传父)EventBus (兄弟传参).sync与update: (父子双向)v-model (父子双向)ref$children与$parent$attrs与$listeners (爷孙双向)pr...