gxqcn 发表于 2014-1-5 18:49:41

善用 LaTeX 排版 数学公式



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

注:“LaTeX”字符本可用其自身命令显示出其 Logo \( \rm \LaTeX \) 的,怎奈论坛标题里若出现数学公式,会导致页面布局出现一丁点小问题,所以作罢。精心整理的TeX教程,适用范围不仅仅是本论坛
(在本论坛学到的语法,可以带走,用在论坛之外)

前言


早在 6 年前,本论坛采用 ASCIIMathML,仅通过简单的文本输入,即完成了复杂的数学公式排版,
这可以让作者在发帖时思路不至于被打断(因无需截图),还有助于再次编辑修改,
且阅读者也可以非常直观的阅读到公式及原始代码,对搜索引擎也是非常友好的。

去年,国内外曾发生了一些大事;
咱们论坛也发生一些大事:比如从免费空间迁移至收费空间、从 7.0 升级到 X3.1 等。
因为之前有太多的不可控,比如之前辛辛苦苦整理的 LaTeX 教程,不知何时却消失得无影无踪!

几年间,大家的电脑环境也发生很大变化,
不再是 XP 一统天下,IE8.0 也早已过时了,
而先前需要的 MathPlayer 与当前最新的 IE11 也存在兼容性问题了,
这也是导致我迟迟未动手去复原那份教程的原因之一。

日历翻开了新的一页——2014 年来到了,
新年到了,论坛也应有点新气象,
所以决定近期集中精力将那份教程给复原回来,于是在网上狂收集资料。

然后就发现,有了更好更标准的、支持通过文本输入,再将对应的数学公式“完美”渲染给客户的方法,
于是,经过几天的学习及测试(主要是测试与旧帖的兼容性),于昨晚正式启用新方案——MathJax。
以前曾安装过 MathPlayer 的,现在可以卸载了,因为新方案是无需客户安装任何插件的。


名词解释


[*]TeX
  \(\rm\TeX\) 是由著名的计算机科学家 Donald E. Knuth(高德纳)发明的排版系统,利用 TeX 很一很容易的生成高质量的 dvi 文件,打印输出。利用 dvips,dvipdfmx,pdflatex 等程序生成 pdf,ps 文件,latexhtml 生成 html 文件。 它在学术界十分流行,特别是数学、物理学和计算机科学界。TeX 被普遍认为是一个很好的排版工具,特别是在处理复杂的数学公式时。利用诸如是 LaTeX 等终端软件,TeX 就能够排版出精美的文本。


[*]LaTeX
  \(\rm\LaTeX\)(音译“拉泰赫”)是一种基于 TeX 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。这个系统同样适用于生成从简单的信件到完整书籍的所有其他种类的文档。


[*]MathML
  MathML 即数学置标语言。数学标记语言,是一种基于 XML(标准通用标记语言的子集)的标准,用来在互联网上书写数学符号和公式的置标语言。

  由于数学符号和公式的结构复杂且符号与符号之间存在多种逻辑关系,MathML 的格式十分繁琐。因此,大多数人都不会去手写 MathML,而是利用其它的工具来编写,其中包括 TeX 到 MathML 的转换器。在现在几个主要的网页浏览器中,最新版的 Mozilla、Mozilla Firefox 和 Netscape Navigator 都已经对 MathML 提供直接的支持。微软的 Internet Explorer 在安装了 MathPlayer 插件后也可以识别 MathML。此外,MathML 还得到了一些办公软件的支持,如 openoffice .org 和 Microsoft Office。

  MathML 是受 XML 的启发在万维网联盟数学工作组的具体组织下产生的,作为 XML 定义的一种应用,它用标记的形式来表示数学表达式。用 MathML 形式 来描述数学表达式,不仅可以明确地表达数学内容,而且可以在 Web 的其它应用程序中实现再利用和转换。MathML 标记的递归性和树状结构使得它在计算机程序的实现上更方便、简单。MathML 使用文本的形式来描述数学表达式的树形结构,克服了传统的 Web 中使用图片表达数学公式的缺点。


[*]ASCIIMathML
  ASCIIMathML.js 是一种将 ASCII 符号翻译成直观的 MathML(HTML 版本)的开源 JavaScript 脚本。

  您只要遵循简单的语法,用普通的 ASCII 字母和符号,就可以在网页上输入并显示出漂亮的数学公式。这些公式遵循 W3C 标准,目前在 Netscape7.1/Mozilla/Firefox 下可以直接观看,如果您用的是 Internet Explorer 和以之为内核的其它浏览器(如 Maxthon 或者 GreenBrowser 等),只需要下载一个 MathPlayer 插件。


[*]MathJax
  MathJax 是一个开源 JavaScript 库。它支持 LaTeX、MathML、AsciiMath 符号,可以运行于所有流行浏览器上。 它的设计目标是利用最新的 web 技术,构建一个支持 math 的 web 平台。支持主要的浏览器和操作系统,包括那些移动设备。 对大部分用户而言它不需要安装,即没有插件需要下载也没有软件需要安装,所以网页作者可以编写包含数学公式的页面并有信心可以自然而容易的浏览到它们。 只需要在页面中包含 MathJax 脚本和一些数学公式,其他的事情交给 MathJax 来处理吧。

  MathJax 使用网络字体(大部分浏览器都支持)去产生高质量的排版,使其在所有分辨率都可缩放和显示,这远比使用包含公式的图片要有效得多。 MathJax 也可以用于屏幕阅读器,让视力受损者也可以使用。

  使用 MathJax 显示数学公式是基于文本的,而非图片。它可以被搜索引擎使用,这意味着方程式和页面上的文字一样是可以被搜索的。 MathJax 允许页面作者使用 TeX、LaTeX 符号和 MathML 或者 AsciiMath 去书写公式。MathJax 甚至可以将TeX 格式转化为 MathML 格式,使其可以被原生支持 MathML 格式的浏览器更多的渲染。转化为 MathML 格式后你可以复制粘贴它们到其他程序中。

  MathJax 是模块化的,所以它仅仅在需要时才加载它的组件,同时也可以被扩展以实现更多功能。 MathJax 同时也是高度可配置的,允许作者作出更适宜网站自身的自定义。 最重要的,MathJax 的 API 可以让你在你的网页上动态的创建公式。


我们要介绍就是 MathJax,其官网是:http://www.mathjax.org/,感兴趣者可以去看看。
它可以很轻松地兼容我们先前采用的 ASCIIMathML 方案,又兼具其它的一些优点,这也是本论坛采用它的缘故。

gxqcn 发表于 2014-1-18 23:05:29

<font size="6"><strong>基本规则</strong></font><br />
<br />
在本节中,仅介绍在本论坛里是如何标记“\(\rm\LaTeX\)数学公式”的。<br />
<br />
本论坛自 2008 年 2 月起采用 ASCIIMathML 以完成复杂的数学公式排版,采用的是前后加美元符\$作为标记符;<br />
六年以来,已沉淀了大量的数学公式。<br />
前已述,之所以要切换到当前的方案,首先是满足了兼容性,<br />
所以 <font color="Blue"><code>$公式$</code></font> 仍继续有效,且语法规则基本不变,使老帖可以正常解析。<br />
至于 ASCIIMathML 的语法规则,并不多(老会员基本已知),<br />
但由于其规则过于简单、宽容(也可以说不够严谨不够规范),<br />
<font color="Red">现强烈<strong>不</strong>推荐</font>,本文也将不再重述,尽管大家仍可继续用它。。。<br />
<br />
如果要用更高级更严谨的 \(\rm\LaTeX\) 语法,建议大家采用如下方式标记:<div class="blockcode"><div id="code_q9M"><ol><li>如果大家要用严谨的LaTeX语言获得最佳的效果:<br />
<li>行内模式为:\( 公式 \)<br />
<li>行间模式为:\[ 公式 \]<br />
<li>这样非常好记(在下面的tool中可通过按图标按钮直接获得)。</ol></div><em onclick="copycode($('code_q9M'));">复制代码</em></div>相信大家,在熟悉了接下来介绍的规则及效果后,会迷上这种新方式的。<br /><br />
<script type="text/javascript">
if("undefined"==typeof(pwMode)){var pwMode=1;}
</script>
<script type="text/javascript" src="data/cache/preview.js">
</script>
<hr />
注:关于“\(\rm\LaTeX\)公式在线预览器”<ul>
<li>本论坛<font color="DarkOrange">行内公式</font>及<font color="DarkOrange">行间公式</font>的规则、效果,已作为 Demo 提示给大家(点击那个<img width="15" height="15" class="imgbtn" file="http://bbs.emath.ac.cn/static/image/common/seccodeplayer.gif" border="0" alt="" />按钮可以重现);
<li>可以在代码框直接输入需要的\(\rm\LaTeX\)代码,并可以点击相应的按钮快速标记。其中上面的<img width="21" height="15" class="imgbtn" file="http://bbs.emath.ac.cn/static/image/common/bb_TeX.gif" border="0" alt="" />按钮可以快速标记一段文字为行内公式或行间公式;
<li>如果大家要正常表达美元符$,请在其前加宏命令符反斜杠 <code>\</code> 即可;
<li>本贴上面的“ \(\rm\LaTeX\)公式在线预览器”,是左右对照版的,其宽度会随浏览器自动调整,但高度不会变;<br />
大家在发帖时,页底会自动出现公式预览,其中快速回复时采用左右栏模式,高级模式发帖时则采用上下栏模式。
<li>在本论坛里,设定了以下 HTML 标签里不转化成数学公式:<code>script,noscript,style,textarea,pre,code,ol</code>,而直接显示原始文本;特别地,将\(\rm\LaTeX\)代码放进[<code>code</code>]标签里,可以防止转成数学公式。也可点击新增的<img width="21" height="15" class="imgbtn" file="http://bbs.emath.ac.cn/static/image/common/bb_NTeX.gif" border="0" alt="" />图标按钮,形成[<code>text</code>]标签(但注意,标签内不得出现左中括号“<font color="Red">[</font>”,否则该标签会失效,这是自定义“Discuz! 代码”标签的通病)。
</ul>

gxqcn 发表于 2014-1-19 11:14:34

\(\rm\LaTeX\)的命令与环境,及基本符号

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

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

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

\(\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 \).


接下来,我们会介绍一些常用命令给大家。

gxqcn 发表于 2014-1-19 15:54:40

MathJax 浮动菜单

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

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

通过这种方式,你可以很快“偷学”到眼前的 \( \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%.

如果浏览器支持,建议通过右键菜单,设定 数学设置 » 数学渲染 » SVG,此模式显示效果非常好,
为了醒目起见,本论坛特意将 \( \rm\LaTeX \) 公式自动默认显示为 蓝色。

gxqcn 发表于 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{\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{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 & \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}} \)

gxqcn 发表于 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 \)

gxqcn 发表于 2014-2-5 12:00:35

环境

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

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

先来介绍矩阵(matrix)环境:不同的列用符号 & 分隔,行用 \\ 分隔,矩阵每列元素居中对齐,例如:
\[ A = \begin{pmatrix}
a_{11} & \dots & a_{1n} \\
& \ddots & \vdots \\
0 && a_{mn}
\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 环境那样指定对齐方式,如:
\[ \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} \]\[\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 环境,
它们分别是对齐、对齐且各行编号、对齐且整体编号。下面将依次讲解。
\[ \begin{align*}
a &= bbb & bbb &= c & c &= d \\
aaa &= bb & bb &= ccc & ccc &= ddd
\end{align*} \]\[\implies\]\[ \begin{align*}
a &= bbb & bbb &= c & c &= d \\
aaa &= bb & bb &= ccc & ccc &= ddd
\end{align*} \]注意:各行 & 符从左至右计数(基数为1),奇数序号的表示多列公式对齐处(可看作是块“磁石”),偶数序号的表示列间公式分组处(可看作是堵“墙”)。
充分利用上述规则,我们可以排版内部左对齐或右对齐的公式(需要仔细揣摩一下):\[ \begin{align*}
&a &&= bbbbbb &&= cc &&= d \\
&aaa &&= bbbb &&= cccccc &&= ddd
\end{align*} \]\[ \begin{align*}
a &=& bbbbbb &=& cc &=& d \\
aaa &=& bbbb &=& cccccc &=& ddd
\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{参数} 将产生与“参数”内容一样大小的空盒子幻影,后两个则分别产生水平方向和垂直方向的幻影(在另一方向上大小为零)。
\[ \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} \]\[\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 环境:\[ \begin{aligned}
3^2 + 4^2 &= 5^2 \\
3^3 + 4^3 + 5^3 &= 6^3
\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 环境在指定处拆分并对齐:\( \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} \)\[\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 环境,引用方法同上。如:\begin{equation*} \label{Euler}\tag*{}
e^{i\pi}+1=0
\end{equation*}\[\implies\]\begin{equation*} \label{Euler}\tag*{}
e^{i\pi}+1=0
\end{equation*}equation环境 会自动编号(除非用命令 \notag 禁止);
equation* 环境不会自动编号,但用 \tag 或 \tag*,即可手工编号(如上例;其实,手工编号可无需外包于 equation 环境或 equation* 环境里了)。
上述 \(\ref{Euler}\) 公式是数学里最令人着迷的一个公式,它将数学里最重要的几个数字联系到了一起。数学家们评价它是“上帝创造的公式”。
请注意,上面的引用外围没有出现圆括号,这是因为用的是 \ref{Euler} 命令。

gxqcn 发表于 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,如果要借助它排版,推荐大家进行如下设置:虽然最新的版本(当前为 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 版本,上面的部分介绍并不全源自其中)。

gxqcn 发表于 2021-7-12 14:18:08

查阅支持的TeX命令列表:
页: [1]
查看完整版本: 善用 LaTeX 排版 数学公式