Создание макросов LaTeX в Sphinx

Я пишу математический код на Python и используя Sphinx для создания документации. Я знаю, что Sphinx может обрабатывать код LaTeX в докстерах Python; см. http://sphinx.pocoo.org/latest/ext/math.html#module-sphinx.ext.mathbase. Как я могу создать макросы LaTeX, например \newcommand{\cG}{\mathcal{G}}, для использования в докстронах Python?

3 ответа

Ага, я нашел решение, которое работает с расширением sphinx pngmath. Это трюк, который использует Sage (программное обеспечение для математики с открытым исходным кодом); вдохновение из http://www.sagemath.org/doc/reference/sage/misc/latex_macros.html.

Чтобы добавить собственные макросы латекса в документ Sphinx:

1) Создайте файл, скажем, "latex_macros.sty", содержащий ваши макросы (по одной в строке), и поместите его, скажем, в тот же каталог, что и ваш файл conf.py Sphinx;

2) Добавьте следующий код в ваш файл conf.py Sphinx:

# Additional stuff for the LaTeX preamble.
latex_elements['preamble'] = '\usepackage{amsmath}\n\usepackage{amssymb}\n'
#####################################################
# add LaTeX macros
f = file('latex_macros.sty')
try: pngmath_latex_preamble # check whether this is already defined
except NameError: pngmath_latex_preamble = ""
for macro in f: # used when building latex and pdf versions latex_elements['preamble'] += macro + '\n' # used when building html version pngmath_latex_preamble += macro + '\n'
#####################################################


Если вы используете MathJax, это возможное решение. Я все еще ищу лучшее решение, но это может помочь, если вам нужен быстрый хак.

  • Создайте файл в каталоге, указанном в параметре конфигурации html_static_path (обычно _static), скажем mathconf.js. Это будет содержать JS-конфигурацию для MathJax. Например (из Документация MathJax):   

    MathJax.Hub.Config({ TeX: { Macros: { RR: '{\\bf R}', bold: ['{\\bf #1}', 1] } }
    });

    Вы можете добавить дополнительные команды в соответствии с приведенным выше синтаксисом. Отображаемое содержимое определяет макросы \RR и \bold{#1}, причем последний принимает один аргумент.

  • Добавьте файл layout.html в каталог _templates. Идея состоит в том, чтобы расширить текущую тему, поэтому она ищет предыдущий файл конфигурации MathJax. Таким образом, содержимое:

    {% extends "!layout.html" %}
    {% set script_files = script_files + ["_static/mathconf.js"] %}

    Обратите внимание, что в этом случае это каталог _static, потому что в этом случае он ссылается на то, где искать после сборки. Sphinx перенесет файл из html_static_path в каталог _static в каталоге сборки.


Если вы используете расширение pngmath, вы можете поместить его в преамбулу, вставив его в conf.py script:

pngmath_latex_preamble = r"\newcommand{\cG}{\mathcal{G}}"

licensed under cc by-sa 3.0 with attribution.