Как определить новую функцию («оператор») в MathJax?

17

Я использую MathJax для отображения формул на своих веб-сайтах. Из MathJax распознаются многие функции, такие как sin , cos , ..., но многие из них отсутствуют, например, sech (гиперболический секущий) и csch (гиперболический косекант). Я знаю, что я все еще могу использовать эти функции в формулах с помощью \text , например

\text{sech} u

Однако я предпочел бы работать \sech . С этой целью я пробовал

<div style="display:none">
  $\DeclareMathOperator{\sech}{sech}
   \DeclareMathOperator{\csch}{csch}$
</div>

сразу после <body> . (Я также попытался добавить звездочку после DeclareMathOperator .)

Этот почти работает. Проблема в том, что теперь

\sech^2 u

помещает квадрат выше sech , а не после него ( доказательство ). Есть ли способ исправить это? Каков предпочтительный способ определения новых функций («операторов») в MathJax? Конечно, есть хороший способ: кто может жить без полного спектра гиперболических функций?!

    
задан Andreas Rejbrand 29.06.2012 в 21:34
источник
  • Я не уверен, соответствует ли MathJax 100% латексу, но вы можете попробовать \ sech \ nolimits ^ {2}? –  phg 30.06.2012 в 11:47
  • @phg: Спасибо за ваш комментарий. Да, это действительно работает, но это отчасти избавляет от необходимости делать работу \ sech в первую очередь. Действительно, даже \ text {sech} ^ 2 принимает меньше символов, чем \ sech \ nolimits ^ 2. –  Andreas Rejbrand 30.06.2012 в 11:54

1 ответ

14

Макрос \DeclareMathOperator не предоставляет средства для объявления оператора, который всегда имеет ограничения в положениях супер- и индексов, поэтому ваш \sech получает надстрочный указатель, расположенный над ним при использовании в отображаемых уравнениях.

Вы хотите следующее:

<div style="display:none">
  $
    \newcommand{\sech}{\mathop{\rm sech}\nolimits}
    \newcommand{\csch}{\mathop{\rm csch}\nolimits}
  $
</div>

Это даст вам операторов, которые работают как \sin и \cos . Обратите внимание, что интервал будет лучше с этой формой, чем с вашими версиями, используя \text{...} , так как \mathop обеспечит правильное расстояние вокруг имени оператора (однако в MathJax имеется ошибка, которая заставляет пространство потеряться, когда есть супер- или индекс, это будет исправлено в следующем выпуске).

    
ответ дан Davide Cervone 01.07.2012 в 19:42
  • Большое спасибо за ваш ответ! –  Andreas Rejbrand 01.07.2012 в 19:50
  • Просто поместите это в макрос в соответствии с документацией MathJaX, и он отлично работает! Я добавил <script type="text / x-mathjax-config"> MathJax.Hun.Config ({Tex: {Макрос: {erf: "\\ mathop {\\ rm erf} \\ nolimits"}}}) < script> в мой макет layout.html в моей папке _tempates, убедившись, что путь к шаблонам указан в файле conf.py. –  Mark Mikofski 27.08.2013 в 22:20
  • Звучит как ошибка => открыт github.com/mathjax/MathJax/issues/742 –  Beni Cherniavsky-Paskin 16.02.2014 в 12:44