数学公众号排版编辑器
用 Markdown + LaTeX 写数学文章,排成「定义 / 定理 / 评注」卡片样式,一键复制到微信公众号、知乎或 X。
在线使用
打开 https://libinyam.github.io/markdown-mods/
- 左边写 Markdown,右边是手机宽度的实时预览;
- 点「复制到公众号」,到公众号后台的正文里粘贴(Ctrl+V);
- 发表前用「预览」发到自己手机上看一遍。
草稿自动存在当前浏览器里。换浏览器或清缓存就没了,重要文章请另存一份 .md。
本地使用
不需要安装任何东西:
- 下载
index.html(页面右上角 Download raw file),或者 git clone https://github.com/libinyam/markdown-mods.git;
- 双击
index.html,用 Chrome / Edge 打开。
需要联网:公式渲染(MathJax)和 Markdown 解析(marked)都从 jsDelivr CDN 加载。
写法
| 写法 | 效果 |
|---|
$x^2$ | 行内公式 |
$$ ... $$(单独成段) | 行间公式 |
# *1* 单子 | 一级标题,居中,编号自动重算 |
## *1.1* 代数与比较函子 | 小节标题,星号包住的编号显示为蓝色 |
:::theorem 定理 2.2 … ::: | 蓝色卡片 |
:::proposition 命题 2.3 … ::: | 黄色卡片 |
:::lemma 引理 2.4 … ::: | 青色卡片(fact 同色) |
:::corollary 推论 2.5 … ::: | 红色卡片(「结论」也用这个) |
:::definition 定义 2.6 … ::: | 绿色卡片(axiom 同色) |
:::example 例 2.7 … ::: | 橙色卡片 |
:::question 问题 2.8 … ::: | 紫色卡片 |
:::remark 评注 2.9 … ::: | 灰色卡片(未登记的类型名都是灰色) |
:::proof 证明 … ::: | 白底虚线框,不参与编号 |
:::theorem! 预备事实 … ::: | 类型后加 !:不参与编号,标题原样显示 |
++定理(Beck)++、++#beck++ | 交叉引用:自动找到那张卡、填当前编号、加浅黄高亮(见下) |
:::theorem 定理(Beck){#beck} | 末尾 {#名字} 是引用名,不显示,供 ++#beck++ 指路 |
[文字](https://…) | 自动转成 文字[1],文末生成「参考资料」 |
卡片的写法是:
:::definition 定义 1.1
$T$-代数是一个二元组 $(X,x)$,其中 $x\colon TX\to X$ 满足 $x\circ\eta_X=1_X$.
:::
::: 后面先写类型(决定颜色),再写标题(显示在标签上)。其余都是标准 Markdown。完整示例见 example.md:把它粘进编辑器,就能看到上图的效果。
编号怎么算
- 稿子里有
# 一级标题时,编号按一级标题重算:每遇一个 #,节号加一,卡片号回到 1。
- 定理、命题、引理、事实、推论、定义、公理、例子、问题、评注共用一个序列。不是每类各自从 1 开始。
- 证明不占号。类型后面带
! 的卡片也不占号。
- 稿子里没有
# 时,编号按你手写的原样显示。
交叉引用
++…++ 里写的是「指哪一张卡」。渲染时脚本先给每张卡登记索引,再按下面的写法去认;认出来就加一层浅黄高亮。
++#beck++:按名字找。名字写在卡片标题末尾的 {#beck} 里,不会显示出来。这条最稳,改标题、插卡片都不影响。认出来换成「类型词 + 当前编号」。
++定理(Beck)++、++Beck++、++定理++:按标题找。全名、括号里的副标题、只写类型词都认,但必须唯一。认出来同样换成「类型词 + 当前编号」。
++定理 2.2++:按编号找。数字是照卡片标题手写的编号,会换成重排后的新编号,所以插了新卡片也指得准;引用里其余的字(++定理 2.2(ii)++、++定理 2.1 与 2.2++)原样保留。新编号对上唯一一张同类卡片时加高亮。
认不出来时不会乱填,只是把引用标个颜色提醒你:
- 橙色虚线:同名的卡不止一张(比如两张都叫「引理」),把引用写具体些。
- 红色虚线:写了
#名字,但找不到这张卡。
在右边预览里点高亮的引用,会滚到那张卡。公众号里没有跳转,只是高亮文字。
行内公式与中文
公式和汉字之间的间距、标点的位置,渲染时自动处理,不用手调:
- 公式紧贴汉字时,那一侧补
0.18em(近似 xeCJK 的 \xkanjiskip)。你自己敲了空格就不补,不会变成两倍。
- 公式后面的
, 。 ) 会和公式绑在一起。宁可整段挪到下一行,也不让标点单独跑到行首。
- 正文段落带
line-break: strict 和 text-wrap: pretty:标点不顶行首,也少留孤字。旧浏览器忽略这两条。
- 公式是一整条 SVG,浏览器没法在
= 或 + 处折行。超过半行宽的推导式,请写成 $$…$$ 单独成段。
应用主题
工具栏第一个按钮。作用是把没按上表写的稿子,转成上面的语法。改坏了按 Ctrl+Z 撤销。
它认两种稿子。
纯文本稿:从网页或文档里复制出来的那种,# 和 ** 都丢了。按下面的规则转:
第2章 … → 一级标题;2.1 … → 二级标题。
- 没有句末标点的短段 → 加粗小标题。后面紧跟行间公式的引导句不算。
定义 2.3(…)… 这类段落 → 卡片,紧跟的行间公式一起搬进卡片。类型后面带 !,原编号保留。
证明 … → 证明卡片,到 □、$\square$ 或「证毕」为止。
- 以
; 结尾的段落,连同后面一段合成列表。每条都以 (1)、1)、① 开头时,用有序列表。
- 正文里的
定理 2.3、定义 2.4 自动包成 ++定理 2.3++。公式里的不动。单字的「注」「例」不认,免得把「备注 1」「比例 2」也包进去。
旧格式:定理用引用块包住(> **定理** 设 …),证明在块外用 $\square$ 收尾。块里的 >$$…$$ 会去掉行首的 >,变成独立公式段。
已经是 # 或 ::: 写法的部分不会动,点多次也没关系。
复制到公众号
复制出去的内容和右边预览一模一样:样式已经写进每个元素,公式是 SVG 图形。
- 图片:在公众号后台自己插入,编辑器不上传图片。正文里的图片已限制在版心宽度内。
- 链接:微信会剥掉
<a> 标签、只留裸地址。所以粘贴前就转成了脚注:正文里只有上标 [1],地址统一放在文末「参考资料」。
- 字体:正文用宋体。iPhone 上正常显示宋体;部分安卓手机没有中文衬线字体,会落成黑体。
复制到知乎
知乎会过滤所有自定义样式。卡片、颜色、网格都不会保留,只留标题、引用块、加粗和公式。
公式会换成知乎自带的格式(zhihu.com/equation),行间公式末尾自动加 \\,让它单独成行。
复制到 X(X Articles)
和知乎一样,只保留标题、引用块、加粗。X 还会丢掉粘贴内容里的所有图片——外链 PNG、内嵌图片、SVG 都不行,它只接受 Ctrl+V 粘进来的图片文件。所以公式分两种处理:
- 行内公式换成 Unicode 文字:
$p(x\mid y)$ → p(x | y),$\sum_k \pi_k = 1$ → ∑ₖ πₖ = 1,$\mathcal{V}$ → 𝒱。遇到转不了的命令(矩阵、\binom、\stackrel 等),这个公式保留原 TeX。
- 行间公式变成「〔公式 1〕」「〔公式 2〕」这样的占位。正文粘进 X 之后,在右边预览里点一下公式,图片就进了剪贴板;到 X 里把光标放在对应占位处 Ctrl+V,再删掉占位文字。
公式图片是白底、固定 1200 像素宽,公式居中。这样每张图在 X 里的字号一致。
在 md.doocs.org 里使用主题
习惯用 md.doocs.org 的话,把 wechat-math.css 的内容粘到它的「自定义 CSS」里即可,写法和上表一样。自动编号和引用反查是编辑器脚本做的,doocs 里没有;标题末尾的 {#名字} 在 doocs 里会原样显示。
修改主题
主题 CSS 有两份,改动时两处要同步:
index.html 里的 <style id="theme">,编辑器用;
wechat-math.css,doocs 用。
编辑器复制时,按 CSS 的书写顺序把规则逐条写进元素的 style 属性,后写的覆盖先写的,不看选择器优先级。所以用来覆盖的规则要写在后面。
许可
MIT