本文编写于 1151 天前,最后修改于 1151 天前,其中某些信息可能已经过时。

如何利用package.json一键转换md生成word文档

马上就要本科毕业了,考研出分等线的同时正在疯狂赶毕业论文,于是乎为了节约时间,写了这么一篇博文来记录下这个特殊的经历

需求简介

现有md格式的论文底稿一份,用bibtex作为文献数据库,使用pandoc命令引用文献格式并输出word文档

主要步骤原先分为几部分:

  1. 打开终端terminal
  2. 复制以前保存的命令
  3. 修改csl文件和输入输出文件名
  4. 执行命令行
  5. 到文件夹里找到输出的word文件并打开

步骤较为繁琐,在使用vscode作为论文编辑器的时候想起以前项目可以直接用自带的npm命令脚本启动npm start,遂想利用一下这个功能来一键执行以上5步命令

使用简介

建立package.json文件

vscode可以自动识别该文件,从而在界面上显示可以执行的脚本

在论文项目根目录下新建一个package.json文件,输入以下内容

{"scripts": {
    "命令名称": "命令"
  }
}

就可以在ui界面点击直接执行相关命令了

放入pandoc命令

那么我们此处写入

{"scripts": {
    "md2docx": "pandoc --filter pandoc-citeproc --bibliography=./论文文献/ref.bib --csl=chinese-gb7714-2005-numeric.csl wenxianzongshu.md -o p3.docx"
  }
}

那么在终端输入npm run md2docx或者直接在vscode界面 npm脚本里面点击执行这条命令就可以直接执行了

这条命令的意思是用pandoc转换md文档为word文档,同时使用gb7714文献引用格式来引用ref.bib当中的文献内容

用word打开刚刚生成的word文件

macOS当中用word打开word文档的命令行语句是open /Applications/Microsoft\ Word.app 文件名.docx但在此处我们无法使用,因为Microsoft Word当中有个空格,而在shell里面空格都会当作输入参数来对待,并且在npm命令里面无法使用\斜杠来转义空格,因此想到了曲线救国方法

在文件目录新建一个shell文件,命名为opendocx.sh,输入

#!/bin/zsh
# author:Andy
# 打开md转换完成的word

echo "正在打开文档 $1"
open /Applications/Microsoft\ Word.app $1
echo "成功打开 $1"
exit

注意此处的$1代表的是传递过来的第一个参数变量,也就是打开的word文件名,那么此时就可以在npm脚本里面直接执行这个shell来实现打开word文档功能

{"scripts": {
    "md2docx": "pandoc --filter pandoc-citeproc --bibliography=./论文文献/ref.bib --csl=chinese-gb7714-2005-numeric.csl wenxianzongshu.md -o p3.docx",
    "opendocx":"sh opendocx.sh ./p3.docx",
  }
}

执行opendocx打开word文档

如何两者一起执行

那么就用&&符号来执行两个命令吧,下面执行onekey-md2docx命令便可一键执行两个命令

这也是最后完整的执行脚本

{"scripts": {
    "md2docx": "pandoc --filter pandoc-citeproc --bibliography=./论文文献/ref.bib --csl=chinese-gb7714-2005-numeric.csl wenxianzongshu.md -o p3.docx",
    "opendocx":"sh opendocx.sh ./p3.docx",
    "onekey-md2docx":"pandoc --filter pandoc-citeproc --bibliography=./论文文献/ref.bib --csl=chinese-gb7714-2005-numeric.csl wenxianzongshu.md -o p3.docx&&sh opendocx.sh ./p3.docx"
  }
}

参考资料

  1. sh执行文件 参数传递_Shell脚本传参数方法总结
  2. 苹果mac os怎么用命令行终端打开app应用程序
  3. 如何用 markdown 写论文