Локальный mathjax с mkdocs

Я хотел бы использовать MathJax с Mkdocs на компьютере, у которого нет доступа к Интернету, поэтому я не могу просто позвонить в CDN Mathjax.

Конфигурация

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

Эти 2 ошибки повторяются до тех пор, пока я не остановлю сервер.


Использование --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}
$$

не отображается математика


person ted    schedule 03.10.2018    source источник
comment
--no-livereload заставляет MkDocs использовать другой сервер, который, вероятно, обрабатывает ту же ошибку другим способом. Вы говорите, что математика не отображается. Почему нет? О каких ошибках сообщает ваш браузер?   -  person Waylan    schedule 05.10.2018
comment
Я нашел этот отчет об ошибке, который может иметь значение. К сожалению, недостаточно информации, чтобы знать наверняка. И я не уверен, является ли это ошибкой Livereload или Tornado. Если ошибка в Tornado, то она повлияет на оба сервера.   -  person Waylan    schedule 05.10.2018
comment
В консоли браузера ошибок нет...   -  person ted    schedule 05.10.2018
comment
Извините, у меня закончились идеи. Я бы посоветовал обратиться к разработчику pymdownx.arithmatex. Я знаю, что он использует расширение с MkDocs, и он, вероятно, будет в лучшем положении, чтобы помочь.   -  person Waylan    schedule 05.10.2018


Ответы (1)


Решение: Используйте вместо этого один пакетный файл MathJax.

Для вашего случая я видел математический рендеринг с в комплекте. Рабочий пример


Я думал, что это будет легко, просто либо (а) измените настройки статического сервера mkdocs, либо (б) просто объедините Mathjax в один файл .js в стиле веб-пакета.

Что касается варианта (а), mkdocs не предоставляет столько настроек для своего статического сервера...

Потом я долго занимался (б). Mathjax использует ajax-вызовы для загрузки своих расширений и файлов самостоятельно, поэтому собрать все это воедино невероятно сложно.

Как раз когда я собирался попробовать статически обслуживать Mathjax на другом локальном сервере, я обнаружил это article в вики Mathjax, проверьте репозиторий, загрузите один из дистрибутивных файлов и бум, он просто работает. Обязательно перейдите к этому репозиторию и поставьте ему звезду!

Вот рабочий пример с вашей строкой. Пакет mathjax довольно большой (1,9 МБ), поэтому его загрузка займет некоторое время.

person Derek Nguyen    schedule 12.12.2018