使用 WorkBuddy 自己动手开发一款 MacOS 应用~

之前一直使用的是 Markdown Nice 编写微信推文,不过存在一些不方便的地方,一个是后来 Markdown Nice 改收费了,免费用户新建文档数量限制,不能直接复制上传图片。二个是 Markdown Nice 不支持 Stata 代码的高亮。

鉴于诸多不便,所以我一直想拥有一个自己的微信推文代码编辑器。其实我之前基于 Markdown Nice 的源代码魔改了一个网页应用:https://tidyfriday.cn/mdnice/

这个网页应用能够支持 Stata 代码高亮,但是也缺少了很多功能,还是不方便。最近探索了很多 WorkBuddy 的用法,今天突发奇想决定让它来帮我开发一款这样的应用。要有如下功能:

  1. Markdown 微信推文排版软件
  2. 代码高亮支持 R 语言、Stata、Python、Javascript、shell 等
  3. 支持文章管理功能,可以新建和删除文章,不需要登陆注册功能
  4. 支持 Markdown 编写和预览以及复制到微信推文里面
  5. 默认样式就是提供的 style.css
  6. 最终打包成一个 Mac 系统可用的 app 软件。

提问词如下:

“附件中提供了 Markdown nice 网站的一些源码,和 style.css ,参考这些文件,编写一个 Markdown 微信推文排版软件,代码高亮支持 R 语言、Stata、Python、Javascript、shell 等。支持文章管理功能,可以新建和删除文章,不需要登陆注册功能,支持 Markdown 编写和预览,以及复制到微信推文里面,支持样式编辑,默认样式就是提供的 style.css。最终打包成一个 Mac 系统可用的 app 软件。”

然后后面还根据使用情况提了很多意见,最终终于觉得大致达到了我的要求。

效果还真不错,全程大概耗费了 200 个积分。

除了上面的要求,我还增加了一键导出 MD 文件和 PDF 文件的功能,可以插入表格。双栏预览等功能。也可以通过 css 调整改变推文样式,不过我通常写推文都是一个样式,不怎么需要调整。

代码高亮终于支持 Stata 了:

*- 使用公司-年份平均 CD 指数数据绘图
use "1985~2024年上市公司专利创新突破度 CD 指数计算结果(分上市公司年份平均).dta", clear
destring 年份 cd_index, replace
collapse (mean) cd_index, by(年份)

tw conn cd_index 年份, m(o) lp(solid) color(black) ///
xla(1985(5)2020 2024) yla(0(0.1)0.5, format(%6.2f)) ///
yti("平均 CD 指数") xti("") ti("1985~2024年上市公司平均专利创新突破度(CD指数)") ///
subti("数据计算 & 绘图:微信公众号 RStata") ///
caption("数据来源:RStata 数据中心: 1985~2024年上市公司专利创新突破度CD指数计算结果. 2026. " ///
"https://tidyfriday.cn/rsdb2/")

R 语言代码:

# 1. 读取专利引用数据并筛选 5 年内的相互引用
read_rds("patent_citations.rds") -> patent_citations
patent_citations %>%
filter(date - date2 <= dyears(5) & date - date2 >= 0) -> patent_citations2

# 2. 识别没有后向引用的专利(CD 指数直接设为 1)
read_rds("nobackrefs.rds") -> nobackrefs
nobackrefs %>%
mutate(cd_index = 1) %>%
write_rds("nobackrefs.rds")

# 3. 对每个专利计算 CD 指数
for (x in testmat$newipzlid) {
# 准备 i 的后向引用
patent_citations2 %>%
filter(newipzlid == x) -> testpat
testpat %>%
select(newipzlid2) %>%
pull(newipzlid2) -> backrefs

# j 申请日期晚于 i
patent_citations2 %>%
filter(date >= testpat$date[1]) -> part0

# 引用 i 的
part0 %>%
filter(newipzlid2 == x) %>%
select(newipzlid) %>%
distinct(newipzlid) -> part1

# 引用 i 后向引用的
part0 %>%
filter(newipzlid2 %in% backrefs) %>%
select(newipzlid) %>%
distinct(newipzlid) -> part2

# 分出三种情况并计算均值
cd_index = mean(c(parta$cd, partb$cd, partc$cd), na.rm = T)
}

最后,这篇推文就是使用该软件排版得到的~

和之前推文的效果差不多。

点击这里跳转到 RStata 短书平台获取附件:使用 WorkBuddy 自己动手开发一款 MacOS 应用~

评论