Mathjax: уравнение \метка и \ref

Созданный на 11 февр. 2011  ·  33Комментарии  ·  Источник: mathjax/MathJax

Запрос функции! Можем ли мы иметь средства \label и \ref для уравнений?

Это может быть действительно популярным, но я не смог найти его в списке проблем (или упоминания о нем в документации). И в основном обсуждалось давно: http://sourceforge.net/projects/mathjax/forums/forum/948700/topic/3817124

Спасибо!

Fixed Test Available v2.0

Самый полезный комментарий

Я опубликовал реализацию автоматической нумерации уравнений вместе с макросами \label и \ref в ветке issue71 моего форка MathJax. Это потребовало некоторых важных изменений в основных процедурах MathJax, поэтому вы должны быть осторожны при их использовании, так как эти изменения очень новы, и поэтому они не подверглись тряске, как остальная часть ядра. Я уверен, что они в порядке, но могут быть тонкости, которые мы обнаружим, когда они найдут больше применения.

Появились новые параметры конфигурации (см. файл config/defaults.js), управляющие нумерацией уравнений. В частности, параметр конфигурации TeX.equationNumbers.autoNumber управляет тем, как MathJax обрабатывает автоматическую нумерацию. По умолчанию автоматическая нумерация не выполняется (поэтому значение по умолчанию совпадает с текущим поведением MathJax). Но вы можете установить

MathJax.Hub.Config({
  TeX: { 
     equationNumbers: {  autoNumber: "AMS"  },
     extensions: ["AMSmath.js"]
  }
});

чтобы получить нумерацию для сред AMS (уравнение, выравнивание, сбор, многострочный и т. д.), при этом отмеченные звездочкой среды подавляют числа. Вы можете использовать \tag, чтобы указать свой собственный номер уравнения, и \label и \ref, чтобы получить доступ к номеру уравнения в тексте страницы. (Команда \ref теперь распознается как в математическом режиме, так и вне его.)

Если вы установите для autoNumber значение "all" , то каждое отображаемое уравнение будет пронумеровано автоматически.

Проблема, о которой следует помнить: номера уравнений обрабатываются с помощью элемента mlabeledtr MathML, который не реализован в Firefox (ни версии 3, ни 4), поэтому, если вы используете средство визуализации NativeMML, номера уравнений не будут отображаться. Обратите внимание, что комбинированные файлы конфигурации, включающие «HTMLorMML», будут выбирать вывод NativeMML, например, в Firefox. Это можно переопределить, указав

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  MMLorHTML: { prefer: { Firefox: "HTML" } }
});
</script>

перед загрузкой MathJax.js , чтобы заставить Firefox использовать средство визуализации вывода HTML-CSS, а не средство визуализации NativeMML (при этом позволяя IE/MathPlayer использовать MathML).

Я все еще работаю над этой веткой, поэтому изменения еще будут внесены. Меня не устраивает метод, используемый для обработки прямых ссылок, и я могу изменить его работу (хотя он будет внутренним и не изменит его представления авторам или пользователям).

Давиде

Все 33 Комментарий

Он есть в списке того, что нужно добавить, но мы сконцентрировались на производительности и исправлениях ошибок в выпуске 1.1. Я не забыл об этом, и это одна из вещей, которые должны быть добавлены после версии 1.1.

Давиде

Я опубликовал реализацию автоматической нумерации уравнений вместе с макросами \label и \ref в ветке issue71 моего форка MathJax. Это потребовало некоторых важных изменений в основных процедурах MathJax, поэтому вы должны быть осторожны при их использовании, так как эти изменения очень новы, и поэтому они не подверглись тряске, как остальная часть ядра. Я уверен, что они в порядке, но могут быть тонкости, которые мы обнаружим, когда они найдут больше применения.

Появились новые параметры конфигурации (см. файл config/defaults.js), управляющие нумерацией уравнений. В частности, параметр конфигурации TeX.equationNumbers.autoNumber управляет тем, как MathJax обрабатывает автоматическую нумерацию. По умолчанию автоматическая нумерация не выполняется (поэтому значение по умолчанию совпадает с текущим поведением MathJax). Но вы можете установить

MathJax.Hub.Config({
  TeX: { 
     equationNumbers: {  autoNumber: "AMS"  },
     extensions: ["AMSmath.js"]
  }
});

чтобы получить нумерацию для сред AMS (уравнение, выравнивание, сбор, многострочный и т. д.), при этом отмеченные звездочкой среды подавляют числа. Вы можете использовать \tag, чтобы указать свой собственный номер уравнения, и \label и \ref, чтобы получить доступ к номеру уравнения в тексте страницы. (Команда \ref теперь распознается как в математическом режиме, так и вне его.)

Если вы установите для autoNumber значение "all" , то каждое отображаемое уравнение будет пронумеровано автоматически.

Проблема, о которой следует помнить: номера уравнений обрабатываются с помощью элемента mlabeledtr MathML, который не реализован в Firefox (ни версии 3, ни 4), поэтому, если вы используете средство визуализации NativeMML, номера уравнений не будут отображаться. Обратите внимание, что комбинированные файлы конфигурации, включающие «HTMLorMML», будут выбирать вывод NativeMML, например, в Firefox. Это можно переопределить, указав

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  MMLorHTML: { prefer: { Firefox: "HTML" } }
});
</script>

перед загрузкой MathJax.js , чтобы заставить Firefox использовать средство визуализации вывода HTML-CSS, а не средство визуализации NativeMML (при этом позволяя IE/MathPlayer использовать MathML).

Я все еще работаю над этой веткой, поэтому изменения еще будут внесены. Меня не устраивает метод, используемый для обработки прямых ссылок, и я могу изменить его работу (хотя он будет внутренним и не изменит его представления авторам или пользователям).

Давиде

Это просто фантастика, большое спасибо!

Одна ошибка, однако, ввод \text{(see \eqref{cs})} в математическом режиме, кажется, съедает вторую закрывающую скобку. Добавление пробела, прежде чем он работает отлично.

Хорошо, я проверю это. Должен быть индекс, который отключен на 1, когда ссылка удаляется из текста.

Я исправил неправильный индекс, из-за которого отбрасывался символ, следующий за \eqref . Вы можете обновить свою копию ветки issue71, чтобы получить исправление.

Давиде

Примечание. Я также обновил его, чтобы вам не приходилось явно запрашивать расширение AMSmath; если вы включите автонумерацию, она теперь будет загружаться автоматически.

Давиде

==> Требуется установка тестового примера, так как я планирую добавить модульные тесты для охвата этой функции.

Здесь есть много вещей, которые нужно проверить. Прямые ссылки, обратные ссылки, ссылки на несуществующие метки, использование \tag для отмены автоматической нумерации, использование \notag и \nonumber для предотвращения нумерации, нумерация для разных сред AMS, разные настройки для autoNumber и т.д. Это будет больно, извините.

Да, я в курсе. Вот почему я только помечаю проблему как требуемую тестовую версию и откладываю написание этих тестов.
Однако, если некоторые участники будут достаточно любезны, чтобы перечислить различные варианты использования и дать идеи для тестов (возможно, даже написать их), то это действительно будет полезно.

Для этого я подготовил пару тестов.

Конфигурация/tex2jax/processRefs-1.html
Конфигурация/TeX/equationNumbers/autoNumber-1.html
Конфигурация/TeX/equationNumbers/autoNumber-2.html
Конфигурация/TeX/equationNumbers/autoNumber-3.html
Конфигурация/TeX/equationNumbers/autoNumber-4.html
Конфигурация/TeX/equationNumbers/formatID-1.html
Конфигурация/TeX/equationNumbers/formatNumber-1.html
Конфигурация/TeX/equationNumbers/formatTag-1.html
Конфигурация/TeX/equationNumbers/formatURL-1.html
LaTeXToMathML/ссылки/eqref-1.html
LaTeXToMathML/ссылки/метка-1.html
LaTeXToMathML/ссылки/ref-1a.html
LaTeXToMathML/ссылки/ref-1b.html
LaTeXToMathML/ссылки/ref-2.html
LaTeXToMathML/ссылки/ref-3.html
LaTeXToMathML/ссылки/tag-1.html
LaTeXToMathML/ссылки/tag-2.html
LaTeXToMathML/ссылки/notag-1.html

==> В наборе тестов

В tex2jax.js, строка 181, есть лишняя запятая, которая приводит к сбою IE.

Кажется, что mlabeledtr исчезает с Firefox, когда включен собственный MathML. Рассмотрим, например:

http://devel.mathjax.org/testing/testsuite/Configuration/TeX/equationNumbers/formatTag-1.html?mathJaxPath=http://devel.mathjax.org/testing/mathjax/dpvc/issue71/

В tex2jax.js, строка 181, есть лишняя запятая, которая приводит к сбою IE.

Да, я это уже заметил и исправил в ветке v2.0-candidate (поскольку я объединил все отдельные ветки, я больше не вношу изменения в них по отдельности).

Кажется, что mlabeledtr исчезает с Firefox, когда включен собственный MathML.

Это связано с тем, что Firefox не реализует <mlabeledtr> и отбрасывает любые такие строки, поэтому вместо того, чтобы математика исчезла, MathJax заменяется на простой <mtr> и отбрасывает метку в качестве компромисса. (Это должно быть в списке проблем Firefox, если еще не включено. Теперь, когда автоматическая нумерация является частью MathJax, это станет более серьезным ограничением для собственного MathML Firefox и является одной из причин, по которой v2. 0, вероятно, изменит значение по умолчанию, чтобы предпочесть HTML-CSS, а не NativeMML для Firefox.)

Для Firefox, почему мы удаляем метку? Мы можем оставить его, даже если он не в лучшем положении?

Поскольку метка является первым <mtd> в <mlabeledtr> , простая замена <mlabeledtr> на <mtr> приведет к удалению столбцов. Вам придется либо вернуться назад и вставить пустые записи во все остальные (немаркированные) строки таблицы, либо переместить метку в конец строки, возможно, добавив пустые записи, чтобы убедиться, что метка находится за пределами правый столбец, используемый в любой другой строке таблицы. Оба они были более сложными, чем я хотел сделать. Ожидание от выходного jax NativeMML заключалось в том, чтобы не изменять MathML больше, чем это абсолютно необходимо, и я сделал это только для того, чтобы полностью не потерять математику. Я не думаю, что разумно пытаться обойти каждую родную ошибку MathML в каждом средстве визуализации браузера. Сначала я надеялся, что Firefox в конечном итоге реализует недостающие функции, а удаление ярлыка будет временным, но, похоже, это произойдет не скоро.

Давиде

Обратите внимание, что изменение для mlabeledtr предназначено для Firefox 9:
https://bugzilla.mozilla.org/show_bug.cgi?id=356870

Содержимое mlabeledtr теперь отображается как обычная строка, за исключением метки, которая по умолчанию скрыта (это можно переопределить с помощью правила CSS).

Чтобы узнать об ошибке для реализации mlabeledtr, см.
https://bugzilla.mozilla.org/show_bug.cgi?id=689641

Firefox 9 был выпущен и включает обходной путь для mlabeledtr, поэтому MathJax не нужно будет делать это самостоятельно для этой версии.

Есть ли шанс заставить \label (возможно, необязательно) установить атрибут id в уравнении на что-то предсказуемое и полученное из метки? Это позволит ссылаться на данное уравнение из других документов.

Например, на данный момент, если у меня есть

\begin{align}
F &= m a \label{NewtonsLaw}
\end{align}

Это создаст идентификатор mjx-eqn-1 , если это первое уравнение. Это работает внутри документа, потому что \eqref{NewtonsLaw} генерирует ссылку на mjx-eqn-1 .

Однако я не могу ссылаться на уравнение из другого HTML-документа, не зная номера уравнения. т.е. я не могу создать внешнюю ссылку на http://www.mywebsite.com/mypage.html#mjx -eqn-NewtonsLaw

@grahamdennis - хорошая идея. Я изменил ветку v2.0-candidate , включив в нее необходимые для этого изменения. Необходимые изменения небольшие, поэтому вы можете отредактировать свою собственную копию файлов AMSmath.js и TeX/config.js, включив их.

Давиде

Спасибо @dpvc!

Я собираюсь обновить тесты, чтобы учесть последние изменения.

Firefox 9 был выпущен и включает обходной путь для mlabeledtr, поэтому MathJax не нужно будет делать это самостоятельно для этой версии.

Давиде, вы учли этот комментарий для MathJax 2.0? После удаления обходного пути MathJax пользователи Firefox смогут отображать метку, если захотят, используя простое правило CSS mlabeledtr > mtd:first-child { display: table-cell; } .

Да, обходной путь для <mlabeledtr> применяется условно и не используется для FF9 и выше. См . строку 492 файла NativeMML jax.js.

Ок, отлично! Спасибо.

Могу ли я установить числовые уравнения только при добавлении \label? Я не очень часто использую \label и \ref.

Я знаю, что могу использовать среду уравнения * в LaTeX, но, к сожалению, я использую Markdown, а * зарезервирован для синтаксиса markdown.

Спасибо.

@emptymalei , для того, что вы ищете, нет настроек, но вы можете использовать явные макросы \tag{} , если вам нужно пронумерованное уравнение. Это потребует, чтобы вы сделали нумерацию самостоятельно, но если вам нужно только несколько ссылок, это может сработать для вас. Таким образом, вы должны использовать \label{} и \tag{} вместе, чтобы пронумеровать уравнение и указать метку, чтобы ссылаться на него позже.

@dpvc Спасибо. Я попробую \tag{}.

Привет,

Спасибо всем за удивительный проект и эту замечательную функцию. Тут у меня небольшая проблема. При изменении математики с \label внутри метки будут многократно определены (чтобы воспроизвести это, вы можете попробовать отредактировать формулу с \label в любой демо-версии MathJax).

Я считаю, что это можно исправить, удалив определение метки в MathJax при замене элементов HTML. Но я не нашел ни интерфейса, чтобы сообщить об этом удалении, ни кода, который мог бы очищать определения без обновления страницы.

Кто-нибудь знает, что я могу сделать?

Заранее спасибо.

Пожалуйста, не используйте темы повторно.

Вы захотите прочитать документацию по сбросу номеров уравнений.

Хорошо, я думал, что это неполная функция, а не ошибка. Начну новый выпуск.

Номера уравнений можно сбросить, но метки нельзя.

Метки также сбрасываются с помощью resetEquationNumbers() , хотя в документации это может быть более ясно.

Большое спасибо! Должно быть, мое неправильное использование привело к неудаче. Еще раз спасибо. Простите за беспокойство.

Кажется, MathJax.InputJax.TeX.resetEquationNumbers() была конструкцией 2.x: http://docs.mathjax.org/en/v2.7-latest/advanced/typeset.html#reset-automatic-equation-numbering
необязательные аргументы недокументированы, но объяснены Давиде на https://github.com/mathjax/MathJax/issues/1705#issuecomment-282743204, спасибо.
В 3.x заменено на MathJax.texReset() http://docs.mathjax.org/en/v3.0-latest/web/typeset.html#tex-reset
[Конечно, в версии 3.0 многое изменилось. это в основном для того, чтобы помочь мне в будущем найти это снова, поскольку я все еще на 2.x ;-) Немного жаль, что многие ссылки на документы 2.x теперь не работают, если они были «последними/»...]

Была ли эта страница полезной?
0 / 5 - 0 рейтинги