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>

  • 我们可以将 equationaligned 环境结合起来输入多行公式,对整个公式组设置一个 \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 标签有各自适用的应用场景.

  1. 在Markdown 转换(render)为 PDF 时, Quarto 先将 Markdown 转换为 TeX,再利用 TeX 系统编译输出 PDF. 在此过程中,{#eq-label} 标签被自动转换为\label 标签,因此两种标签会在 PDF 中合并编号;

  2. 在Markdown 转换(render)为 HTML 时, {#eq-label} 标签会转换为静态的 \tag 标签,而 \label 标签保持不变,因此会出现两种标签相互独立、分别编号的情况;

  3. 在 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.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 介绍.


  1. 配置在MathJax.Hub.Config下进行,具体参见Mathjax技术文档说明↩︎