原因

一直比较喜欢用markdown写东西,毕竟对写作十分友好,但是写论文,排版和引用文献又几乎离不开word,平时用markdown写东西想引用文献,图片交叉引用等等也不是很方便,偶然发现vsc插件markdown preview enhanced 功能强大可以配合pandoc获得不错的写作体验,于是我就搞了一些,花了两天时间。
最终也不是特别满意,虽然写起来没有问题,但是感觉配置比较复杂,可能会遇到bug。不过至少实现了用md写文献的想法。md原生支持的或者tex支持的比如数学公式,表格,图片,代码块之类的没有问题,但是像我用chemdraw画的化学结构就只能转成图片插件去,这点不如word。
用我的这个方法不但可以使得引用的文献(reference)格式统一,自动编号,自动对引用位置(cite)格式编号进行设置,还可以自动对图片,表格进行编号,格式统一,交叉引用生成的文件内部添加链接,点击直达。

需要的软件

  • vscode

    • markdown preview enhanced
    • markdown all in one
    • markdownlint
    • paste Image
    • citation picker for zotero
    • zotero LaTeX

主要是前面5个,其他的可选,只要不冲突装几个都行

  • pandoc:开源的强大的文件转换软件,没有GUI只有命令行
  • pandoc-crossref (版本要与pandoc匹配,版本不对不能用):图,表格等交叉引用,算是pandoc的一个插件
  • miktex:tex的发行版,在这里是pandoc用来把md转换成pdf的,也可以安装texlive,只是觉得texlive是全安装,好几个G的东西只拿来转换pdf比较浪费,miktex是用的时候才会安装相应的引擎,比较小
    上面这几个我都用scoop安装的,如果不用scoop,安装好之后要写入环境变量,保证命令行可以直接调用就行。
  • zotero:文献管理软件,类似endnote,开源的,被誉为文献管理软件中的”瑞士军刀“,十分好用。如果用其他文献管理器,把文献导入进去就行,主要是为了生成bib,以及引用文献,可以 只把它作为一个在论文中插文献引用的软件也是可以的。

配置

zotero

可以参考别的地方
知乎文章——插件安装,其中最重要的是Better BibTex,其他插件可选
导入文献,不同文献管理器导入方法不同,可以上网查一下,方法很多,都很方便,如果不想把它作为主力文献管理器,可以不用导入文件,也不用分类。
导出bib:文件——》导出文献库》better BibLatex(勾选keep updated,随时更新导出的文件)最好保存到你写的文章的位置,不保存到那里也行。

MikTex

基本不用设置

双击miktex-portable,可以打开miktex配置窗口,可以更新一下,也可以不更新,主要要用它的pdflatex和xelatex,但是不需要手动安装,会在第一次运行的时候自动安装。

vscode

这个方法的核心就是markdown preview enhanced(MPE)这个插件。但是在这之前,先配置好其他的部分。
首先是配置文件:

    "markdown-preview-enhanced.pandocMarkdownFlavor": "markdown+raw_tex+tex_math_dollars","markdown-preview-enhanced.usePandocParser": true,"markdown-preview-enhanced.mathRenderingOption": "MathJax","[markdown]": {"editor.defaultFormatter": "DavidAnson.vscode-markdownlint"},"markdown-preview-enhanced.pandocPath": "pandoc","markdown-preview-enhanced.pandocArguments": ["--filter=pandoc-crossref","--number-sections",],"markdown-preview-enhanced.enableExtendedTableSyntax": true,"markdown-preview-enhanced.enableHTML5Embed": true,"markdown-preview-enhanced.latexEngine": "xelatex",

这里一定记得勾选上,不然会使用默认的markdown-it渲染,无法渲染出引用文献和交叉引用来
勾选了这个,默认的数学公式处理器(mathRenderingOption)KaTeX就失效了,选用MathJax就好了
latexEngine要选xelatex,pdflatex对中文支持不好,配置麻烦
pandocArguments配置中--filter=pandoc-crossref可以理解成添加pandoc-crossref插件,用于交叉引用,--number-sections是对章节目录添加序号,注意这两个参数只在预览中起作用

其他插件可以根据需要自行配置,有些插件是对内部预览器进行更改,对MPE无影响,所以没必要下载。

使用

文件头

---
title: xxx
bibliography: "../../bib/我的文库.bib"
pandoc_args:
- "--csl=../../bib/chinese-gb7714-2005-numeric.csl"
figureTemplate: $$figureTitle$$ $$i$$ $$t$$
figureTitle: 图
output:pdf_document:latex_engine: xelatexpandoc_args: ["--csl=../../bib/chinese-gb7714-2005-numeric.csl","--filter=pandoc-crossref","--number-sections"]template: "mydir\\template.latex"
---

两个---中间的部分叫front matter,用于定义一些marddown信息,具体可以查看MPE文档

其中:

  • bibliography :表示zotero生成的bib文件所在的位置,可以是相对路径也可以是绝对路径,比较推荐绝对路径。打开bib文件里面大概是下面的样子,其中citekey是唯一的并且可以自行定义的,用于引用这一篇文章,在生成pdf的时候,pandoc会根据citekey去bib文件中查找文章信息,并根据csl格式将需要的信息拿出来生成reference(结尾的一长串文献)。因此要告诉pandoc这个bib在哪里
@article{citekey,title = {},author = {},date = {},journaltitle = {},shortjournal = {},volume = {},number = {},eprint = {},eprinttype = {},pages = {},issn = {},doi = {},abstract = {},
...
}
  • csl: 就是结尾的reference所用的格式,用于告诉pandoc,作者放前面还是文章名放前面,作者写几个,姓名格式用不用缩写,后面先写年份还是先期刊名,大写小写,字体,大小等等信息。可以在zotero中下载(编辑——》首选项),也可以自己编辑:
  • output:表示输出文件的一些参数,不影响在右侧的显示,这一部分作用是:右侧预览窗口中,右键——》Pandc输出想要的格式的文件的
    • pdf_doucment:表示输出成pdf
    • latex_engine:xelate输出成pdf的时候用的引擎
    • csl:与上面不同的是,上面影响的预览窗口的格式,下面影响的输出文件的格式,两者互不影响
    • filter:也是只在输出的时候起作用,另外在MPE设置中设置的两个参数则不再起作用
    • number-sections:对文章标题编号
    • tempalte:latex模板,需要进行一些设置

在这里还可以通过设置pandoc_args:设置很多pandoc的参数,pandoc有着复杂的参数,可以查看pandoc文档
另外除了title,还可以设置,abstract,author等等各种文档信息,参考MPE文档

注意pandoc转换成pdf的方法其实是先转换成tex文件,然后在通过tex引擎转换成pdf,所以需要向tex一样需要一个模板,pandoc是自带一个默认模板的。
pandoc -D latex > template.latex可以获取默认模板,默认模板不支持中文,因此需要做一些更改,如果你生成的模板跟我的差不多的话,可以在90行-117行之间添加比下面少的部分,设置中文字体,主要要设置你电脑上有的字体,不然也会报错,另外我尝试中文设置微软雅黑:Micorsoft YaHei发现是不行的,不知道为啥。这里可以参考tex排版知识,只不过语法复杂,学习起来困难,不如直接模仿。

$if(linestretch)$
\usepackage{setspace}
$endif$
\usepackage{iftex}
\ifPDFTeX\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}\usepackage[utf8]{inputenc}\usepackage{textcomp} % provide euro and other symbols
\else % if luatex or xetex\usepackage{fontspec}     % 允許設定字體\usepackage{xeCJK}      % 分開設置中英文字型\setCJKmainfont{SimHei}  % 設定中文字型\setmainfont{Times New Roman}   % 設定英文字型\setromanfont{Times New Roman}  % 字型\setmonofont{Courier New}\linespread{1.2}\selectfont    % 行距\XeTeXlinebreaklocale "zh"  % 針對中文自動換行\XeTeXlinebreakskip = 0pt plus 1pt % 字與字之間加入0pt至1pt的間距,確保左右對整齊
$if(mathspec)$\ifXeTeX\usepackage{mathspec}\else\usepackage{unicode-math}\fi
$else$\usepackage{unicode-math}
$endif$

文件内容

交叉引用

图片添加标题

![imgname](imgpath){#fig:imgcitekey}

与一般md中插入图片不同的是,imgname是必填的,因为会作为图片的标题,{}中内容可以理解为添加一个锚点,#fig表示是图片,冒号后面是引用的key,要保证是唯一的,一般可以用图片的题目,这样自己写起来也不容易混乱,另外,cite可以中是不能有空格的,也不能有冒号,括号等等。
注意这里{}要紧跟前面,不能有空格

引用图片:

引用图片[@fig:imgcitekey]

[]中@表示引用,引用图片的citekey

图表等等内容方法类似,只不过相应标志换成了tbl,可以查看pandoc-crossref文档

实例:

引用文献

首先要保证zotero打开
在vscode中alt+shift+z或者ctrl+shift+p——》Zotero Citation Picker,打开下面的窗口(可能不会跳出来,需要到zotero界面去找)


可以直接输入要插入的文章名称或者其他信息,下面会直接出搜索结果,也可以选择经典视图去直接找要插入的文章。然后输入enter插入即可。

实例:

引用文献[@mycitekey]

注意这里要手动加[]

导出

MPE可以用pandoc导出各种格式文件,包括docx。
在配置好pandoc路径之后,在预览窗口,右击——》Pandoc即可自动导出成pdf

一开始我总是遇到找不到xelatex 引擎的问题,虽然设置了--pdf-latex=xelate,但是在powershell使用pandoc可以,最后把xelatex手动添加到了系统环境变量,然后重启电脑,才正常的。

中间好多次出现下面的问题:

命令行导出

template 配置文件有问题,pandoc我所用版本默认配置文件没问题,从网上下载的别人的template有问题,我手动将默认的导出并在默认基础上修改的,具体如上

字体设置问题,中文字体使用微软雅黑不行,使用宋体,黑体等等可以,可能是因为微软雅黑是多种字体在一起,无法识别或者说无法选择

也是字体问题,同样是因为微软雅黑不行

照片路径问题,pandoc转换时候,是根据当前路径转换,相对路径不好使,相对路径只能在md文件所在目录执行pandoc

成功生成pdf但是中文全是空白

字体问题,还是要在template中设置合适字体,微软雅黑不行

生成的文件没有参考文献

filter=pandoc-crossref必须在output部分定义,之前定义的只影响右侧显示,其他参数同理

md图片引用后面要有空行,不然就会识别不到citekey信息,图片标题也不显示

总结

能实现这两个功能确实不容易,但是也会牺牲md一些其他的扩展功能,比如mermaid思维导图流程图等等,另外也会让渲染变慢,对md格式要求更高一些(比如之前图片后面不用空行)。不过相比与能引用文献,这些都是小事情。

问题补充

中文首行缩进

可以按原来md方法进行首行缩进,但是每段都要设置比较麻烦。
在windows中,~/.mume目录下,可以设置mpe预览的格式
使用如下代码,在style.less中可以设置首行缩进:


/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */.markdown-preview.markdown-preview {// modify your style here// eg: background-color: blue;p {text-indent: 2em;//首行缩进}
}

vscode+markdown+pandoc写论文相关推荐

  1. 如何用Markdown写论文?

    本文用简明的样例,介绍如何使用Markdown和自动化工具帮你处理数学公式.参考文献引用.图片交叉索引等学术论文写作中常见的棘手问题.快来试试吧. (由于微信公众号外部链接的限制,文中的部分链接可能无 ...

  2. python写数学公式_如何用Markdown写论文?

    本文用简明的样例,介绍如何使用Markdown和自动化工具帮你处理数学公式.参考文献引用.图片交叉索引等学术论文写作中常见的棘手问题.快来试试吧. (由于微信公众号外部链接的限制,文中的部分链接可能无 ...

  3. vscode markdown插件_如何用Markdown写公众号

    前情介绍 小编使用的是mac笔记本,由于职业的关系需要编写很多技术文档和技术方案,本人喜欢用vscode编辑器利的插件来写markdown文章,本文介绍的是如何通过使用vscode来编写图文并茂的公众 ...

  4. Wiz写Blog? 不会再爱了,全面拥抱Markdown+Pandoc

    Wiz写Blog? 不会再爱了,全面拥抱Markdown+Pandoc 文章转载自 http://iout.in/archives/454.html 我们为什么写作? 自从人们开始写作,写作便是记录. ...

  5. vscode markdown preview enhance 插件 pdf 导出

    vscode markdown 导出为 pdf 方法探究 vscode markdown 导出为 pdf 方法探究 前言 Open in Browser 导出 Chrome(Puppeteer)导出 ...

  6. 写论文时有哪些格式上以及绘图等上的奇技淫巧?

    Qi Qi,此人是二逼 861 人赞同 -3. 2016.01.13 更新 喜闻窝壳出台新龟腚,不接受 pdf 文档,又向世界一流大学迈了大一步.广大 @er 速速看过来.\textcolor{whi ...

  7. 初级使用Latex写论文经验总结

    最近忙着写论文,但由于种种原因,初稿草写完成百分之八十,转英语的各程序也已熟悉,目前暂时搁置.暂作记录,便于后续熟悉流程. 首先强调一点,国内的知乎真的很好用,质量很高.本人在这就跟写日记,记流水账一 ...

  8. 用markdown + html写一封简历

    0. 前言 1. 阶段1 - 确定需要几个模块 2. 阶段2 - 使用纯文字填充简历 3. 阶段3 - 预留空格 4. 阶段4 - 文章垂直方向的调整 5. 阶段5 - 居中对齐 6. 阶段6 - 加 ...

  9. 写论文工具:LaTex在线网站

    I. http://Overleaf.com (http://ShareLaTeX.com) + http://Lucidchart.com (http://Gliffy.com) + http:// ...

  10. 如何优雅的使用markdown来写博客

    如何优雅的使用markdown来写博客 重构写作方式 学会Markdown基本语法 实践Markdown语法,写出优质文章 文章目录 如何优雅的使用markdown来写博客 一.认识Markdown ...

最新文章

  1. 全球首部AI交响变奏曲问世,AI技术应用再拓边界
  2. python3中字符串编码常见种类_Python基础篇—标准数据类型—String字符串编码问题...
  3. PHP 年龄计算函数
  4. leetcode 贪心_LeetCode进阶1029-贪心
  5. Angular reducer第一次被框架调用的单步调试细节
  6. Java PipedOutputStream close()方法与示例
  7. 结构化思维:掌握这3点,分析报告不再愁
  8. Ali-Tomcat 安装
  9. 材料成型计算机仿真技术,材料成型计算机模拟分析(各种仿真软件介绍).ppt
  10. FCM算法的matlab程序
  11. 数据平台投标方案模板
  12. java socket 实现原理_java socket原理
  13. 栅格图数字化(矢量化)
  14. 爱奇艺财报电话会议实录:第三季度可能还无法实现盈利
  15. 如何防止你的爬虫被网管一巴掌拍死
  16. 企业、商家、门店多行业线上线下电商小程序
  17. 全国计算机考试能带手机吗,全国计算机等级考试注意事项
  18. bp神经网络的主要功能,一文搞定bp神经网络
  19. STL 源码分析之string(一)基础篇
  20. java操作word生成水印升级版

热门文章

  1. MT6572 耳机驱动笔记
  2. Y2K问题和2038问题
  3. Newtonsoft.Json.Linq 简单使用
  4. 【R语言】——VennDiagram包绘制维恩图(保姆级教程)
  5. 【数据分析与可视化】Python的input和output
  6. 初入职场如何时间管理课程总结-B站
  7. 【力扣】735. 行星碰撞
  8. 给程序员的 2018 新年计划清单
  9. 2018-05-04 《设计模式:可复用面向对象软件的基础》- 实例研究
  10. 711气象雷达电路图