4 Quarto 书稿中的公式与定理
这是第 4 章的内容, 讲述浮动对象定理与公式的标签与引用.
4.1 公式标签的设定与引用
QUarto
借助mathjax
(或katex
)处理数学公式的渲染; 尽管可通过联网由cdn
上的mathjax.js
进行渲染,但速度随因公式的增加,渲染变得很慢,甚至出错。mathjax
的本地化是提速的主要解决方案, 详见 附录 A 介绍;
4.1.1 {#eq-label}
标签
Quarto
中无论是单行公式还是多行公式,均通过公式无标号的公式环境(一对$$
)实现, 其后添加标签, 格式为 {#eq-label}
, 其中eq
是关键字,例如
$$
\left(k\right) = \binom{n}{k} p^k\left(1-p\right)^{n-k}
$$ {#eq-binom}
显示为单行公式 \[ f\left(k\right) = \binom{n}{k} p^k\left(1-p\right)^{n-k} \tag{4.1}\]
对于多行公式可以采用aligned
环境,但目前仅可对整个公式组设置标签,例如
$$
\begin{aligned}
g(X_{n}) &= g(\theta)+g'({\tilde{\theta}})(X_{n}-\theta) \notag \\
\sqrt{n}[g(X_{n})-g(\theta)] &= g'\left({\tilde{\theta}}\right)
\sqrt{n}[X_{n}-\theta ] (\#eq:align)
\end{aligned}
$$ {#eq-align}
显示为 \[ \begin{aligned} g(X_{n}) &= g(\theta)+g'({\tilde{\theta}})(X_{n}-\theta) \notag \\ \sqrt{n}[g(X_{n})-g(\theta)] &= g'\left({\tilde{\theta}}\right) \sqrt{n}[X_{n}-\theta ] \end{aligned} \tag{4.2}\]
在这种情形下, 公式的引用采用 @eq-label
, 例如上面的二个公式可引用为: 公式(4.1) 和 公式(4.2).
4.1.2 \label
标签
- 为了和LaTeX一样使用
\label
和\ref
或\eqref
去设定与引用公式标签,我们需要在上面创建的mathjax.html
文件中,添加如下脚本:
<script>
= {
MathJax tex: {
tags: 'ams', // should be 'ams', 'none', or 'all'
};
}</script>
- 我们可以将
equation
和aligned
环境结合起来输入多行公式,对整个公式组设置一个\label
,例如:
\begin{equation}
\begin{aligned}
g(X_{n}) &= g(\theta)+g'({\tilde{\theta}})(X_{n}-\theta)\\
\sqrt{n}[g(X_{n})-g(\theta)] &= g'\left({\tilde{\theta}}\right)
\sqrt{n}[X_{n}-\theta ]
\end{aligned}\label{eq-1}
\end{equation}
显示为
\[\begin{equation} \begin{aligned} g(X_{n}) &= g(\theta)+g'({\tilde{\theta}})(X_{n}-\theta)\\ \sqrt{n}[g(X_{n})-g(\theta)] &= g'\left({\tilde{\theta}}\right) \sqrt{n}[X_{n}-\theta ] \end{aligned}\label{eq-1} \end{equation}\]
- 我们还可以用
align
等环境输入多行公式,每行公式设置一个\label
,例如:
\begin{align}
a^n &= a\cdot a \cdot a \cdot \ldots \label{eq-2}\\
a^n &= p \label{eq-3}
\end{align}
显示为 \[\begin{align} a^n &= a\cdot a \cdot a \cdot \ldots \label{eq-2}\\ a^n &= p \label{eq-3} \end{align}\]
在这种情形下,我们可以用和 TeX 一样的方式来引用公式,引用方式为 \eqref{label}
,例如:公式 \(\eqref{eq-1}\) 和 \(\eqref{eq-3}\).
{#eq-label}
和 \label
标签有各自适用的应用场景.
在Markdown 转换(render)为 PDF 时, Quarto 先将 Markdown 转换为 TeX,再利用 TeX 系统编译输出 PDF. 在此过程中,
{#eq-label}
标签被自动转换为\label
标签,因此两种标签会在 PDF 中合并编号;在Markdown 转换(render)为 HTML 时,
{#eq-label}
标签会转换为静态的\tag
标签,而\label
标签保持不变,因此会出现两种标签相互独立、分别编号的情况;在 Markdown 转换(render)为 ePub 时,
{#eq-label}
标签会被保留,而\label
标签无法显示.
因此,我们不建议混用 {#eq-label}
和 \label
这两种标签,尤其在多格式出版中,为尽量保证不同格式文件内容的一致性,应优先考虑使用 {#eq-label}
标签,暂时舍弃 \label
标签以及多行公式的逐行引用,将这个问题留给 Quarto 在将来的升级版本中解决.
4.2 定理标签的设定与引用
这里我们给出几个Quarto书稿中定理类环境的例子.
引理 4.1 带标签的引理.
定理 4.1 (无限群) 带标签与名字的定理.
证明. 这里是定理的证明部分.
定义 4.1 带标签的定义.
例 4.1 带标签的例子.
4.3 数学公式的扩展
有些公式无法用 TeX 中包的命令来实现,例如粗体数学符号,尽管在 TeX 中有个bm
包在数学环境下通过\bm{\alpha}
来实现\boldsymbol{\alpha}
的功能,但在html
下需要给mathjax
做个TeX 宏(macro
)bm
1:
TeX: {
Macros: {
bm: ["{\\boldsymbol #1}",1],
}, }
此时由$\bm\alpha$,
出来的效果为 \(\bm\alpha\).
有关数据公式的标签与应用可参考mathjax官方文档, Mathjax 2.7
的本地化安装参考 附录 A 介绍.
配置在
MathJax.Hub.Config
下进行,具体参见Mathjax技术文档说明↩︎