Создание макросов 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?

Ответ 1

Ага, я нашел решение, которое работает с расширением 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'

#####################################################

Ответ 2

Если вы используете 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 в каталоге сборки.

Ответ 3

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

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

Ответ 4

Чтобы добавить ответ @Keta с августа 2018 года и этот коммит (https://github.com/sphinx-doc/sphinx/pull/5230/files), вы можете использовать mathjax_config в файле conf.py согласно документации (http://www.sphinx-doc.org/en/master/usage/extensions/math.html?#confval-mathjax_config)

Так, например, можно добавить следующее,

mathjax_config = {                  
    "TeX": {                        
        "Macros": {                 
            "RR": '{\\bf R}',       
            "bold": ['{\\bf #1}',1] 
            }                       
        }                           
    }