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)bm1:
TeX: {
Macros: {
bm: ["{\\boldsymbol #1}",1],
},
}此时由$\bm\alpha$,出来的效果为 \(\bm\alpha\).
有关数据公式的标签与应用可参考mathjax官方文档, Mathjax 2.7的本地化安装参考 附录 A 介绍.
配置在
MathJax.Hub.Config下进行,具体参见Mathjax技术文档说明↩︎