流水账〔三十〕

继续上网乱搜弥补代沟,发现目前最流行的「Markdown变种」是号称「最大信息技术交流社区GitHubStackOverflow御用格式」的『Cmd Markdown』,主要扩展包括但不限于「带语法着色的代码块」「流程图」「甘特图」「序列图」。而采用类似方案的各种「云笔记」站点也有得是,具体情况各位可以自己搜索。网上就有实例文档,看看那「纯文本の美」自己能接受不。

简单说,因为「不入流码农」的经历,我看这些「纯文本」没有阅读障碍,并且对于其中的若干细节还很敏感,正如「数学渣」看那些嵌入的LaTeX「乱码」一样敏感。但是呢,对于非码农行业的普通用户来说,「眼晕」是必然的吧。

所以才说,对于被贫穷限制想像力的普通用户而言,「所见即所得」或者说最起码「各种嵌入对象」不显示为「代码」是基本要求。正如知乎目前的在线编辑器那样,「点击输入公式」是单独的一个界面,用得着的肯定会习惯,而用不着的也不会在编辑器内部看见「乱码」有碍观瞻。

找了一个当前算是「折衷的解决方案」:免费的可视化离线Markdown编辑器Typora,文件格式就是「*.md」这Markdown原版,兼容性很好。本来是macOS专用,现在已经提供了Windows版,但是操作习惯和快捷键还是苹果式。这个软件还是使用浏览器技术实现,也就是把「MathJax.js」脚本嵌入到程序内部实现离线本地编辑。其它几种类似的软件,也是采用了类似的技术,而纯粹本地处理文档不依赖浏览器功能的,似乎还没见到。

注意,JavaScript™并非只有在浏览器当中才能运行,其解释器甚至编译器都可以单独存在,因此离线处理并非不可能。并且,前一篇提到了,作为备胎,Lua也是可以考虑的脚本,这MathJax能用JavaScript™实现就能用Lua实现。更何况LuaTex是现成的,继续更何况「化学公式」的显示还没有在线的「ChemJax」之类存在,这就是Lua方案的突破口。


这次扯淡够长了,吸取教训不能再迷失于各种细节当中,赶紧总结一下。

指导原则是依靠境外开源运动成果,提供开源至少是免费的「轻量级码字」解决方案,以面向非专业用户的体验为目标,以尽量压缩相关商用软件预期利润为「副作用」。

架构设计大概以下几点:

首先,输出或导出的结果,是遵守「html5」规范的静态页面。

到了现在,提供高级用户体验的浏览器都已经支持html5了,很多站点甚至不允许低版本浏览器登录,所以这不是高标准严要求而是合情合理合法的假设。其中html5提供的新的语义标签可以酌情使用,特意强调,画布「canvas」可虽然以用来实现动态或复杂的静态显示,在「学术」相关场合可能会用到,比如课件中绘制各种曲线图,但是由于需要脚本,于是不作为基本功能考虑。

其次,本地存储使用的文件格式,是不超过「Markdown及其主要扩展」所涉及语法的xml版,可与其它必要文件一起压缩为zip包。可以照搬html5部分标签如「article」「section」等,并单独定义「数学公式」「化学公式」乃至「流程图」「甘特图」甚至「代码块」「表格」等嵌入对象的标签。

这里把「代码块」「表格」也作为嵌入对象处理,是考虑到现实需求。对于最终读者来说,除了「公式」可能会出现在「行内」之外,其它「行间」的内容都是与文本截然不同的视觉效果。读者不会关心后台的源码如何编写,而非专业用户的作者也不希望消耗太多时间处理各种编码错误。于是,凡是单独出现的整块正文以外的内容,都可以弹出窗口针对性处理。

再次,在数据文件内部不包括任何脚本和样式,必要时使用xsl转换格式。也就是说,对于本地存储的「很像html5xml文件」,应该可以通过双击在浏览器中打开并显示正常,必要的外链脚本和样式,可能需要在文件头中补充。这个细节稍微复杂一点,不过在线提供外链脚本和样式的服务商有得是,只是离线实现比较困难。

最后,界面简约但模板充沛,提供装修选项要尽可能的少。可以用包括但不限于知乎、简书等站点的在线编辑器当作参考,字体字号段落对齐方式等都可以由模板决定,默认则为最大众化的显示效果。而「大纲」可以出现在html5aside」标签代表的侧边栏导航区,由文档结构自动生成,不需要单独存储。

补充,至于「故事线」之类功能,那是单独的需求,不会放在以「静态页面」(但其中可能会包含动态内容如gif和视频等)为目标的基本编辑和排版处理当中。

技术实现大概有以下几条提示:

编辑区域使用既存富文本控件,包括但不限于「.Net/WPF」「eclipse/swt」「Qt」「wxWidgets」几种。或者(于赞助商支持下)从其它项目中删繁就简,包括但不限于各种曾经的非主流字处理软件,即便与微软竞争失利而停滞但其既存功能仍然足以应付「轻量级」需求。

数学公式显示使用LaTeX语法,仅提供必须子集,可将MathJax.js本地化处理,也可以用Lua或其它脚本重写。化学公式同样使用既存LaTeX扩展包,注意方案不止一个,找其中语法最简洁的那种,使用JavaScript™Lua改写。其它「公式」以此类推。

注意复制和粘贴时格式转换,如果「本地」与「网站」之间交换「备份」不是上传下载的关系,那么就要考虑到最小修改工作量。按照个人经验,从本地的Word当中复制再于知乎编辑器中粘贴的时候,粗体斜体甚至图片等部分内容可以自动转换,而「引用」和公式部分则不行,必须手动修改。那么,自行开发的软件可以决定剪贴板内容的格式,与各站点使用的「主流」在线编辑器所接受的格式之间,要尽量兼容。

对于一些扩展功能,所需脚本首选JavaScript™(或TypeScript),同时提供备胎Lua方案。本地处理好办,对于在线的情况,虽然目前Lua不能运行于主流浏览器当中,但是通过插件或「魔改版」总是可以实现的。

先这些吧。这几天弥补了代沟好几次,每次都能发现新的内容。不想在这个因为头疼而随意扯淡的话题上耽误太多时间,赶紧交代清楚之后搁置争议,干正经事(恶补数学)去也。


2018.1.8, Lunae