数学研发论坛

 找回密码
 欢迎注册
查看: 32139|回复: 11

[教程] 善用 LaTeX 排版 数学公式

[复制链接]
发表于 2014-1-5 18:49:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?欢迎注册

x


请点击上述“目录”里的链接,阅读展开的相关页面。。。

注:“LaTeX”字符本可用其自身命令显示出其 Logo \( \rm \LaTeX \) 的,怎奈论坛标题里若出现数学公式,会导致页面布局出现一丁点小问题,所以作罢。
精华


毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-1-18 23:05:29 | 显示全部楼层
基本规则

在本节中,仅介绍在本论坛里是如何标记“\(\rm\LaTeX\)数学公式”的。

本论坛自 2008 年 2 月起采用 ASCIIMathML 以完成复杂的数学公式排版,采用的是前后加美元符\$作为标记符;
六年以来,已沉淀了大量的数学公式。
前已述,之所以要切换到当前的方案,首先是满足了兼容性,
所以 $公式$ 仍继续有效,且语法规则基本不变,使老帖可以正常解析。
至于 ASCIIMathML 的语法规则,并不多(老会员基本已知),
但由于其规则过于简单、宽容(也可以说不够严谨不够规范),
现强烈推荐,本文也将不再重述,尽管大家仍可继续用它。。。

如果要用更高级更严谨的 \(\rm\LaTeX\) 语法,建议大家采用如下方式标记:
  1. 如果大家要用严谨的LaTeX语言获得最佳的效果:
  2. 行内模式为:\( 公式 \)
  3. 行间模式为:\[ 公式 \]
  4. 这样非常好记(在下面的tool中可通过按图标按钮直接获得)。
复制代码
相信大家,在熟悉了接下来介绍的规则及效果后,会迷上这种新方式的。


注:关于“\(\rm\LaTeX\)公式在线预览器”
  • 本论坛行内公式行间公式的规则、效果,已作为 Demo 提示给大家(点击那个按钮可以重现);
  • 可以在代码框直接输入需要的\(\rm\LaTeX\)代码,并可以点击相应的按钮快速标记。其中上面的按钮可以快速标记一段文字为行内公式或行间公式;
  • 如果大家要正常表达美元符$,请在其前加宏命令符反斜杠 \ 即可;
  • 本贴上面的“ \(\rm\LaTeX\)公式在线预览器”,是左右对照版的,其宽度会随浏览器自动调整,但高度不会变;
    大家在发帖时,页底会自动出现公式预览,其中快速回复时采用左右栏模式,高级模式发帖时则采用上下栏模式。
  • 在本论坛里,设定了以下 HTML 标签里不转化成数学公式:script,noscript,style,textarea,pre,code,ol,而直接显示原始文本;特别地,将\(\rm\LaTeX\)代码放进[code]标签里,可以防止转成数学公式。也可点击新增的图标按钮,形成[text]标签(但注意,标签内不得出现左中括号“[”,否则该标签会失效,这是自定义“Discuz! 代码”标签的通病)。

点评

我已经迷上这种新方式  发表于 2014-1-24 11:14
排版不错,图像,公式,特殊字符,在文字里游刃有余啊  发表于 2014-1-19 09:05
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-1-19 11:14:34 | 显示全部楼层
\(\rm\LaTeX\)的命令与环境,及基本符号

\(\rm\LaTeX\)的命令(command)是大小写敏感的:以一反斜线\ 开始,后接命令名,命令名或者是一串字母,或是单个符号。
命令名后的空格符、数字或任何非字母的字符都标志着该命令的结束。

命令可以带一些参数,通常用花括号{}括起来。
如果命令参数只有一个字符(不包括空格),花括号可以省略不写。
如果有可选参数,则用方括号[]括起来。比如3次根号下5,可写作:\sqrt[3]5~or~\root3\of5

\(\rm\LaTeX\)的命令很丰富,MathJax支持其中最常用的那部分,具体列表,大家可以点上楼的

\(\rm\LaTeX\)的环境(environment)是指形如 \begin{环境名} ... \end{环境名} 部分的代码,可用于对齐等排版,后面的章节会专门讲解。

“#、%、&、^、_、{、}、~、`、$ 及空格符、\” 在 \(\rm\LaTeX\) 中被赋予新的含义:
  • # 用在参数指定编号,多用于宏(大家不必深入了解);
  • % 起单行注释作用;
  • & 作为对齐环境的分隔符(关于“环境”,下面会讲述);
  • ^ 作为指数符或上标,其用法差不多相当于带一个参数的命令
  • _ 作为下标符,其用法差不多相当于带一个参数的命令
  • { } 作为群组的标记。对比一下:“2^32 \( 2^32 \)” 与 “2^{32} \( 2^{32} \)”(不同的是,它们在 ASCIIMathML 中是等效的);
  • ~ 是“带子”,在 MathJax 中作为空格效果使用,因为在 \(\rm\TeX\) 中所有的空格和分行都将被忽略;
  • `、$ 作为数学公式的标记,其中`是与“~”位于同一个键位上,一般在左上角esc键下方那个键;
  • 空格符 在 \(\rm\TeX\) 中所有的空格和分行都将被忽略。所有的空格或是由数学表达式逻辑的衍生;
  • \ 作为\(\rm\TeX\) 命令的开始标记;

如果作为文本,在 \text 命令下,可以直接输入上述字符得到其本义效果;
但如果需要在公式中表达它,前面需加转义符“\”,比如:\(\texttip{\text{AB~CD^12_34 \# \% \& \_ \{ \}}}{in text mode} \) \(\texttip{\quad\color{Red}{vs.}\quad}{相同代码,不同模式,不同效果} \) \(\texttip{     {AB~CD^12_34 \# \% \& \_ \{ \}}}{in math mode}\)
比如说,在\(\rm\LaTeX\)公式里是忽略空格的,要想表达这个空格,在前面加转义符“\”即可。
不过“\”本身比较特殊,“\\”是作为换行符的,要表达单反斜杠,请用 \backslash \( \backslash \)
另,换行也可用 \cr\newline 命令。
如果在逻辑表达式中,\( \And \) 也可用 \And 表达,如 \( x=y \iff x \le y\ \And\ x \ge y \).


接下来,我们会介绍一些常用命令给大家。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-1-19 15:54:40 | 显示全部楼层
MathJax 浮动菜单

这一节本想放在最后讲的,但让大家提前了解将有助于接下来的学习。

在 \( \rm\LaTeX \) 公式上点鼠标右键,会弹出一个浮动菜单,里面的功能非常有用。
比如在上帖进行如下图的操作,将会弹出一个窗口,显示该公式的LaTeX源码,只是不包括两端的标记符而已。

MathJax 的浮动菜单

MathJax 的浮动菜单

通过这种方式,你可以很快“偷学”到眼前的 \( \rm\LaTeX \) 公式源码。
如果对方的代码是以 $...$ 形式产生的(不推荐大家这么写),那么最后一级菜单将由上面的“ TeX Commands ”自动切换成“ AsciiMath Input ”。

这个是怎么做到的: \( \texttip{\color{Magenta}{a + \rlap{\overbrace{\phantom{b+c+d}}^m} b+ \underbrace{c+d+e}_n + f}}{什么代码?右键可看答案。。。} \) ?揣摩一下,不清楚的话请按上面的方法看看答案吧。

一级菜单里还有“Language”,可以即时将菜单文字切换成自己熟悉的语言,包括咱们熟悉的简体中文。

除了上面非常有用的查看源码功能外,
还可设定缩放功能:可对全页面的数学公式设定比例缩放,也可设定对当前公式缩放,
甚至还可以定制缩放规则,比如说,你可以设定双击自动放大到 2 倍,或者悬停即可放大到 150%.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-1-19 16:42:09 | 显示全部楼层
常用命令

  • 小写希腊字母:
    \alpha \( \alpha \) \beta \( \beta \) \gamma \( \gamma \) \delta \( \delta \) \epsilon \( \epsilon\) \zeta \( \zeta\) \eta \( \eta \) \theta \( \theta \) \iota \( \iota \) \kappa \( \kappa \) \lambda \( \lambda \) \mu \( \mu \) \nu \( \nu \) \xi \( \xi \) \omicron \( \omicron \) \pi \( \pi \) \rho \( \rho \) \sigma \( \sigma \) \tau \( \tau \) \upsilon \( \upsilon \) \phi \( \phi \) \chi \( \chi \) \psi \( \psi \) \omega \( \omega\)
    \varepsilon \( \varepsilon\) \vartheta \( \vartheta \) \varkappa \( \varkappa \) \varpi \( \varpi \) \varrho \( \varrho \) \varsigma \( \varsigma \) \varphi \( \varphi \) \digamma \( \digamma \)

  • 大写希腊字母:
    \Gamma \( \Gamma \) \Delta \( \Delta \) \Theta \( \Theta \) \Lambda \( \Lambda \) \Xi \( \Xi \) \Pi \( \Pi \) \Sigma \( \Sigma \) \Upsilon \( \Upsilon \) \Phi \( \Phi \) \Psi \( \Psi \) \Omega \( \Omega\)
    \varGamma \( \varGamma \) \varDelta \( \varDelta \) \varTheta \( \varTheta \) \varLambda \( \varLambda \) \varXi \( \varXi \) \varPi \( \varPi \) \varSigma \( \varSigma \) \varUpsilon \( \varUpsilon \) \varPhi \( \varPhi \) \varPsi \( \varPsi \) \varOmega \( \varOmega\)
    将对应的首字母大写即可;未罗列的表明 \(\rm\TeX\) 未定义(其实也没人这么去用它);
    还需注意:\Sigma \( \Sigma \) 常用来表示累加(更推荐的是 \sum \( \sum \));\Pi \( \Pi \) 常用来表示累积(更推荐的是 \prod \( \prod \));

  • 常用二元关系符:
    < or \lt \( \lt \) \le or \leq \( \leq \) \leqslant \( \leqslant \)
    > or \gt \( \gt \) \ge or \geq \( \geq \) \geqslant \( \geqslant \)
    = \( = \) \neq or \ne \( \neq \)  \equiv \( \equiv \) \mid \( \mid \) \nmid \( \nmid \) \approx \( \approx \) \sim \( \sim \) \cong \( \cong \)
    \in \( \in \) \notin \( \notin \) \ni \( \ni \) \subset \( \subset \) \supset \( \supset \) \subseteq \( \subseteq \) \supseteq \( \supseteq \)
    你可以在上述命令的前面加上 \not 来得到其否定形式,如:\not \equiv \( \not \equiv \)

  • 常用二元运算符:
    + \( + \) - \( - \) \times \( \times \) \div \( \div \) \setminus \( \setminus \) \pm \( \pm \) \mp \( \mp \)
    \*\({^{\color{Red}{\text{[注]}}}}\) or \cdot \( \cdot \) * or \ast \( \ast \) \star \( \star \) \bullet \( \bullet \) \circ \( \circ \) \diamond \( \diamond \)
    \oplus \( \oplus \) \ominus \( \ominus \) \otimes \( \otimes \) \oslash \( \oslash \) \odot \( \odot \) \bigoplus \( \bigoplus \) \bigotimes \( \bigotimes \) \bigodot \( \bigodot \)
    \vee \( \vee \) \wedge \( \wedge \) \bigvee \( \bigvee \) \bigwedge \( \bigwedge \)
    \cup \( \cup \) \cap \( \cap \) \bigcup \( \bigcup \) \bigcap \( \bigcap \)

  • 箭头:
    \leftarrow or \gets \( \leftarrow  \) \rightarrow or \to \( \rightarrow \) \leftrightarrow \( \leftrightarrow \)
    \Leftarrow \( \Leftarrow  \) \Rightarrow \( \Rightarrow \) \Leftrightarrow \( \Leftrightarrow \)
    \longleftarrow \( \longleftarrow  \) \longrightarrow \( \longrightarrow \) \longleftrightarrow \( \longleftrightarrow \)
    \Longleftarrow \( \Longleftarrow  \) \Longrightarrow \( \Longrightarrow \) \Longleftrightarrow \( \Longleftrightarrow \)
    \uparrow \( \uparrow \) \downarrow \( \downarrow \) \updownarrow \( \updownarrow \)  % 可作为非括号定界符
    \Uparrow \( \Uparrow \) \Downarrow \( \Downarrow \) \Updownarrow \( \Updownarrow \) % 可作为非括号定界符
    \rightharpoonup \( \rightharpoonup \) \rightharpoondown \( \rightharpoondown \) \leftharpoonup \( \leftharpoonup \) \leftharpoondown \( \leftharpoondown \)
    \upharpoonright \( \upharpoonright \) \downharpoonright \( \downharpoonright \) \upharpoonleft \( \upharpoonleft \) \downharpoonleft \( \downharpoonleft \)
    \nearrow \( \nearrow \) \searrow \( \searrow \) \swarrow \( \swarrow \) \nwarrow \( \nwarrow \)
    \rightleftharpoons \( \rightleftharpoons \) \leftrightsquigarrow \( \leftrightsquigarrow \)
    \nleftarrow \( \nleftarrow \) \nleftrightarrow \( \nleftrightarrow \) \nrightarrow \( \nrightarrow \)
    \nLeftarrow \( \nLeftarrow \) \nLeftrightarrow \( \nLeftrightarrow \) \nRightarrow \( \nRightarrow \)
    注意命令以long为前缀表示长箭头,及首字母大小写的区别。
    在逻辑推理中,推荐用 \implies 表示 \( \implies \);推荐用 \impliedby 表示 \( \impliedby \);推荐用 \iff 表示 \( \iff \);因为符号两边会比单纯的箭头符多留出一点空白;

  • 定界符:
    ( \( (  \) ) \( ) \)
    [ or \lbrack \( \lbrack  \) ] or \rbrack \( \rbrack \) \lfloor \( \lfloor \) \rfloor \( \rfloor \) \lceil \( \lceil \) \rceil \( \rceil \)
    \{ or \lbrace \( \lbrace  \) \} or \rbrace \( \rbrace \) % 仅花括号前必须加转义符 \
    < or \langle \( \langle  \) > or \rangle \( \rangle \)
    / \( /  \) \backslash \( \backslash \) | or \vert \( \vert \) \|~or~\Vert \( \Vert \)
    定界符可成对使用 \left\right 命令(中间的定界符还可配合用 \middle 命令修饰),可实现按需要自动改变大小(即外围的自动变大);
    \left\right 命令必须在同一行配对,但用来配对的定界符并不需要与原来的是同一种括号,甚至可以使用一个句点 . 表示空的定界符(比如用在列方程组时)。

  • 其它符号:
    \spadesuit \( \spadesuit \) \heartsuit \( \heartsuit \) \clubsuit \( \clubsuit \) \diamondsuit \( \diamondsuit \) \bigstar \( \bigstar \)
    \oint \( \oint \) \int \( \int \) \iint \( \iint \) \iiint \( \iiint \) \iiiint \( \iiiint \) \dif \( \dif^{\color{Red}{\text{[注]}}} \) \partial \( \partial \) \nabla \( \nabla \)
    \because \( \because \) \therefore \( \therefore \) \ldots \( \ldots  \) \cdots \( \cdots \) \vdots \( \vdots \) \ddots \( \ddots \) \iddots \( \iddots^{\color{Red}{\text{[注]}}} \)
    \infty \( \infty \) \propto \( \propto \) \hbar \( \hbar  \) \imath \( \imath \) \jmath \( \jmath \) \ell \( \ell \) \Re \( \Re \) \Im \( \Im \) \aleph \( \aleph \) \wp \( \wp \)
    \forall \( \forall \) \exists \( \exists \) \lnot \( \lnot \) \lor \( \lor \) \land \( \land \) \varnothing \( \varnothing \) % 任意、存在、非、或、且、空集
    \odot \( \odot \) \square \( \square  \) \triangle \( \triangle  \) % 圆、方、三角形
    \parallel \( \parallel \) \nparallel \( \nparallel \) \varparallel \( \varparallel^{\color{Red}{\text{[注]}}} \) \pqd \( \pqd^{\color{Red}{\text{[注]}}} \) \perp \( \perp \) % 平行、不平行、平行(斜体)、平行且相等、垂直 
    \angle \( \angle \) \measuredangle \( \measuredangle \) \sphericalangle \( \sphericalangle \) % 角
    [注]:这是本论坛自定义的命令。

  • 常用数学结构:
    \( \begin{array}{rlcrlcrl} \newcommand\Code[1]{\color{rgb(68,68,68)}{\verb"#1"} & #1}
    \Code{\frac{abc}{xyz}} && \Code{\overline{abc}} && \Code{\overrightarrow{abc}}\\
    \Code{f'} && \Code{\underline{abc}} && \Code{\overleftarrow{abc}}\\
    \Code{\sqrt{abc}} && \Code{\widehat{abc}} && \Code{\overbrace{abc}}\\
    \Code{\sqrt[n]{abc}} && \Code{\widetilde{abc}} && \Code{\underbrace{abc}}\\
    \end{array} \)
    注意:撇 ' 由右单引号键打出(台式机键盘在分号右面,必须要在纯英文状态下输入),二阶就打两撇,而不是打双引号,三阶就三撇,如此类推;
    开方也可用这种形式表达:\root n \of {abc}  \( \root \color{red}{n} \of {abc} %特意用红色突出显示 \)

  • 标准数学函数:
    \( \begin{array}{rlcrlcrlcrl} \newcommand\StdFun[1]{#1 & \color{rgb(68,68,68)}{\textit{#1}}}
    \StdFun{\arccos} && \StdFun{\arcsin} && \StdFun{\arctan} && \StdFun{\arg}\\
    \StdFun{\cos} && \StdFun{\cosh} && \StdFun{\cot} && \StdFun{\coth}\\
    \StdFun{\csc} && \StdFun{\deg} && \StdFun{\det} && \StdFun{\dim}\\
    \StdFun{\exp} && \StdFun{\gcd} && \StdFun{\hom} && \StdFun{\inf}\\
    \StdFun{\ker} && \StdFun{\lg} && \StdFun{\lim} && \StdFun{\liminf}\\
    \StdFun{\limsup} && \StdFun{\ln} && \StdFun{\log} && \StdFun{\max}\\
    \StdFun{\min} && \StdFun{\Pr} && \StdFun{\sec} && \StdFun{\sin}\\
    \StdFun{\sinh} && \StdFun{\sup} && \StdFun{\tan} && \StdFun{\tanh}\\
    \end{array} \)
    数学函数一般用直立的Roman体排印,而普通字母一般用Italic字体(上表中左边是函数名,右边是命令代码),
    所以,需在其对应函数名(注意区分大小写)前加上\( \backslash \),否则渲染成就如同右侧的斜体效果(这是不正确的!);
    很奇怪,同余函数 mod 居然没收录在上面,但也需遵循上述规则:36\equiv5\mod{31} \( 36\equiv5\mod{31} \)
    还可以用命令 \pmod 自动加上圆括号,例如:36\equiv5\pmod{31} \( 36\equiv5\color{Red}{\pmod{31}} \)

评分

参与人数 1威望 +12 金币 +12 贡献 +12 经验 +12 鲜花 +12 收起 理由
wayne + 12 + 12 + 12 + 12 + 12 very nice !

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-1-27 17:06:04 | 显示全部楼层
数学标点与数学间距

\( \begin{array}{ccc}
\hline
\textbf{名称} & \textbf{命\(\quad\)令} & \textbf{示\(\qquad\)例}\\
\hline
\text{逗号} & , & f(x,y,z)=x+y+z\\
\text{分号} & ; & P(a;m,n)=P(b;m,n)\\
\text{叹号} & ! & P_n^m=n!/(n-m)!\\
\text{问号} & ? & x^2=1,~x=\pm1?\\
\text{冒号} & \verb"\colon" & f \colon x \mapsto x^2\\
\hline
\end{array} \)
注意逗号符,它在前面一般不留间距,后侧留有小的间距,比如:1,234,567 得到是 \( 1,234,567 \);
请对比:1\mathord{,}234\mathord{,}567 得到是 \( 1\mathord{,}234\mathord{,}567 \),或者  \text{1,234,567} \( \text{1,234,567} \) .

需要特别说明的数学标点中的冒号,用 \colon 可使两侧间距比通常的冒号更紧凑。
直接从键盘上输入“:” 得到的是二元关系符,两侧的间距比较大,多用于比例,如:  \( a:b=ac:bc \)
两个关系符在一起,中间没有间距,比如用 f(x):=x^2 可得到 \( f(x):=x^2 \)
可以使用 \mathpunct 命令把一个符号看作数学标点,比如 \colon 等价于 \mathpunct{:}

省略号并不属于 \( \rm\TeX\) 的数学标点类型,但却是公式中常用的标点符号。
\ldots 位置比较低,主要用在逗号之间,如  \( ( 1,2,\ldots,n ) \) ;
\cdots 位置在中间,主要用在二元运算符、关系符之间,如  \( 1+\cdots+n \);或者没有乘号的连乘积,如 \( a_1\cdots a_n \);或者连接多个积分符,如  \( \int_0^1\cdots\int_0^1 \).
也可统一用命令 \dots,在多数情况下会自动识别各种情况,如上面的: \( ( 1,2,\dots,n ) \quad 1+\dots+n \quad a_1\dots a_n \quad \int_0^1\dots\int_0^1 \quad a=\dots=z \)

说完数学标点,我们来说间距控制,这里仅讲如何控制水平间距。
\quad 可以得到 \(1{\rm\,em}\) 的间距,其中“\(\rm em\)”是 \( \rm\TeX\) 长度单位的一种,相当于当前字体大写字母“\(\rm M\)”的宽度(“\(\rm ex\)”则是当前字体小写字母“\(\rm x\)”的高度);
\qquad 可以得到 \(2{\rm\,em}\) 的间距;用 \enspace 可以得到 \(0.5{\rm\,em}\) 的间距;
上面主要用于文本间距控制,数学间距有其专门的单位,记为 \(\text{mu}\)(math unit), \(1{\rm\,mu}=\sfrac{1}{18}{\rm\,em}\)
\( \begin{array}{|c|r|c|}
\hline
\textbf{间距符} & \textbf{间\(\quad\)距} & \textbf{示\(\qquad\)例}\\
\hline
\text{(无)} & & abababab\\
\verb"\," & 3{\rm\,mu} & a\,b\,a\,b\,a\,b\,a\,b\\
\verb"\: or \>" & 4{\rm\,mu} & a\:b\:a\:b\:a\:b\:a\:b\\
\verb"\;" & 5{\rm\,mu} & a\;b\;a\;b\;a\;b\;a\;b\\
\verb"\!" & -3{\rm\,mu} & a\!b\!a\!b\!a\!b\!a\!b\\
\hline
\end{array} \)
其中,利用 \rm I\!R 可用来得到  \( \rm I\!R \)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-2-5 12:00:35 | 显示全部楼层
环境

注意到 5#、6# 的表格了吗?对齐等做得多漂亮啊!大家可以用 4# 介绍的方法查看其对应的 \(\rm\TeX\) 命令。
然后,将会发现有 \begin{XXX} ... \end{XXX} 样式的代码,这就是在 3# 提前预告的“环境”。

在数学公式中,环境主要用于对齐编号引用等高级排版中。

先来介绍矩阵(matrix)环境:不同的列用符号 & 分隔,行用 \\ 分隔,矩阵每列元素居中对齐,例如:
  1. \[ A = \begin{pmatrix}
  2. a_{11} & \dots & a_{1n} \\
  3. & \ddots & \vdots \\
  4. 0 && a_{mn}
  5. \end{pmatrix}_{m \times n } \]
复制代码
\[\implies\]\[ A = \begin{pmatrix}
a_{11} & \dots & a_{1n} \\
& \ddots & \vdots \\
0 && a_{mn}
\end{pmatrix}_{m \times n } \]

矩阵外面不同的括号,取决于不同的矩阵环境:
matrix 环境:
\[ \begin{matrix}
aaa & b\\
c & ddd
\end{matrix} \]
bmatrix 环境:
\[ \begin{bmatrix}
aaa & b\\
c & ddd
\end{bmatrix} \]
vmatrix 环境:
\[ \begin{vmatrix}
aaa & b\\
c & ddd
\end{vmatrix} \]
pmatrix 环境:
\[ \begin{pmatrix}
aaa & b\\
c & ddd
\end{pmatrix} \]
Bmatrix 环境:
\[ \begin{Bmatrix}
aaa & b\\
c & ddd
\end{Bmatrix} \]
Vmatrix 环境:
\[ \begin{Vmatrix}
aaa & b\\
c & ddd
\end{Vmatrix} \]

还有 smallmatrix 环境,可用于排版小号的矩阵,多用于行内公式中,
其外围括号需要自己加,如: \left\langle \begin{smallmatrix}aaa & b\\c & ddd\end{smallmatrix} \right\rangle  \( \left< \begin{smallmatrix}
aaa & b\\
c & ddd
\end{smallmatrix} \right> \)

cases 环境,可用于排版分段函数,每行公式中用 & 分隔值和条件,如:\[ \begin{equation}\label{Dirichlet}D(x)=\begin{cases}
1, & \text{ if } x \in \mathbb{Q}\\
0, & \text{ if } x \in \mathbb{R} \setminus \mathbb{Q}
\end{cases}\end{equation} \]注意,它是左对齐的。

接下来,我们介绍阵列(array)环境,其格式为:\begin{array}{<justification info>} ... \end{array}
其功能比上面的矩阵环境更强,因为可以指定每一列的对齐方式:“lcr” 分别对应于 左对齐、居中对齐、右对齐;
与矩阵环境规则相同:不同的列用符号 & 分隔,行用 \\ 分隔;
如果添加表格竖线,可在 <justification info> 字符串里相应位置加上字符 “|” 即可;横线则有 \hline 命令。表格线都不占表项计数。
请看示例效果:\( \begin{array}{|r|c|l|}
\hline \text{居右}(r)&\text{居中}(c)&\text{居左}(\ell)\\
\hline \rightarrowtail&\star&\leftarrowtail\\
\hdashline bbs.&emath.&ac.cn\\
\hdashline 0123456789&\maltese&ABCDEF\\
\hline \end{array}
\quad \color{green}{\text{% 欢迎右键查看}\rm\TeX\text{命令源码}} \)

subarray 环境,用于求和或求积的多行上下限,并可如 array 环境那样指定对齐方式,如:
  1. \[ \prod_{\begin{subarray}{rcl}
  2. i \lt 5 &\quad& j \gt 1 \\
  3. k \ge 2,\, k \ne 5 && \ell \le 5,\, \ell \ne 2
  4. \end{subarray}}
  5. x_{ijk\ell} \]
复制代码
\[\implies\]\[ \prod_{\begin{subarray}{rcl}
i \lt 5 &\quad& j \gt 1 \\
k \ge 2,\, k \ne 5 && \ell \le 5,\, \ell \ne 2
\end{subarray}}
x_{ijk\ell} \]


接下来,是精彩部分,我们将介绍多行(或同时又多列)公式的对齐、编号及引用等功能。
这就是 align* 环境align 环境aligned 环境
它们分别是对齐、对齐且各行编号、对齐且整体编号。下面将依次讲解。
  1. \[ \begin{align*}
  2. a &= bbb & bbb &= c & c &= d \\
  3. aaa &= bb & bb &= ccc & ccc &= ddd
  4. \end{align*} \]
复制代码
\[\implies\]\[ \begin{align*}
a &= bbb & bbb &= c & c &= d \\
aaa &= bb & bb &= ccc & ccc &= ddd
\end{align*} \]
注意:各行 & 符从左至右计数(基数为1),奇数序号的表示多列公式对齐处(可看作是块“磁石”),偶数序号的表示列间公式分组处(可看作是堵“墙”)。
充分利用上述规则,我们可以排版内部左对齐或右对齐的公式(需要仔细揣摩一下):
  1. \[ \begin{align*}
  2. &a &&= bbbbbb &&= cc &&= d \\
  3. &aaa &&= bbbb &&= cccccc &&= ddd
  4. \end{align*} \]
复制代码
  1. \[ \begin{align*}
  2. a &=& bbbbbb &=& cc &=& d \\
  3. aaa &=& bbbb &=& cccccc &=& ddd
  4. \end{align*} \]
复制代码
\( \leftarrowtail \text{左对齐} \Downarrow \)
\( \Downarrow \text{右对齐} \rightarrowtail\)
\[ \begin{align*}
&a &&= bbbbbb &&= cc &&= d \\
&aaa &&= bbbb &&= cccccc &&= ddd
\end{align*} \]
\[ \begin{align*}
a &=& bbbbbb &=& cc &=& d \\
aaa &=& bbbb &=& cccccc &=& ddd
\end{align*} \]
一般地,用于对齐的 & 符应该放在二元关系符二元运算符前面,才能保证正确的符号间距。

在对齐排版中,偶尔需要借助幻影(phantom)技术。有命令 \phantom、\hphantom、\vphantom
\phantom{参数} 将产生与“参数”内容一样大小的空盒子幻影,后两个则分别产生水平方向和垂直方向的幻影(在另一方向上大小为零)。
  1. \[ \begin{align}
  2. &\mathrel{\phantom{=}}(a+b)(a^2-ab+b^2) \\
  3. &= a^3-a^2b+ab^2 + a^2b-ab^2+b^2 \notag \\
  4. &= a^3+b^3 \label{eq:cubesum}
  5. \end{align} \]
复制代码
\[\implies\]\[ \begin{align}
&\mathrel{\phantom{=}}(a+b)(a^2-ab+b^2) \\
&= a^3-a^2b+ab^2 + a^2b-ab^2+b^2 \notag \\
&= a^3+b^3 \label{eq:cubesum}
\end{align} \]
可以看到,公式在等号处对齐了,但首行没有等号,我们“创造”了一个二元关系符“=”的幻影。

上面用的是 align 环境,可对每一行公式进行编号;
但第二行怎么没有编号呢?因为我们在该行行尾加了条 \notag 命令。
起始编号为什么不是从(1)开始呢?因为它已被上面的狄利克雷(Dirichlet)函数 \eqref{Dirichlet} 用了;
请注意,上面还有一个 \label 命令,它将方便引用,现在要引用第三行的编号,只要输入 \eqref{eq:cubesum} 即得 \eqref{eq:cubesum}(可无需加math公式标签符)。
如果前面突然增加或减少一些公式的编号,标签处编号数字变化时引用显示也跟着自动变更(除非编号人工设定,下面将介绍),
但引用处无需作修改,因为标签本身并没有改变;而且支持点击引用可跳转到标签处,大家可以试试(注意:需在同一个 HTML 页面下)。

如果将多行公式看作一个“公式块”整体进行编号,则可用 aligned 环境
  1. \[ \begin{aligned}
  2. 3^2 + 4^2 &= 5^2 \\
  3. 3^3 + 4^3 + 5^3 &= 6^3
  4. \end{aligned}\label{eq:23}\tag{eq:23}\]
复制代码
\[\implies\]\[ \begin{aligned}
3^2 + 4^2 &= 5^2 \\
3^3 + 4^3 + 5^3 &= 6^3
\end{aligned}\label{eq:23}\tag{eq:23}\]
上述公式\eqref{eq:23}中,我特意没把 \( 1+2=3 \) 添加进去,这样仅剩两行可使大家更容易看出编号是上下居中的。
顺带学习新命令 \tag、\tag*:它们可进行手工编号,参数是text模式的,后者还可以去掉编号原有的圆括号,获得最大的灵活性。

对于超长的公式,论坛已设定可自动换行。也可用 split 环境在指定处拆分并对齐:
  1. \[ \begin{equation} \begin{split}
  2. x^4+4 &= x^4+4x^2+4 - 4x^2 \\
  3. &= (x^2+2)^2 - (2x)^2 \\
  4. &= (x^2-2x+2)(x^2+2x+2)
  5. \end{split} \end{equation} \]
复制代码
\[\implies\]\[ \begin{equation} \begin{split}
x^4+4 &= x^4+4x^2+4 - 4x^2 \\
&= (x^2+2)^2 - (2x)^2 \\
&= (x^2-2x+2)(x^2+2x+2)
\end{split} \end{equation} \]
split 环境align 环境的最大区别就是前者不产生编号,需要编号时则通过外包 equation 数学环境产生(如上例及上面的 Dirichlet 函数 \eqref{Dirichlet});
align 环境本身就是数学环境,它会给每一行公式产生一个编号(除非用命令 \notag 禁止)。

如果要对单个行间公式编号,可以用 equation 环境,引用方法同上。如:
  1. \[ \begin{equation*} \label{Euler}\tag*{[Euler]}
  2. e^{i\pi}+1=0
  3. \end{equation*} \]
复制代码
\[\implies\]\[ \begin{equation*} \label{Euler}\tag*{[Euler]}
e^{i\pi}+1=0
\end{equation*} \]
equation  环境 会自动编号(除非用命令 \notag 禁止);
equation* 环境不会自动编号,但用 \tag\tag*,即可手工编号(如上例;其实,手工编号可无需外包于 equation 环境或 equation* 环境里了)。
上述 \(\ref{Euler}\) 公式是数学里最令人着迷的一个公式,它将数学里最重要的几个数字联系到了一起。数学家们评价它是“上帝创造的公式”。
请注意,上面的引用外围没有出现圆括号,这是因为用的是 \ref{Euler} 命令。

点评

精彩! 你不提醒我们还以为是贴图过来的呢  发表于 2014-2-5 12:06
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-2-5 16:51:28 | 显示全部楼层
注意事项

  • 在帖子标题栏里,请勿使用数学公式,否则会导致论坛页面布局出现一丁点小问题(仅主题帖有此要求);

  • 经测试,IE8 兼容性较差,在其下渲染效果及速度欠佳(更高版本的 IE 则正常);如您有此困扰,请安装其它浏览器,如 Firefox,其表现堪称完美;

  • 在公式中,符号 \( \lt \) 或 \( \gt \) 需特别注意,请用对应的命令 \lt 与  \gt
    若直接键入“小于”(或“大于”)符,请在两侧各加一个空格,以防止 HTML 误判成标签的起止符(尽管 HTML 中不见得有此标签);

  • 在公式中,请勿输入 Tab 符或连续的空格,因为 HTML 对它们本是忽略的(\(\rm\LaTeX\) 对它们也是忽略的),但论坛为了达到“所见即所得”效果,会将连续的空格等转化成“&nbsp;”字串,也同样导致数学公式里会出现相应的空白;

  • 上下标(统称“角标”)的输入与顺序无关;如果角标看起来不明显,可以加 \( \{\} \) 增大角标层次,如:\( x_1\;x_{_1}\quad y_M\;y_{_M} \);

  • 定界符(delimiter),可以用 \left\right(及\middle)命令,使其按中间内容的高度自动调整大小。
    但 \(\rm\TeX\) 并不总能自动得到合适的定界符大小,此时可用 \big、\Big、\bigg、\Bigg 命令(无需成对出现)指定放大到不同的尺寸:\[\text{手工调整定界符的大小}\\
    \begin{array}{llllccc}\hline
    \color{#444}{\text{正常}} &&&& (~|~) & [~~\|~~] & \{~~\} \cr\hline
    \color{#444}{\verb"\big"} & \color{#444}{\verb"\bigl"} & \color{#444}{\verb"\bigr"} & \color{#444}{\verb"\bigm"} & \big(~\big|~\big) & \bigl[~\bigm\|~\bigr] & \bigl\{~~\bigr\} \\
    \color{#444}{\verb"\Big"} & \color{#444}{\verb"\Bigl"} & \color{#444}{\verb"\Bigr"} & \color{#444}{\verb"\Bigm"} & \Big(~\Big|~\Big) & \Bigl[~\Bigm\|~\Bigr] & \Bigl\{~~\Bigr\} \\
    \color{#444}{\verb"\bigg"} & \color{#444}{\verb"\biggl"} & \color{#444}{\verb"\biggr"} & \color{#444}{\verb"\biggm"} & \bigg(~\bigg|~\bigg) & \biggl[~\biggm\|~\biggr] & \biggl\{~~\biggr\} \\
    \color{#444}{\verb"\Bigg"} & \color{#444}{\verb"\Biggl"} & \color{#444}{\verb"\Biggr"} & \color{#444}{\verb"\Biggm"} & \Bigg(~\Bigg|~\Bigg) & \Biggl[~\Biggm\|~\Biggr] & \Biggl\{~~\Biggr\} \\
    \hline\end{array}\]
  • 本论坛自定义了一些命令,以方便大家使用(部分是标准的 \(\AmS\!-\!\rm\LaTeX\) 命令,只是 MathJax 暂未直接支持):
    • \AmS:美国数学会(American Mathematical Society, AMS)的 logo:\( \AmS \);
    • \D:命令 \displaystyle 的等效简写;
    • \*:点乘符(等效于\cdot),如:\( a \times b=a*b=a\*b \);
    • \degree:度(°),如:\( 180\degree=\pi \);
    • \sslash、\varparallel:斜体的平行符,但后者作为“二元关系符”两侧会适当留白(前者则不会),如:\( AB \parallel CD \sslash EF \varparallel GH \);
    • \pqd:平行且相等,如:\( AB \pqd CD \);
    • \dif:微分算子d,如:\( \iiint\limits_{0<x,y,z<1}f(x,y,z)\dif x\,\mathrm{d}y\dif z \);
    • \oo:无穷大,源于 ASCIIMathML 简写法,如:\( x \in \left[\dfrac12,+\oo\right) \);
    • \NN、\ZZ、\QQ、\RR、\CC:数集,同样源于 ASCIIMathML 简写法,如:\( \ZZ^+ \subseteq \NN \subset \QQ \subset \RR \subset \CC \);
    • \abs:绝对值(高度可自适应),用法是 \abs #1(带 \( 1 \) 个参数),如:\( \abs{-a}-\abs{\dfrac a2}=\sfrac{\abs a}2 \);
    • \sfrac:斜排的分数(高度可自适应),用法是 \sfrac #1#2(带 \( 2 \) 个参数),如:\( 3\times\sfrac12=1\,\sfrac12\), \(\quad \texttip{\left[\sfrac{(n^2-1)}{(n-1)} \right]-1=n}{注意:适当添加括号,以免被误读} \),适用于(行内)比较简单的分数或分子分母超长会导致自动换行的情形(注:分数命令比较丰富,除了 \frac 外,还有 \dfrac、\tfrac、\cfrac 等);

  • 鉴于 MathJax 的强大,许多专业软件也逐渐支持它,比如著名的数学公式编辑器 MathType,如果要借助它排版,推荐大家进行如下设置:

    推荐大家设置为:AMSLaTeX

    推荐大家设置为:AMSLaTeX
    虽然最新的版本(当前为 V6.9)里已支持转换成 MathJax 代码的功能(从上图最下面的下拉框里可选择“ MathJax:LaTeX ”),但经测试,它略滞后于当前 MathJax 的最新版本,常会误报警,比如说不支持“\(\multimap\)”对应的命令,而其实是支持的;MathJax 虽说是 \(\rm\LaTeX\),但更偏向于 \(\AmS\!-\!\rm\LaTeX\),所以更推荐大家选择“ AMSLaTeX ”而不是“ LaTeX 2.09 and later ”;还有,最好把下面两个勾选框都取消。最后,还是建议大家最好是尽量手工键入,以便获得更随心所欲的效果;

  • 请多多善用 MathJax 浮动菜单,在学习他人的代码中迅速提高自己(4# 中有介绍);

  • [code](代码标签)下将直接显示文本源代码(不渲染成数学公式);
    本论坛还自定义了[text]标签,适合行内显示文本源代码的情形(还可以用命令 \verb,但默认显示为蓝色的);

  • 大家在发帖前,可利用页底的代码预览功能,看看是否是自己所需的,可反复修改调整,直至满意为止(这也是我为什么要先开发它后写教程的原因);

  • 整理这篇帮助教程,参考了许多网站和电子书籍,甚至特意买了本最近出版的《\(\rm\LaTeX\)入门》(刘海洋编著),
    不过,参考最多的还是与 MathJax 本身相关的文档,强烈推荐大家将《查阅 MathJax 支持的 TeX 命令列表》(612 KB)下载到本地随手翻阅,
    里面的内容已提取了重点介绍给大家(但这份文档也略滞后于 MathJax 版本,上面的部分介绍并不全源自其中)。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2018-7-21 01:46 , Processed in 0.062660 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表