Ограничения разметки латекса Sphinx
Я пытаюсь сделать три действительно основные вещи внутри многострочного математического режима в Sphinx (версия 1.1.2-1).
- запись подчеркивания как часть моих имен переменных даже в математическом режиме;
- использовать
big
,biggl
, etc., разделители, чтобы сделать большие скобки и скобки; - и включить регулярный текст как часть уравнений.
обратите внимание на следующие две вещи. (1) я использую необработанную строку в моем коде Python для Sphinx-документация разметки, поэтому дополнительные обратные косые черты не нужны для escape-символов, и (2) я не делаю встроенный математический режим, который разделен так в Sphinx:
:math:`Some math stuff goes here` regular text could go here...
вместо этого я делаю многострочные вещи, часто как eqnarray
в LaTeX:
.. math::
DividendYield &=& frac{DVT(t)}{CurrentMarketCap}
Avg_Assets &=& biggl( A/B biggr) textrm { when B is not zero...}
в настоящее время я получаю ошибки Sphinx (и сгенерированные страницы doc выглядят как тарабарщина), которые говорят такие вещи, как:
Unknown LaTeX command: textrm
то же самое происходит для biggl
. Для подчеркивания, это просто всегда интерпретирует его так, как будто я обозначаю индекс, но если я использую textunderscore
или другие трюки, то он бросает такие же ошибки, как и выше.
подчеркивает в математическом режиме,textrm
command и большие разделители являются чрезвычайно основными частями каждого собственного пакета TeX, который я когда-либо использовал. Так почему же они недоступны через Сфинкса?
обновление
один конкретный файл Python, над которым я работаю, вычисляет данные о капитале книги для меня. Так ниже, когда вы видите материал о BookEquity, это ссылка. Я не могу запустить наш процесс build-docs, кроме как через систему управления версиями, поэтому сделать воспроизводимую ошибку было проще всего, если я просто изменил существующий файл.
однако все, что я сделал, это добавил следующую функцию класса в свой код с помощью простой docstring.
def foo(self):
r"""
Sample docstring
.. math::
Ax &=& b
Cx &=& biggl(frac{x/y}biggr) textrm{ if y is not zero.}
"""
pass
и затем изображение ниже-это выход, поступающий от создания документов с помощью Sphinx 1.1.2-1.
если вы щелкните правой кнопкой мыши и выберите 'Просмотр изображений' вы можете увидеть лучшую версию.
3 ответов
вы должны отредактировать стандартный файл конфигурации, что sphinx-quickstart
создает, иначе Сфинкс будет блевать на математические блоки. В файле conf.py
, Я изменил
extensions = []
to
extensions = ['sphinx.ext.pngmath']
после этого более или менее работал следующий первый файл;
.. foo documentation master file, created by
sphinx-quickstart on Thu Oct 25 11:04:31 2012.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to foo's documentation!
===============================
Contents:
.. toctree::
:maxdepth: 2
This is the first chapter
=========================
Instead, I am doing multi-line stuff, often like eqnarray in LaTeX:
.. math::
DividendYield &=& \frac{DVT(t)}{CurrentMarketCap} \
Avg_Assets &=& \biggl( A/B \biggr) \textrm { when B is not zero...}
он произвел следующий латексный код для математического фрагмента:
\chapter{This is the first chapter}
\label{index:welcome-to-foo-s-documentation}\label{index:this-is-the-first-chapter}
Instead, I am doing multi-line stuff, often like eqnarray in LaTeX:
\begin{gather}
\begin{split}DividendYield &=& \frac{DVT(t)}{CurrentMarketCap} \
Avg_Assets &=& \biggl( A/B \biggr) \textrm { when B is not zero...}\end{split}\notag\\begin{split}\end{split}\notag
\end{gather}
выбор использования комбинации split и gather кажется мне немного странным и, очевидно, не делает хорошо работайте с кодом, который вы написали для eqnarray, но это жестко закодировано в Sphinx.
запуск pdflatex остановился на \end{gather}
, с ошибкой Extra alignment tab has been changed to \cr.
но я смог пройти мимо этого, введя nonstopmode. Это дает мне следующий результат:
в то время как все еще что-то не так с выравниванием (из-за различий между split
и eqnarray
среды), textrm и biggl, похоже, работают нормально. (Обратите внимание, что вы еще нужно избежать подчеркивания в Average_Assets
, но это нормально для курса, AFAICT).
вы может сойдет с рук постобработка сгенерированного кода LaTeX, например, путем замены \begin{gather}\begin{split}
и \end{split}\notag\\begin{split}\end{split}\notag\end{gather}
по математической среде по вашему выбору.
обновление:
скриншот из обновления, похоже, с веб-страницы, а не документа LaTeX! Поэтому мне кажется, что то, что вызывает ошибку, - это обработчик, который преобразует латексную математическую нотацию, чтобы браузер мог показать что-то. Это, вероятно, будет либо MathJax
или jsMath
. Глядя на код, pngmath
будет создавать другие сообщения об ошибках. Согласно на этой странице ваш код должны работа в mathjax. От страница символов jsMath, не похоже, что jsmath поддерживает \Biggl
. Поэтому я предполагаю, что Сфинкс настроен на использование jsMath. Взгляд на источник сгенерированной сети страница должна рассказать вам, что используется для визуализации математики. Если моя догадка верна, переключение конфигурации на использование mathjax и небольшая адаптация вашего уравнения могут решить проблему.
обновление 2: я могу определенно подтвердить, что он отлично работает с MathJax (см. ниже). Однако у меня нет установленного jsMath.
обновление
как уже упоминалось, сфинкс использует gather
и split
режим по математике. Согласно AMS math guide сплит занимает один $
знак. Так что
.. math::
DividendYield &= \frac{DVT(t)}{CurrentMarketCap} \
Avg_Assets &= \biggl( A/B \biggr) \textrm { when B is not zero...} \
Avg \_ Assets &= \biggl(\frac{A}{B}\biggr) \textrm{ when B is not zero...}
.. autofunction:: mymodule.foo
С foo определяется как
def foo(self):
r"""Sample docstring
.. math::
Ax &= b \
Cx &= \biggl( \frac{x}{y} \biggr) \textrm{ if y is not zero.}
"""
pass
отлично отображает latexpdf и html с помощью расширение MathJax.
обратите внимание, что я использовал \_
для подчеркивания в математическом режиме, который работал, но \textunderscore
не работает (вы должны загрузить дополнительные пакеты, я думаю, см. этот вопрос on tex.stackexchange.com).
Так как это выходит, я думаю, что ваш вопрос явно Tex
вопрос.
Я не удаляю свой предыдущий ответ, однако он применим только для LaTeX builder, а не для HTML builder.
оригинальный ответ
Сфинкс производит "необычный" латексный код. Он использует gather
и split
для уравнения (посмотрите на источник latex, который он генерирует).
проблема в том, что нет простого способа изменить источник latex, который он производит. Вы должны после обработки источника latex, чтобы получить "научный" латексный код.
Sphinx предназначен для html-документов (и веб-разработчиков, я думаю), latex (и научные "проблемы", такие как пронумерованные цифры, таблицы и уравнения), похоже, не являются основным направлением проекта. Кстати, Ваш код отлично отображает html с помощью расширение mathjax.
Я думаю, что помню некоторую критику разработчиков docutils по этой теме: docutils имеет LaTeX builder (который, кажется, "лучше"), но этот конструктор не используется sphinx.
однажды было объявление о проекте под названием relatex
(ссылке) в списке рассылки для последующей обработки кода latex, созданного sphinx. Но я не уверен насчет статуса развития.
Я использовал свой собственный код, который я сделал доступным здесь (к сожалению, это смесь немецкого и английского). Я не думаю, что это очень полезно, потому что я решил, что это сложно для пост-процесса Sphinx latex, и я переключился на чистый латекс. Поэтому я не стал развивать его дальше. Однако основными шагами являются
- создайте свой собственный стиль и шаблон latex
- пусть сфинкс создаст свой латексный код
- после обработки кода latex и вставьте его в свой шаблон
- используйте строительную систему для LaTeX для создания pdf-файла из вашего кода
я адаптировал файл Sphinx Makefile для этого за один шаг. В качестве строительной системы я использовал rubber
(в настоящее время я хотел бы использовать latexmk
).
теперь (2016) директива Sphinx math имеет опцию :nowrap:
возврат полного контроля пользователю, поэтому просто
.. math::
:nowrap:
\begin{eqnarray}
y & = & ax^2 + bx + c \
f(x) & = & x^2 + 2xy + y^2
\end{eqnarray}
оказывает штраф в HTML и latexpdf.