流水账〔四十〕

开头不用贴图了。这几天就在VS Code里面把近期码字内容的Markdown版文件都修改了一遍(但是没有地方上传),公式按照「Markdown + Math」格式调整,图片链接改为本地相对路径,可以实时预览。总体来说用着还是比较顺手的,但是还有几个问题。

首先是VS Code没有Markdown专用快捷键,输入法切换频繁,尤其是开头写标题井号的时候。后来找了其它插件装上,情况好点,不过仍然没有「引用」快捷键,还得一行行加「>」才行,或许是我没找到的缘故。从这个角度看,作为通用编辑器不如「Markdown Pad」等专用编辑器那是肯定的。

其次是在以方引号、书名号等标点作为字符串边界的某些时候,加粗标记无法解析成功(在预览中都带着星号出现),这应该是插件所依赖的「markdown-it-texmath」或干脆「markdown-it」都没考虑到的情况,可能今后会改善。

再次,图片链接路径中不能出现空格或井号,这也是「markdown-it」的限制。这倒没什么,修改了几张本地图片的文件名,而本地目录本身倒是没有空格。之前也提到了,可以参考各浏览器「保存网页到本地」功能,一个页面文件带一个「files」文件夹。

参考「*.docx」那种压缩包内部存在目录的布局,如果要「所见即所得」编辑的情况下打包成「*.mdz」(Zip格式不支持Unicode),目录和文件名都是自动处理的。补充,其实为了适应娱乐至死の逗哔,扩展名写成「*.mdzz」最好,公开称「MarkDown ZigZag」的缩写,私下以「妈的智障」带节奏……球安民乐岂不美哉?

还有,专用编辑器「Markdown Pad」的预览中,不支持图片路径中出现Unicode字符。我在本机(Win7)用汉字「插图」当目录名,VS Code预览正常。而Markdown Pad则不行,但是按F6启动正经浏览器预览肯定可以(当然!)。

最后就是还剩下几篇《〈设定集〉注释》当中存在的「视频」内容无法修改,只能保持URL原封不动。这个功能本来就是Markdown不支持的,包括GitHub版在内,而实践中在简书等站点也只能通过「富文本」编辑器上传。之前提到如果开发在线码字专用扩展,会对照html5标签如「video」增加功能,这里暂时放下不管。

顺便还有个问题,不是编辑器的问题,就是有些图片背景是透明的。自己截图的情况也有,来自网络的图片或者生成的公式图片当中也是这样,于是在编辑器的暗色主题之下预览中看不清前景的黑字。而有些站点(如简书)也提供「夜间模式」,同样看不清。看来透明背景图片也默认「白纸黑字」其实是普遍现象。这个暂时没解决,只能提醒自己将来码字在预览时至少需要切换明暗两种风格的主题进行检查。

而图片格式,实验了常见的jpgpnggif(动图),预览都没问题,除此之外预览还支持「SVG」格式,这个也是当代浏览器普遍支持的缘故。因为对于一些规则的矢量图形,尤其是将来预计通过数学软件方式生成「绘图」的情况下,使用这个格式语义清晰并且能直接嵌入到html页面内部而不需要单独的文件保存。


前一篇流水帐里面提到,「看测评Atom【似乎】不如VS Code」,肯定有Atom拥趸质疑我信谣传谣。在「政治敏感」的回答当中也提到了,下载Atom安装倒是没问题,而等到装最关键的插件「markdown-preview-plus」的时候,就会出现错误信息,因为「GitHub」被兲朝防火长城挡住了。而内置的预览看不了数学公式吖,所以连「货比三家」的机会都没有。

肯定有紧密团结在「后清亲王」周围的以「娱乐至死の逗哔」身份为掩护的鸡鸣狗盗之徒,抓住一切机会攻击我等被贫穷限制了想像力的贱种屁民精神病仆街写手不入流码农数学渣:你这反汉贱种中国通契丹胡狗硬说「货比三家」,除了VS CodeAtom之外,还有哪一家可以相提并论?!

这种时候就需要以一个老迈年高知识过时不肯与时俱进被时代打落尘埃注定被后续钦定主角龙傲天候补童年才俊驾驶的历史の五对负重轮碾为齑粉的孤苦伶仃可怜废柴草根文盲矬胖老穷光棍汉身份,传授一点经验了也。

在本世纪初,我的浏览器收藏夹第一位是「ActiveState」,一个提供各种脚本语言增值套装的企业站点,经常上去看看动态。到现在我的台式机桌面上还有个「Komodo IDE 8」的图标,虽然很久很久没用过了。而这个Komodo IDE以及免费的Komodo Editor,是使用前面提到的Mozilla的「MAF」开发的,伴随开发框架的终止,不知道这个环境的前景如何。就看中文互联网上的盛况,新时代信息技术精英很明显对此不关心甚至一无所知,比方说维基百科也没有相关的中文页面。

一旦有了想法就需要行动力,时隔多年之后再去逛逛,发现该企业还在与时俱进。这个Komodo已经到了11.0版,下了个Editor试试,感觉很遗憾。除了使用感受之外,还上网乱搜Markdown相关内容,得知确实支持这种格式,但没有数学公式相关扩展。

但这并不是说这个「社区」没有前途或钱途,只能说其被兲朝豪门贵种走兽派以及立志「学成文武艺拍卖给宗室勋贵家」的新时代信息技术精英们忽略了而已,至少在「MAF」无疾而终而谷歌的「CEF」高开高走并在舆论中有一统江湖之势的情况下如此。

十几年前,「活跃」版脚本套装只有三个:ActivePerlActivePythonActiveTcl。这几天再去一看,ActivePython由于其它更加活跃的发行版的存在而显得有些没落之外,剩下俩倒仍然保持「轻量级」体格:ActivePerl安装包22MBActiveTcl安装包16MB。而高举紧跟谷歌的「ActiveGo」安装包172MB。除此之外,「ActiveRuby」是β版,还预告了「ActiveLua」和「ActiveNode」即将到来。

最近Python大热,知乎首页就推送了一堆进入浙江山东等地课本的段子。虽然ActivePython并不专注于某个领域,但也有重达215MB的安装包。而把持科技界学术界的鸡鸣狗盗之徒经常挂在嘴边的,专攻科学计算大数据什么领域的那些发行版,Anaconda安装包537MB,而WinPython安装包409MB……因为打包了一堆「库」是吧。

也就是说,当前的Python的吨位已经不能算「轻量级脚本」了,正如其拥趸炫耀自豪的那样,成为大力振兴游标卡尺产业发展的最强劲的增长火车头。因此,对于「轻量级」应用来说,未必合适。正如之前找到的各种「轻量级」Markdown当中使用数学公式的解决方案,「前提」就需要本地安装「重量级」全套TeXTeX LiveMiKTeX)一样。

下载了Anaconda,因为这几天看见说最新发行版附带VS Code,而安装的时候发现最后一步检测「已经装过了」,原来并不是「集成」在一起。我的目的不是玩「Python科学计算或大数据或其它什么」,而是熟悉一下Jupyter Notebook的用法。再进一步就是等着看是不是有其他人开始琢磨VS CodeJupyter的「协作」然后「分享」。

因为可能有些经验能用到Sage之上。毕竟目前机器上的Sage只能在虚拟机里运行只能通过网络端口访问。前面说过SageWindows安装包在被兲朝防火长城挡住的GitHub,于是以TeXmacs为前端的试用都没能进行。为了这个目的,在VS Code里面装了几个PythonJupyter的扩展,准备试试能不能把VS CodeSage的前端。然后在Atom里面试着装Jupyter插件作为对比,同理可证装不上。


这种时候,数学渣的职业习惯就开始发挥作用了,要不惮以最大的恶意揣测,很可能钦定登基的武德充沛的「后清亲王」金口玉言下诏传旨钦定Python兲命昭昭,普天之下莫非王土率土之滨莫非王臣,宗室勋贵一呼百应紧密团结,而使用其它语种的费拉不堪的贱种屁民从业者只能「为王前驱」充当一筐抹布「身死族灭为天下笑」。所以才需要把同时考虑多套备胎方案齐头并进随时切换的路线贯彻到底,不能「服软认怂跪在真实」于是查询地图导航「到景山公园售票处怎么走」准备吊死在Python一棵歪脖树上。

从本专业视角出发,Sage之所以选Python是因为需要使用「Jupyter Notebook」格式,于是依赖「IPython」。这是一种专攻「交互式」操作的发行版,似乎已经与Anaconda集成了。而其它专业数学软件靠「In」「Out」那种一问一答的交互式操作的自定义语言,差不多都是这种风格,所以才照葫芦画瓢。

因此,以老掉牙的过时经验判断,被时间冲淡的印象里,天然的「交互式」脚本还有「Tcl」,「工具命令语言」(Tool Command Language)的缩写,其风格简直可以说专为命令行设计,若写成「整块的代码」看着反而不顺眼,于是可以作为备胎候选。重新搜了一圈相关信息,19998.1版就支持Unicode20128.6版才支持面向对象,而到现在还没到8.7α版),之前提到了「进度停滞但应用活跃」的技术,是「成熟且稳定」的,可以放心使用。

这「Tcl」还自带「Tk」图形界面,其设计影响了一批开源成果,包括鼎鼎大名的「Gtk+」在内,对于开源社区来说,使用风格应该很熟悉。十几年前还买过《Tcl/Tk编程权威指南》《PythonTkinter编程》这种书,可见使用「Tk」这现成轮子的车很多,老司机当然也很多。还有其它与时俱进的扩展,如「Tix」。而官网(tcl.tk)所推荐的二进制发布,还就是「ActiveTcl」。

所以,除了紧跟业界前沿还得盯着IPython之外,备胎暂时可以考虑Tcl。而Perl语法太诡异对于初学者甚至资深用户都很不友好,有其专用领域。目前台式机上已经安装的各种脚本语言不少,都是年轻时看见了之后感觉可供试验脑洞就顺手下载装上的,但后来一直也没怎么跟踪,版本都过时了,如IronSchemePythonRubyTclClojure,还有个「IO」忘了啥时候感兴趣装上的。

结合专业,当前几乎所有主流编程语言都依赖「函数」,接收输入返回输出,而问答型交互式操作更像「发布任务等待执行获得反馈」的流程。因此Tcl那种「任何东西都是一条命令,包括循环和分支在内」的设计,没准会更恰当。或者可以说数学上的「变换」「算子」「函子」等概念,也许可以实现得更加自然。

于是备胎方案的脑洞成型了:参考前面提到的Komodo现状,正好一张白纸好作画,Mozilla可以去拉一把,以MAF对照CEF的那些应用,以Komodo Editor对照VS Code的配置。暂时设定「近期目标」就是「Markdown + Math」类型的文档,可以在本地畅快编辑预览,还可以在互联网上发布并以Firefox正常浏览,先在这个「学术码字」领域追上竞争对手的「进度」再说。相关功能早有一堆开源实现珠玉在前,这不难吧?在此基础上可以考虑重点加强Tcl/Tk应用,还要扬长避短,强调「交互式」操作以IPython为榜样。

如果要补充细节,使用「LeTiX」(LETIX)字眼的原因说过了,因为不能兼容初版TeX源码就不能用「TeX」名称。最起码在Unicode极大普及的当代,数学符号已经是主流操作系统「内置支持」的内容了,只剩下字体原因。就比方说「空心字母」吧,「ℝ𝕆ℂℍ」直接用Unicode字符写出来,在本地Word当中和网上也都显示正常,就是由于字体缘故「𝕆」显得比较另类而已。

所以,既然存在「AMS Fonts」之类开源至少免费的允许自由发布的数学字体,那么很多公式的表达方式就未必那么繁琐了,「\mathbb」这种标记可以保留为在「输入不方便」的时候进行「转写」。前一阵的实验(那个「非我族类其心必异」范数)也证实,(知乎用的)MathJax可以支持Unicode字符甚至符号(大卫之星、星月、黑十字、锤镰都显示出来了),因此「技术」上不存在障碍。而功能更弱的KaTeX还不行,这是为了速度牺牲了兼容性。

结合上面Unicode相关论述可以得出结论,在科技昌明民智大开的当代,需要「兼容」的内容并没有想像中那么多。举例说,即便是LaTeX当中希腊字母也尽量利用错觉实现,比如小写「αβ」使用转写「\alpha\beta」,其对应的大写直接用英文「AB」而不存在\Alpha\Beta」这种转写。

再举个例子,LaTeX文档的「引号」,是两个反撇号加两个撇号「``’’」这种方式,那是为了(在生产力不够充沛的万恶的旧社会)适应美式键盘而作出的「妥协」而已。所以,直接用不会在「美利坚路径依赖」这么久的兲朝造成混淆的「英式弯引号」(“”‘’)也可以,实际上Word在处理英文语境的时候总是把直引号自动替换成这种分清前后的方式。如(“.f’h@N#”)。

所以,堂堂正正的处理方式,就是不考虑「字体依赖」,尤其是在编辑器那种「源代码」环境中使用的「编程字体」更是如此。对于引号这种东西,直的就是直的,弯的就是弯的。顺便,以「法式双引号」(«»)作为字母语境中的「书名号」也是一直以来的习惯。还有,「Latin-1」编码中还有函数符号「ƒ」呢,哪怕纯文本码字中就可以简单表达一些公式,如「ƒ(x)=1-x³」「sin²θ+cos²θ=1」。

参考UTF-8编码,排名靠前的可以两个字节表达的那些字符和符号,就包括了正经的希腊字母、基里尔字母、希伯来字母等。最起码这些数学上使用频繁的内容应该不需要「转写」,只有「输入」的困难,包括但不限于键盘布局。

但是可以有一些折衷方案,比方说在Word里面就可以用「Ctrl+Alt+C」输入「©」,用「Ctrl+Alt+R」输入「®」。而这个「Ctrl+Alt」的组合键,本来就是各种欧洲键盘的「AltGr」(右Alt)的含义。还有「半角方引号」(「」)其实也是Unicode字符,从日本半角假名编码而来,可以在西文环境中出现而不显得突兀,最起码和「方括号」([])占据宽度一致。

这几天也就在喜庆祥和的节日氛围当中思路广欢乐多而已。眼瞅着明天公假结束,党国栋梁青年才俊们纷纷回到工作岗位继续高举伟大旗帜为了光荣目标而正确奋斗。我也该回归正轨继续开始恶补数学了,应景涌现的心得体会以及脑洞赶紧总结一下写出来。


2018.2.22, Iovis