知乎上个月换了新的渲染引擎, 尘埃落定最终还是扔了原来自己瞎写的后端LaTeX方案换了MathJax.
我很早以前就在博客上部署了MathJax, 积累了一些经验分享给大家.
噫, 有没有可能知乎用了自研的 呢...
很简单, 搞个递归宏 deffoo{ar}defar{foo}ar
MathJax: 哇, Zhihu你丫给我的什么破玩意儿, 老娘要溢出了...
事实上 ,他们使用相同的语法但是已经是不同的东西了.
下面开始我们的学习. 注意, 严格来讲, 下文偷懒写法 = 错误写法.
点击编辑栏上方的 或者按下Ctrl+Shift+E启动...手机就算了.
MathJax与LaTeX最大的不同就是支持Unicode字符...废话当年还没UTF呢, 不过能输入和能正常显示还是有点距离的...
简单地说,有些符号比如乘法在LaTeX中必须写成 a imes b但是现在可以直接打 a×b
我的输入法是能直接打中文出符号的, 这样的话可读性高, 但是在有些键盘上只能打英文.
运算符号: +-×( imes)÷(div)±(pm) 负正(mp) 点乘 dot 不等号: ≠(
e或
eq或
ot=) 大于>大于等于≥(ge)小于等于≤(le)恒等equiv. 否定加
ot. 约等于: 约等于≈ (approx波浪dot=等号加点) 近似不能用~,必须用sim
点击编辑器的选项亦可, 但是能记命令就不用很麻烦的去点了...
反斜杠 称为命令,括号 被称为界定符, 用作消除歧义.
分数使用frac{a}{b}, ,不引起歧义可以省略括号比如frac12, ,不过不推荐这么写.
函数在前面加一个 符号即可, 比如sin(x),
使用^上标如 a^x , 使用 _ 下标如 log_a(x), .
开根号sqrt{a}, 开高次根sqrt[n]{a}, ,其他写法 oot n of a, .
绝对值|x|, 回车上面那个符号.
大括号{ },因为大括号现在是界定符,要输入就要用命令,同理反斜杠是\.
按照标准,自然底数需要写成 mathrm{e}^x, ,但一般偷懒写 e^x即可, .
你有函数就加个试一试能不能正体,不行的话用下面的方法.
比如光学里有个函数叫菲涅尔S函数, 没法自动正体, 那么可以这样写operatorname{FresnelS} , ,可以偷懒写成 ext{FresnelS}.
微积分使用比较特殊的符号规则,看上去差不多但是已经重载过了,或者叫宏.
极限:lim_{x o 0}f(x), ,可以看到下标_现在变成了正下方.
如果出于某些原因要下标那就要括起来屏蔽其影响{lim}_{x o0}f(x), .
求和sum_{n=1}^infty a_n, ,虽然sum和Sigma一模一样,但是行为完全不同,这就是重载.
求积一样的sum改prod即可 ,prod和Pi长得一样.
有时候可以看到这种:
呀,这个作者搞错了吧,他写的Sigma_{n=1}^infty a_n 吗?
,唉,好像不大一样?
不不,他写的没错,还是sum_{n=1}^infty a_n,但是style不同.
style有四种,大多数网站区分前两种, 除了知乎所有公式前都加displaystyle.
求导标准写法f^prime(x), ,但是我都是偷懒写f'(x)的...
微分标准写法frac{mathrm{d}^n}{mathrm{d},x^n}f(x), ,但我偷懒省略mathrm.
偏微分标准写法,frac{partial^n}{partial x^n}f(x), ,这个没法偷懒了...
积分标准写法int_a^b f(x),mathrm{d}x, ,当然偷懒省略,mathrm了咯...
二重积分iint f(x,y),mathrm{d}x,mathrm{d}y, ,偷懒同上...
三重积分,iiint,四重积分iiiint,五重积分反正不是iiiiint,五重以上就用idotsint, .
曲线曲面积分,oint_{C}f(x), mathrm{d}x + g(y), mathrm{d}y, ,偷懒同上.
交集igcap_{i=1}^infty p_i, 并集igcup_{i=1}^infty p_i, .
egin{matrix} 1&2\ 3&4\ end{matrix}
,要括号的话怎么办呢? 一种方法是使用自适应括号.
left[egin{array}{cc|c} 1&2&3\ hline 4&5&6\ end{array}
ight]
array可以用来画表
当然这种常用的肯定封装好了.
向量用vec,vec可以作用在一个或两个字母上
exttt{vec}&vec{x} mathrm{or} vec{AB}\
egin{cases} a_1x+b_1y+c_1z=frac{p_1}{q_1} \[2ex] a_2x+b_2y+c_2z=frac{p_2}{q_2} \[2ex] a_3x+b_3y+c_3z=frac{p_3}{q_3} \[2ex] end{cases}
大括号可以用case, 后面[2ex] 用于调整间距.
当然用自适应括号也行, left{ XXX ight. 注意有个点, 加点表示什么也不显示.
组合符号:inom{k}{1}, ,当然你不知道用矩阵打也是可以的...我干过...
连分式:
x = a_0 + cfrac{1^2}{a_1 + cfrac{2^2}{a_2 + cfrac{3^2}{a_3 + cfrac{4^4}{a_4 + cdots}}}}
我不怎么喜欢这么写, 有点像Lisp, 在没有自动括号补全的情况下少打一个会很开心.
注意这种情况下要写cfrac,不然会挤在一起
还有很多符号可以dfrac,dbinom, frac, binom,分别表示displaystyle和 extstyle
x = a_0 + frac{1^2}{a_1+} frac{2^2}{a_2+} frac{3^2}{a_3+} frac{4^4}{a_4+} cdots
应该推广这种写法...还省空间不是...
underset{j=1}{overset{infty}{LARGEmathrm K}}frac{a_j}{b_j}
很有趣的一个事情, sum到底是怎么重载的? 就是这样, .
更多测试参考:知乎公式编辑器测试
你也许会想,这么多命令怎么记得住?
当然记不住, 我又不是最强大脑,但我也不是高中生了, 没人考我记忆力.
忘记说明用不到, 说明不重要, 每天都用的命令是不会忘的.
偶尔遇到现在也不用查手册, 现在不有手写识别嘛
http:// webdemo.myscript.com/vi ews/math.html#
哦对了, Mathtype 这种玩意儿少用, 复制出来的代码毫无可读性,严重不符合标准.
何况有个合适的IDE打TeX比Mathtype快多了, 允许你用快捷键还是比你快...
回忆下积分的写法,int_a^b f(x),mathrm{d}x,其中,称为占位符,用来调节间隔使公式更美观. 空格必须使用占位符否则不算...当然 ext{ 空格 } 有效但是这是错误用法...
MathJax支持以下九种字体
正常不填就行, 强制转换的话那就是
这个是AmsLaTeX里的, 其他字体可以试试unicode
unicode[Garamond]{x41} unicode[Arial]{x41}
,这不是标准里的, 这个和浏览器有关, 还和知乎开了什么css-family有关...
字号,字号从大到小依次为:
HugehugeLARGELargelarge
ormalsizesmallfootnotesizescriptsize iny
暂时不可以用fontsize
啊,到了大家最关心的颜色环节了.
其实就是 color{色调}表达式 ,比如标题就是color{blue}{颜色},
内置的颜色列表应该是:知乎「插入公式」诀窍 列举的这些
这张表是用MathJax画的哦...
支持16位色代码color{#A00}{ exttt{#A00}},
支持256位色color{#00A000}{ exttt{#00A000}},
不支持带透明通道颜色代码 #0000A000
不支持标准的实值颜色代码{color[rgb]{1, 0, 0} exttt{red}},知乎你开包开少了吧...
本来的话背景色一般该写成pagecolor{色调},但是好像也不接受...
好吧,那就box[颜色]{表达式},一样可以,box[pink,2pt]{f(x)},
box还可以用来加框
box[#EFF,5px,border:2px solid red] {e^x=lim_{n oinfty} left( 1+frac{x}{n}
ight)^nqquad (1)}\
知乎把宏取消掉了,那这个没啥好讲了
说个万能对齐环境 align
egin{align} f(x) & = (m+n)^2 \ & = m^2+2mn+n^2 \ end{align}
你不知道用什么对齐那就用align(你知道就用专门的那个)
可以模拟一切对齐case,array,alignat等等的对齐
直接在需要对齐处加&即可
更多环境参考 Share Latex
宏说白了就是替换
可是知乎上礼拜把宏取消掉了
宏也是最精彩最难的部分...
有宏的话我甚至能画出图来
宏有多强一门语言就有多强
强到极值这门语言强到了极点
我们统称这样的语言为Lisp
完成度1.0.0, 最后更新17.12.19(宏)
参考文档:
全面程度递增, 看完第六个 LaTeX 入门那绝对超越我了(其实看完第五个就能超我了)...