.tex类型文件怎么阅读_TeX + Markdown = ?

3b58346085e1e003a76006d1af400c93.png

前段时间写了一个博客主题, 模板引擎是 rust tera

mikoto theme​mikoto.ea.chat

然后我顺便想写个 markdown render 以便支持一些扩展语法.

然后我发现各种扩展兼容性很差, 这个扩展语法那个扩展语法符号冲突来冲突去的...

最后想想还不如自己重新发明, 然后就发明了 notedown

样式

基本样式的话就这些, 比 markdown 多一个 undercover, 当你鼠标移上去的话就会显示内容.

1661c456c3bdcac65e51801b9cd6a104.png

注意这里的公式, $$ 并不会自己换行, 只是单纯的变成 displaystyle 而已

其他也没啥好讲的, 就是 markdown 那一套

指令

很烦的一个事情就是 markdown 的每个扩展都要不同的词法, 记都记不住.

不如返璞归真, 直接向 tex 学习, 一个斜杠加一个单词搞定.

a3dfa66b4039da239161201621ee0368.png

单行指令, 用于主要参数只有一个的情况, 有选项的话就没法这么用了.

字符指令, 用于有几个参数要传的情况

具名参数指令是标准化的传参方式. 虽然现在一般都是小括号表示函数调用, 但是 tex 里传统的就是大括号.


7a65975a41158445db63620263880097.png

接下来看这个效果

4c3865eb8e6e4a0bb5bed41a1e402679.png

notedown 把 code block 也看成了一种指令, 内容相当于自动传入 body 参数.

一般对于需要 body 参数的指令来说, 首个参数一定是 body.

下面类似 vue 的方式虽说不是无效的, 但是并不推荐使用, 我在想为了安全性考虑取消掉得了.


html 比 tex 排版复杂的一点在于, html 可以状态层叠.

比如什么选项卡之类的东西怎么处理呢? 这相当于有多个 body 参数啊.

4870996848c94c1e4b56b35e5e351660.png

原来的 vue syntax 主要就是这个用途, 后来我想到了 tex 里的宏单元

用 begin - end 块包围一个区域, 然后 push 分割区域给相应的参数不就行了吗.

这个是刚想到的还没完全测试过, 比如嵌套情况如何处理这些细节还要推敲下.


这样的话表达力应该是够了, 没有什么写着很麻烦的排版了, 主要工作量就是实现指令了.

比如插入音乐直接一个 netease 指令 so easy

9ac6a96ee7df618232fb6e73f0b25082.png

然后下一步就是开发一个 vscode 插件, 现在的话高亮和格式化搞定了.

接下去写个预览功能, 这个就比较麻烦了, notedown 支持 import 一个其他文档或者图片或者音乐, 这就涉及 IO 了, 不是简单的字符串输入字符串输出了, 搞不懂调哪个 api.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值