Javascript 带有mkdocs的本地mathjax

Javascript 带有mkdocs的本地mathjax,javascript,python,mathjax,mkdocs,Javascript,Python,Mathjax,Mkdocs,我想在不能访问internet的计算机上使用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.arithm

我想在不能访问internet的计算机上使用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-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
但数学并没有呈现:

$$
\frac{n!}{k!(n-k)!} = \binom{n}{k}
$$
解决方案:

对于你的情况,我已经看到了数学渲染


我认为这很容易,只要(a)修改mkdocs静态服务器设置,或者(b)将Mathjax打包成一个单独的.js文件,即webpack样式

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

然后我花了很长时间在(b)上。Mathjax通过ajax调用自己加载其扩展名和文件,因此很难将所有内容捆绑在一起

就在我准备在另一台本地服务器上静态地为Mathjax服务时,我在Mathjax wiki中发现了这一点,签出了repo,加载了一个dist文件,然后砰的一声,一切正常。一定要去那个回购协议,给它一颗星星


这是一张有你的绳子的支票。mathjax捆绑包相当大(1.9mb),因此需要一段时间才能加载。

--无livereload
会导致MkDocs使用不同的服务器,该服务器可能以不同的方式处理相同的错误。你说数学没有结果。为什么不呢?您的浏览器报告了哪些错误?我发现哪些错误可能与此相关。不幸的是,没有足够的信息可以确定。我不确定这是利弗雷罗德还是龙卷风中的一只虫子。如果Tornado中有一个bug,那么它会影响两台服务器。浏览器控制台中没有记录错误…对不起,我没主意了。我建议联系
pymdownx.arithmatex
的开发人员。我知道他在MkDocs中使用了扩展,他可能会处于更好的位置来提供帮助。
$$
\frac{n!}{k!(n-k)!} = \binom{n}{k}
$$