Markdown的选择
我一直在思索用什么格式存储文档比较好。之前一直在用google docs,但是它的格式不公开,上传/下载的时候需要转换格式,转换的时候必然会丢失一些信息。于是后来想,那还是纯本文或者markdown吧。
但是Markdown方言很多,选哪个好?我考察了以下三个。
pandoc . John MacFarlane写的,万能的转换器。对我来说一个缺点是它的是Haskell语言。
commonmark . 这是John MacFarlane搞的对markdown进行标准化的一场伟大尝试。他给出了C语言和js的实现,其中C语言的很容易在windows下编译过去,代码简单易懂。可惜,没人买账。
GitHub Flavored Markdown . 这个大概是现在事实性的标准了。因为代码都托管在github上,所以写文档的时候自然也就顺着 github 的要求来。我没有找到它的开源实现。但是,atom.io是github公司的,而这个编辑器的markdown实现用的是 marked . 我试了下还不错。
于是我就照着例子拿marked写了一个简单的脚本来把markdown文件转换成html
var marked = require('marked');
var fs = require('fs');
var inputFileName=process.argv[2];
var outputFileName=inputFileName.replace('.md','.html');
console.log("processing "+inputFileName);
var markdownString=fs.readFileSync(inputFileName,"utf8");
marked.setOptions({
highlight: function (code) {
return require('highlight.js').highlightAuto(code).value;
}
});
htmlbody=marked(markdownString);
html="<!DOCTYPE html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" >\n"+
"<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.5/styles/default.min.css\">\n"+
"</head><body>"+htmlbody+"</body></html>";
fs.writeFileSync(outputFileName,html,{encoding:"utf8"});
html header中再加上一行mathjax的js链接,就可以在markdown中支持数学公式了。
Markdown的选择的更多相关文章
- Atom读写MarkDown插件选择,以及墙内安装markdown-preview-enhanced,及markdown和mermaid使用教程
1.Atom自带markdown-preview 功能太少,需要大量拓展. 2.markdown-preview-plus 功能还不错,但是其中的滚动条插件markdown-scroll-sync和最 ...
- 极简MarkDown排版介绍(How to)
如何切换编辑器 切换博客园编辑器为MarkDown:MarkDown Editor 选择一个在线编辑和预览站点:StackEdit 如何排版章节 MarkDown: 大标题 ========== 小标 ...
- 在为知笔记中使用Markdown和思维导图
为知笔记Wiz是一款很好的网摘和笔记工具,作为为知的忠实用户,我在为知收费后第一时间就购买了两年的授权,毕竟这么多年积累的资料都在为知上,我也习惯了使用Wiz来做些工作相关的笔记.为知笔记自带Mark ...
- 工具(2): 极简MarkDown排版介绍(How to)
如何切换编辑器 切换博客园编辑器为MarkDown:MarkDown Editor 选择一个在线编辑和预览站点:StackEdit 如何排版章节 MarkDown: 大标题 ========== 小标 ...
- Cnblog Markdown编辑器
第一次使用Cnblog Markdown编辑器 1.在博客园使用 Markdown 与 LATEX[1] 1.1.开启MarkDown编辑器 选择 Markdown 撰写博文:在博客园管理-选项中,将 ...
- Django开发博客(七)——markdown优化
背景 上一次把markdown集成之后.发现还是有非常多问题. 这次须要做一些优化. 1.markdown与普通文本的差别显示. 2.添加点击量的统计 3.加入名片卡的滑动 版本号相关 操作系统:Ma ...
- Chrome MarkDown Preview Plus
/************************************************************************** * Chrome MarkDown Previe ...
- atom markdown转换PDF 解决AssertionError: html-pdf: Failed to load PhantomJS module
atom编辑器markdown转换PDF 解决AssertionError: html-pdf: Failed to load PhantomJS module. You have to set th ...
- 常用的Markdown编辑器, markdown导出HTML/PDF/JSON/word
markdown导出word. 常用的Markdown 编辑器 OSX Atom,setting-->package install,搜package ...
随机推荐
- wpf SnapsToDevicePixels
原文:wpf SnapsToDevicePixels 可以在您的根元素上将此属性设为 true,以在整个 UI 上启用像素对齐呈现. 对于运行在大于 96 每英寸点数 (dpi) 的设备,像素对 ...
- 【record】11.7..11.13
好少
- 【17.00%】【codeforces 621D】Rat Kwesh and Cheese
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- AndroidStudio使用properties资源文件
在Android项目开发中,为了一些公用资源使用方便,可以在assets资源文件夹中将需要用到的资源写成.properties或者.json的文件形式,并进行读取使用.在做html5+javascri ...
- 什么是“恶意代码”——————【Badboy】
恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到还有一段程序中,从而达到破坏被感染电脑数据.执行具有入侵性或破坏性的程序.破坏被感染电脑数据的安全性和完整性的目的. 按传播方式,恶意代码能够分 ...
- Java获取URL对应的资源
Java获取URL对应的资源 认识IP.认识URL是进行网络编程的第一步.java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源. 一.认识URL ...
- Android 混淆[学习笔记]
Android 混淆 Gradle的简介: http://www.flysnow.org/2015/03/30/manage-your-android-project-with-gradle.html ...
- [C++学习笔记14]动态创建对象(定义静态方法实现在map查找具体类名对应的创建函数,并返回函数指针,map真是一个万能类)good
[C++学习笔记14]动态创建对象 C#/Java中的反射机制 动态获取类型信息(方法与属性) 动态创建对象 动态调用对象的方法 动态操作对象的属性 前提:需要给每个类添加元数据 动态创建对象 实 ...
- 用WPF窗体打造个性化界面的图片浏览器
原文:用WPF窗体打造个性化界面的图片浏览器 本文使用WPF窗体(XAML及C#)与Win Form控件(FolderBrowserDialog)结合的方式, 演示制作了一个简易漂亮的WPF图片浏览器 ...
- Delphi内存管理(Integer、Boolean、Record、枚举等都是在作用域内编译器自动申请内存,出了作用域自动释放;另外,字符串、Variant、动态数组、接口也是由Delphi自动管理)
一.什么是堆.栈? 程序需要的内存空间分为 heap(堆) 和 stack(栈),heap 是自由存储区, stack 是自动存储区,使用 heap 需要手动申请.手动释放, stack 是自动申请. ...