2

我想在无法访问互联网的计算机上将 MathJax 与 Mkdocs 一起使用,因此我不能只调用 Mathjax CDN。

配置

mkdocs.yml

site_name: My Docs

extra_javascript:
  - 'javascripts/MathJax-2.7.5/MathJax.js'
  - 'javascripts/MathJax-2.7.5/extensions/MathMenu.js'

markdown_extensions:
  - pymdownx.arithmatex

文件结构

project/
    docs/
        javascripts/
            MathJax-2.7.5/
                ...
    mkdocs.yml

根据Mathjax 的文档,该文件夹/MathJax-2.7.5/包含整个未压缩的存档。

问题

运行mkdocs serve我得到以下错误:

[E 181003 11:32:04 web:1591] Uncaught exception GET /javascripts/MathJax-2.7.5/extensions/MathMenu.js (127.0.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8000', method='GET', uri='/javascripts/MathJax-2.7.5/extensions/MathMenu.js', version='HTTP/1.1', remote_ip='127.0.0.1', headers={'Host': '127.0.0.1:8000', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36', 'Dnt': '1', 'Accept': '*/*', 'Referer': 'http://127.0.0.1:8000/', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7'})
    Traceback (most recent call last):
      File "/Users/victor/.pyenv/versions/3.6.4/lib/python3.6/site-packages/tornado/web.py", line 1512, in _execute
        result = yield result
      File "/Users/victor/.pyenv/versions/3.6.4/lib/python3.6/site-packages/tornado/gen.py", line 1055, in run
        value = future.result()
      File "/Users/victor/.pyenv/versions/3.6.4/lib/python3.6/site-packages/tornado/concurrent.py", line 238, in result
        raise_exc_info(self._exc_info)
      File "<string>", line 4, in raise_exc_info
      File "/Users/victor/.pyenv/versions/3.6.4/lib/python3.6/site-packages/tornado/gen.py", line 307, in wrapper
        yielded = next(result)
      File "/Users/victor/.pyenv/versions/3.6.4/lib/python3.6/site-packages/tornado/web.py", line 2422, in get
        yield self.flush()
      File "/Users/victor/.pyenv/versions/3.6.4/lib/python3.6/site-packages/tornado/web.py", line 947, in flush
        start_line, self._headers, chunk, callback=callback)
      File "/Users/victor/.pyenv/versions/3.6.4/lib/python3.6/site-packages/tornado/http1connection.py", line 400, in write_headers
        data += self._format_chunk(chunk)
      File "/Users/victor/.pyenv/versions/3.6.4/lib/python3.6/site-packages/tornado/http1connection.py", line 412, in _format_chunk
        "Tried to write more data than Content-Length")
    tornado.httputil.HTTPOutputError: Tried to write more data than Content-Length
[E 181003 11:32:04 web:1016] Cannot send error response after headers written

这两个错误重复发生,直到我停止服务器。


使用--no-livereload防止问题,服务器返回:

INFO    -  Building documentation...
INFO    -  Cleaning site directory
INFO    -  Building documentation to directory: /var/folders/qw/6ccdf6w14k354611cpl0x99h0000gn/T/tmpqlulnc9t
INFO    -  Running at: http://127.0.0.1:8000/
INFO    -  Hold ctrl+c to quit.

但数学不呈现:

$$
\frac{n!}{k!(n-k)!} = \binom{n}{k}
$$

未呈现数学

4

1 回答 1

1

解决方案:改用捆绑了 MathJax 的单个文件

对于你的情况,我已经看到了这个 bundled的数学渲染。工作示例


我认为这很容易,只需 (a) 修改 mkdocs 静态服务器设置或 (b) 将 Mathjax 完全捆绑到 1 个 webpack 样式的单个 .js 文件中。

对于选项 (a),mkdocs没有为其静态服务器提供太多自定义...

然后我在(b)上花了很长时间。Mathjax 让 ajax 调用自行加载其扩展和文件,因此将整个东西捆绑在一起非常困难。

就在我正要尝试在另一台本地服务器上静态提供 Mathjax 时,我在 Mathjax wiki 中找到了这篇文章,检查了 repo,加载了一个 dist 文件,然后就可以正常工作了。一定要去那个回购并给它一颗星!

这是您的字符串的一个工作示例。mathjax 包非常大(1.9mb),因此需要一段时间才能加载。

于 2018-12-12T16:44:27.550 回答