Search code examples
mathjax

How to define a new function ('operator') in MathJax?


I am using MathJax to display formulae on my web sites. Out of the box, MathJax recognises many functions like sin, cos, ..., but many are missing, such as sech (hyperbolic secant) and csch(hyperbolic cosecant). I know I can still use these functions in formulae by means of \text, such as

\text{sech} u

However, I would rather make \sech work. To this end, I tried

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

right after <body>. (I also tried to add an asterisk after DeclareMathOperator.)

This almost works. The problem is that now

\sech^2 u

places the square above sech, instead of after it (proof). Is there a way to fix this? What is the prefered way to define new functions ('operators') in MathJax? Surely there is a good way, for who can live without a full spectrum of hyperbolic functions?!


Solution

  • The \DeclareMathOperator macro does not provide a means of declaring an operator that always has limits in the super- and subscript positions, which is why your \sech get the superscript placed above it when used in displayed equations.

    What you want is the following:

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

    This will get you operators that work like \sin and \cos. Note that the spacing will be better with this form than with your versions using \text{...}, since \mathop will provide the proper spacing around the operator name (however there is a bug in MathJax that causes the space to be lost when there is a super- or subscript; this will be fixed in the next release).