使用 mhchem 和 Sphinx 绘制反应速率及下标的反应箭头

使用 mhchem 和 Sphinx 绘制反应速率及下标的反应箭头

我在用Sphinx 1.1.3用下划线记录反应率。

\ce{A + $h$\nu ->[k_A] B}

当我使用以下方法制作 html 文档时,它运行良好MathJax以及包含以下内容的模板文件:

{% extends "!layout.html" %}

{% block extrahead %} 
 <script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    TeX: {
        extensions: ["mhchem.js"]
    }
  });
</script>
{% endblock %}

并将_templates文件夹包含在templates_path文件中conf.py

您可以看到我的 mchem_example 在这里

但是当我尝试使用以下方法构建 latexpdf 时微特克斯,序言\usepackage[version=3]{mhchem}如下mhchem 文档latex_elements在的字典中conf.py,我得不到反应速率或箭头。mhchem 文档中的其他示例都有效,例如使用+H20或。我通过将 括在花括号中\alpha使其适用于 MathJax 和 MiKTeX 。\nu

\ce{A + $h${\nu} ->[k_A] B}

所以现在我的问题是为什么?为什么必须\nu用花括号括起来?

答案1

这是 TeX 的“跳过控制序列后的空格”行为发挥作用。TeX 会忽略控制序列后的空格,因此此处的 之后\nu。这意味着mhchem“看到”

A + $h$\nu->[k_A] B

但是,mhchem使用空格来确定箭头之类的东西到底是什么。因此,需要\nu和之间的空格-才能正确解析事物。您的解决方案有效,因为它可以阻止空格跳过:另一种方法是$h$\nu{}。我实际上会选择

A + $h\nu$ ->[k_A] B

因为它h\nu真正形成一个数学实体(而不是一个复合符号)。

我猜 MathJax 在这里不太遵守 TeX 通常的解析规则,所以不会跳过空格。

相关内容