知乎上的公式是怎么打出来的?
29 个回答
知乎上个月换了新的渲染引擎, 尘埃落定最终还是扔了原来自己瞎写的后端LaTeX方案换了MathJax.
我很早以前就在博客上部署了MathJax, 积累了一些经验分享给大家.
噫, 有没有可能知乎用了自研的 \mathcal{Z}_{\mathbb{\large H}^{\huge{\mathcal i}}}\TeX 呢...
很简单, 搞个递归宏 \def\foo{\bar}\def\bar{\foo}\bar\def\foo{\bar}\def\bar{\foo}\bar
MathJax: 哇, Zhihu你丫给我的什么破玩意儿, 老娘要溢出了...
事实上 \mathrm{MathJax}\ne\LaTeX ,他们使用相同的语法但是已经是不同的东西了.
下面开始我们的学习. 注意, 严格来讲, 下文偷懒写法 = 错误写法.
点击编辑栏上方的 \Sigma 或者按下Ctrl+Shift+E启动...手机就算了.
基础篇
- \color{blue}{符号}
MathJax与LaTeX最大的不同就是支持Unicode字符...废话当年还没UTF呢, 不过能输入和能正常显示还是有点距离的...
简单地说,有些符号比如乘法在LaTeX中必须写成 a \times b但是现在可以直接打 a×b
我的输入法是能直接打中文出符号的, 这样的话可读性高, 但是在有些键盘上只能打英文.
运算符号: +-×(\times)÷(\div)±(\pm) 负正(\mp) 点乘 \dot
不等号: ≠(\ne或\neq或\not=) 大于>大于等于≥(\ge)小于等于≤(\le)恒等\equiv. 否定加\not.
约等于: 约等于≈ (\approx波浪\dot=等号加点) 近似不能用~,必须用\sim
点击编辑器的选项亦可, 但是能记命令就不用很麻烦的去点了...
反斜杠 \text{\\} 称为命令,括号 \texttt{\{ \} }被称为界定符, 用作消除歧义.
分数使用\frac{a}{b}, \frac{a}{b} ,不引起歧义可以省略括号比如\frac12, \frac12 ,不过不推荐这么写.
- \color{blue}{函数}
函数在前面加一个 \ 符号即可, 比如\sin(x), \sin(x)
使用^上标如 a^x , a^x 使用 _ 下标如 \log_a(x), \log_a(x) .
开根号\sqrt{a}, \sqrt{a} 开高次根\sqrt[n]{a}, \sqrt[n]{a} ,其他写法 \root n \of a, \root n \of a .
绝对值|x|, |x| 回车上面那个符号.
大括号\{ \},因为大括号现在是界定符,要输入就要用命令,同理反斜杠是\\.
按照标准,自然底数需要写成 \mathrm{e}^x, \mathrm{e}^x ,但一般偷懒写 e^x即可, e^x .
你有函数就加个\试一试能不能正体,不行的话用下面的方法.
比如光学里有个函数叫菲涅尔S函数, 没法自动正体, 那么可以这样写\operatorname{FresnelS} , \operatorname{FresnelS}(v) ,可以偷懒写成\text{FresnelS}.
- \color{blue}{微积分}
微积分使用比较特殊的符号规则,看上去差不多但是已经重载过了,或者叫宏.
极限:\lim_{x \to 0}f(x), \lim_{x\to0}f(x) ,可以看到下标_现在变成了正下方.
如果出于某些原因要下标那就要括起来屏蔽其影响{\lim}_{x\to0}f(x),{\lim}_{x\to0}f(x) .
求和\sum_{n=1}^\infty a_n, \sum_{n=1}^\infty a_n ,虽然\sum和\Sigma一模一样,但是行为完全不同,这就是重载.
求积一样的\sum改\prod即可 \prod_{n=1}^\infty a_n ,\prod和\Pi长得一样.
有时候可以看到这种: \textstyle f(x) = \textstyle \sum_{i=0}^{n} \frac{a_i}{1+x}
呀,这个作者搞错了吧,他写的\Sigma_{n=1}^\infty a_n 吗?
\Sigma_{n=1}^\infty a_n ,唉,好像不大一样?
不不,他写的没错,还是\sum_{n=1}^\infty a_n,但是style不同.
\begin{array}{ll} \texttt{\displaystyle} & \displaystyle f(x) = \sum_{i=0}^{n} \frac{a_i}{1+x} \\ \texttt{\textstyle} & \textstyle f(x) = \sum_{i=0}^{n} \frac{a_i}{1+x} \\ \texttt{\scriptstyle} & \scriptstyle f(x) = \sum_{i=0}^{n} \frac{a_i}{1+x} \\ \texttt{\scriptscriptstyle} & \scriptscriptstyle f(x) = \sum_{i=0}^{n} \frac{a_i}{1+x} \end{array}
style有四种,大多数网站区分前两种, 除了知乎所有公式前都加\displaystyle.
求导标准写法f^\prime(x), f^\prime(x) ,但是我都是偷懒写f'(x)的...
微分标准写法\frac{\mathrm{d}^n}{\mathrm{d}\,x^n}f(x), \frac{\mathrm{d}^n}{\mathrm{d}x^n}f(x) ,但我偷懒省略\mathrm.
偏微分标准写法,\frac{\partial^n}{\partial x^n}f(x), \frac{\partial ^n}{\partial x^n}f(x) ,这个没法偷懒了...
积分标准写法\int_a^b f(x)\,\mathrm{d}x, \int_a^b f(x)\,\mathrm{d}x ,当然偷懒省略\,\mathrm了咯...
二重积分\iint f(x,y)\,\mathrm{d}x\,\mathrm{d}y, \iint f(x,y)\,\mathrm{d}x\,\mathrm{d}y ,偷懒同上...
三重积分,\iiint,四重积分\iiiint,五重积分反正不是\iiiiint,五重以上就用\idotsint, \idotsint .
曲线曲面积分,\oint_{C}f(x)\, \mathrm{d}x + g(y)\, \mathrm{d}y, \oint_{C}f(x)\, \mathrm{d}x + g(y)\, \mathrm{d}y ,偷懒同上.
交集\bigcap_{i=1}^\infty p_i, \bigcap_{i=1}^\infty p_i 并集\bigcup_{i=1}^\infty p_i, \bigcup_{i=1}^\infty p_i .
- \color{blue}{矩阵}
\begin{matrix}
1&2\\
3&4\\
\end{matrix}
\begin{matrix} 1&2\\ 3&4\\ \end{matrix} ,要括号的话怎么办呢? 一种方法是使用自适应括号.
\left[\begin{array}{cc|c}
1&2&3\\
\hline
4&5&6\\
\end{array}\right]
\left[\begin{array}{cc|c} 1&2&3\\ \hline 4&5&6\\ \end{array}\right]
array可以用来画表
当然这种常用的肯定封装好了.
\begin{array}{lc} \texttt{smallmatrix}&\bigl(\begin{smallmatrix} a & b \\ c & d \end{smallmatrix}\bigr)\\ \texttt{matrix} &\begin{matrix} 1&2\\3&4\\ \end{matrix} \\ \texttt{pmatrix}&\begin{pmatrix}1&2\\3&4\\ \end{pmatrix}\\ \texttt{bmatrix}&\begin{bmatrix}1&2\\3&4\\ \end{bmatrix}\\ \texttt{Bmatrix}&\begin{Bmatrix}1&2\\3&4\\ \end{Bmatrix}\\ \texttt{vmatrix}&\begin{vmatrix}1&2\\3&4\\ \end{vmatrix}\\ \texttt{Vmatrix}&\begin{Vmatrix}1&2\\3&4\\ \end{Vmatrix}\\ \end{array}
向量用\vec,\vec可以作用在一个或两个字母上
\texttt{\vec}&\vec{x}\ \mathrm{or}\ \vec{AB}\\
\texttt{\vec}\ \vec{x}\ \mathrm{or}\ \vec{AB}
\begin{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}
\begin{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 \right. 注意有个点, 加点表示什么也不显示.
- \color{blue}{其他}
组合符号:\binom{k}{1}, \binom{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}}}}
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,\tfrac,\tbinom,分别表示\displaystyle和\textstyle
x = a_0 + \frac{1^2}{a_1+}
\frac{2^2}{a_2+}
\frac{3^2}{a_3+}
\frac{4^4}{a_4+} \cdots
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}{\LARGE\mathrm K}}\frac{a_j}{b_j}
很有趣的一个事情, \sum到底是怎么重载的? 就是这样, \underset{j=1}{\overset{\infty}{\LARGE\mathrm K}}\frac{a_j}{b_j} .
更多测试参考:知乎公式编辑器测试
你也许会想,这么多命令怎么记得住?
当然记不住, 我又不是最强大脑,但我也不是高中生了, 没人考我记忆力.
忘记说明用不到, 说明不重要, 每天都用的命令是不会忘的.
偶尔遇到现在也不用查手册, 现在不有手写识别嘛
http://webdemo.myscript.com/views/math.html#
哦对了, Mathtype 这种玩意儿少用, 复制出来的代码毫无可读性,严重不符合标准.
何况有个合适的IDE打TeX比Mathtype快多了, 允许你用快捷键还是比你快...
进阶篇
- \color{blue}{占位符}
回忆下积分的写法,\int_a^b f(x)\,\mathrm{d}x,其中\,称为占位符,用来调节间隔使公式更美观. 空格必须使用占位符否则不算...当然\text{ 空格 } 有效但是这是错误用法...
- 占位符以一个大写M为标准, 标为\quad
- \qquad 那就是双空格
- \, 相当于 3/18个 \quad
- \: 相当于 4/18个 \quad
- \; 相当于 5/18个 \quad
- \ 相当于 6/18个 \quad
- \! 相当于-3/18个 \quad
- \color{blue}{字体字号}
MathJax支持以下九种字体\begin{array}{ll|l} \texttt{"normal"} &\texttt{} & ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ \texttt{"blackboard"} &\texttt{\mathbb} &\mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ}\\ \texttt{"boldface"} &\texttt{\mathbf} &\mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ}\\ \texttt{"typewriter"} &\texttt{\mathtt} &\mathtt{ABCDEFGHIJKLMNOPQRSTUVWXYZ}\\ \texttt{"roman"} &\texttt{\mathrm} &\mathrm{ABCDEFGHIJKLMNOPQRSTUVWXYZ}\\ \texttt{"sans-serif"} &\texttt{\mathsf} &\mathsf{ABCDEFGHIJKLMNOPQRSTUVWXYZ}\\ \texttt{"calligraphic"}&\texttt{\mathcal} &\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}\\ \texttt{"script"} &\texttt{\mathscr} &\mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}\\ \texttt{"fraktur"} &\texttt{\mathfrak}&\mathfrak{ABCDEFGHIJKLMNOPQRSTUVWXYZ}\\ \end{array}
正常不填就行, 强制转换的话那就是 \texttt{\mathnormal}
这个是AmsLaTeX里的, 其他字体可以试试\unicode
\unicode[Garamond]{x41} \unicode[Arial]{x41}
\unicode[Garamond]{x41} \unicode[Arial]{x41} ,这不是标准里的, 这个和浏览器有关, 还和知乎开了什么css-family有关...
字号,字号从大到小依次为:
\Huge\huge\LARGE\Large\large\normalsize\small\footnotesize\scriptsize\tiny
暂时不可以用\fontsize \fontsize{15pt}{22pt}
- \color{blue}{颜色}
啊,到了大家最关心的颜色环节了.
其实就是 \color{色调}表达式 ,比如标题就是\color{blue}{颜色}, \color{blue}{颜色}
内置的颜色列表应该是:知乎「插入公式」诀窍 列举的这些
\begin{array}{|lc|} \hline \verb+\color{black}{黑色}+ & \color{black}{黑色} \\ \verb+\color{gray}{灰色}+ & \color{gray}{灰色} \\ \verb+\color{silver}{银色}+ & \color{silver}{银色} \\ \verb+\color{white}{白色}+ & \color{white}{白色} \\ \hline \verb+\color{maroon}{栗色}+ & \color{maroon}{栗色} \\ \verb+\color{red}{红色}+ & \color{red}{红色} \\ \verb+\color{fuchsia}{桃红}+ & \color{fuchsia}{桃红} \\ \verb+\color{pink}{粉红}+ & \color{pink}{粉红} \\ \verb+\color{orange}{橙色}+ & \color{orange}{橙色} \\ \verb+\color{yellow}{黄色}+ & \color{yellow}{黄色} \\ \verb+\color{lime}{青柠}+ & \color{lime}{青柠} \\ \verb+\color{green}{绿色}+ & \color{green}{绿色} \\ \verb+\color{cyan}{青色}+ & \color{cyan}{青色} \\ \verb+\color{teal}{靛青}+ & \color{teal}{靛青} \\ \verb+\color{blue}{蓝色}+ & \color{blue}{蓝色} \\ \verb+\color{navy}{海蓝}+ & \color{navy}{海蓝} \\ \verb+\color{purple}{紫色}+ & \color{purple}{紫色} \\ \hline \end{array}
这张表是用MathJax画的哦...
支持16位色代码\color{#A00}{\texttt{#A00}}, \color{#A00}{\texttt{#A00}}
支持256位色\color{#00A000}{\texttt{#00A000}}, \color{#00A000}{\texttt{#00A000}}
不支持带透明通道颜色代码 #0000A000
不支持标准的实值颜色代码{\color[rgb]{1, 0, 0} \texttt{red}},知乎你开包开少了吧...
本来的话背景色一般该写成\pagecolor{色调},但是好像也不接受...
好吧,那就\bbox[颜色]{表达式},一样可以,\bbox[pink,2pt]{f(x)}, \bbox[pink,2pt]{f(x)}
\bbox还可以用来加框
\bbox[#EFF,5px,border:2px solid red]
{e^x=\lim_{n\to\infty} \left( 1+\frac{x}{n} \right)^n\qquad (1)}\\
\bbox[#EFF,5px,border:2px solid red] {e^x=\lim_{n\to\infty} \left( 1+\frac{x}{n} \right)^n\qquad (1)}\\
- \color{blue}{环境}
知乎把宏取消掉了,那这个没啥好讲了
说个万能对齐环境 align
\begin{align}
f(x) & = (m+n)^2 \\
& = m^2+2mn+n^2 \\
\end{align}
\begin{align} f(x) & = (m+n)^2 \\ & = m^2+2mn+n^2 \\ \end{align}
你不知道用什么对齐那就用align(你知道就用专门的那个)
可以模拟一切对齐case,array,alignat等等的对齐
直接在需要对齐处加&即可
更多环境参考 Share Latex
- \color{blue}{宏}
宏说白了就是替换
可是知乎上礼拜把宏取消掉了
宏也是最精彩最难的部分...
有宏的话我甚至能画出图来
宏有多强一门语言就有多强
强到极值这门语言强到了极点
我们统称这样的语言为Lisp
完成度1.0.0, 最后更新17.12.19(宏)
参考文档:
全面程度递增, 看完第六个 LaTeX 入门那绝对超越我了(其实看完第五个就能超我了)...
知乎公式是基于Tex的语法编写的,这里简单写写常用的公式,需要时读者们可以随时查询
代码框里的东西是源码
这里事先说明一下大括号{}的特点
如果大括号中只有一个数字或者只有一个以\开头的符号或者字母,如 \pi (\pi)
那么这个大括号可以省略
注意,比方说想表示 \pi x 时,不能直接\pix,要在\pi和x之间加一个空格,不然系统会以为pix是一个符号,请写成 \pi x
- 1
1
- 3.14
3.14
- \frac{b}{a}
\frac{b}{a}
- {a}^{b+c}
a^{b+c}
- a^b+c
a^b+c
- \sqrt{2+\sqrt2}
\sqrt{2+\sqrt2}
- \sqrt[3]{125}=5
\sqrt[3]{125}=5
- 0.\dot{1}4285\dot{7}
0.\dot{1}4285\dot{7}
- y=\left| x \right|
y=\left| x \right|
- y=\left\{ [(a+b)+c]+d \right\}
y=\left\{ [(a+b)+c]+d \right\}
- y=\sin x
y=\sin x
- y=\sinh x
y=\sinh x
- f(x)=\mathrm e^{x}
f(x)=\mathrm e^x
- f\prime(x)=\mathrm e^x
f\prime(x)=\mathrm e^x
- a_1+a_2=3
a_1+a_2=3
- \log_e{e^2}=2
\log_e{e^2}=2
- \sum_{i=1}^{10} a_i
\sum_{i=1}^{10} a_i
- \prod_{i=9}^{19} i^i
\prod_{i=9}^{19} i^i
- 1,2,\cdots,100
1,2,\cdots,100
- \lim_{x \to 100} \frac{x^2-10000}{x-100}=200
\lim_{x \to 100} \frac{x^2-10000}{x-100}=200
- \lim_{x \to \infty}1+\frac{1}{x} =1
\lim_{x \to \infty}1+\frac{1}{x} =1
- \Delta = \nabla^2 = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2}
\Delta = \nabla^2 =
\frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2}
- \int_a^b f(x) dx
\int_a^b f(x) dx
- \oint_L \mathbf{A} \cdot d\mathbf{r}
\oint_L \mathbf{A} \cdot d\mathbf{r}
- \vec{a}
\vec{a}
- \left( \begin{array}{ccc} a & b & c \\ d & e & f \\ g & h & i \end{array} \right)
\left(
\begin{array}{ccc}
a & b & c \\
d & e & f \\
g & h & i
\end{array}
\right)
- 60^\circ
60^\circ
- \begin{eqnarray} \begin{cases} x + 4y = 7 & \\ 2x + 3y = 9 & \end{cases} \end{eqnarray}
\begin{eqnarray}
\begin{cases}
x + 4y = 7 & \\
2x + 3y = 9 &
\end{cases}
\end{eqnarray}
- \bm{A} \times \bm{B}
\bm{A} \times \bm{B}