MathJax-node icon indicating copy to clipboard operation
MathJax-node copied to clipboard

Specify inline asciimath equations

Open saivan opened this issue 7 years ago • 15 comments

From the docs, the following formats are exposed:

  format: "TeX",                  // the input format (TeX, inline-TeX, AsciiMath, or MathML)

Would it be possible to get inline-AsciiMath as a possible output format as well, or is that already possible with the current tools?

saivan avatar Oct 17 '17 15:10 saivan

AsciiMath only supports inline mode so I'm guessing you are after display-style AsciiMath input.

That would be an upstream feature request for https://github.com/asciimath/asciimathml/ though.

pkra avatar Oct 17 '17 17:10 pkra

So I did a typesetting test of the same equation here, and I get:

image

Whilst there are small differences, the asciimath behaves a lot more like the display latex from what I'm seeing. Is there perhaps a way to get a similar output from the asciimath (I thought it would have something to do with the line height, but I can't get the inline latex output with the squished integrals, from asciimath)

saivan avatar Oct 18 '17 00:10 saivan

Ah, I forgot that asciimath input always creates a wrapping displaystyle (so the stretchiness and label positions are as in your screenshot). But the content should not be a block-like as you have it - and I can't reproduce that.

Please post a self-contained example.

pkra avatar Oct 18 '17 20:10 pkra

Oh this was rendered offline to an SVG - I just gave it a string and got this. I just happened to place the result there with some css. What I'd like to do though, is to get the small integrals with asciimath somehow - because for now, I can only specify inlineTeX to get that kind of output.

saivan avatar Oct 18 '17 22:10 saivan

I just happened to place the result there with some css.

Thanks for clarifying.

What I'd like to do though, is to get the small integrals with asciimath somehow

As before, that's a limitation of asciimath; try filing an issue upstream.

pkra avatar Oct 19 '17 00:10 pkra

Awesome, I'll do that! Thanks @pkra 😄

saivan avatar Oct 19 '17 06:10 saivan

AsciiMath has a configuration parameter displaystyle that controls whether it adds the displaystyle="true" wrapper for the math or not. You can set that parameter in the MathJax configuration block before typesetting the math, and so can control the display style of the resulting math output.

Here is an example of how to do that.

#! /usr/bin/env node                                                                                                      

var mjAPI = require(".");

var displaystyle = true;

function setDisplay(display) {
    if (display !== displaystyle) {
        mjAPI.config({
            MathJax: {
                AsciiMath: {
                    displaystyle: display
                }
            }
        });
        mjAPI.start();
        displaystyle = display;
    }
}

function getMath(math, callback) {
    mjAPI.typeset({
        math: math,
        format: "AsciiMath",
        mml: true
    }, function(data) {
        console.log(data.mml);
        if (callback) callback();
    });
};

setDisplay(true);
getMath("int x dx", function () {
    setDisplay(false);
    getMath("int x dx");
});

Note that you have to restart MathJax after making the change (that's that mjAPI.start() call), since the configuration setting is only read by MathJax at startup (AsciiMath processes all math with the same setting).

The output from this script is

<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="int x dx">
  <mstyle displaystyle="true">
    <mo>&#x222B;</mo>
    <mi>x</mi>
    <mrow>
      <mi>d</mi>
      <mi>x</mi>
    </mrow>
  </mstyle>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="int x dx">
  <mstyle>
    <mo>&#x222B;</mo>
    <mi>x</mi>
    <mrow>
      <mi>d</mi>
      <mi>x</mi>
    </mrow>
  </mstyle>
</math>

which you can see has displaystyle="true" in the first case, but not in the second. So this gives you control over the display setting.

Note that you must use callbacks to make sure that the previous meth is typeset before you change the display setting, since otherwise you will restart MathJax before the previous math is complete, and that can cause problems.

dpvc avatar Oct 19 '17 11:10 dpvc

I basically have an always running mathjax server to avoid having to restart mathjax, because it gets very slow on a large page. Wouldn't it make sense to support this in the format section, so we don't need to restart mathjax every time we are thrown an inline equation?

saivan avatar Oct 19 '17 12:10 saivan

Thanks, @dvpc - I had forgotten about that setting.

Wouldn't it make sense to support this in the format section, so we don't need to restart mathjax every time we are thrown an inline equation?

I'd be ok with that. @saivan if you want to make a PR, that would facilitate the discussion.

pkra avatar Oct 19 '17 14:10 pkra

Wouldn't it make sense to support this in the format section

I didn't say it wouldn't. I was just trying to give you a mechanism to do what you asked.

If you have a large page with lots of math, you could send all the inline math first, and then all the display math, and only have to restart once. So you can minimize the restarts.

dpvc avatar Oct 19 '17 15:10 dpvc

I'll do that, thanks so much for being so helpful guys :) I really do wish more people used asciimath, they don't know what they are missing out on :P

saivan avatar Oct 20 '17 09:10 saivan

Okay, after ploughing through the code, I'm not so sure how I would go about adding this functionality. I stumbled across this thread from a few years ago, and I'm not sure how relevant it still is.

In mathjax-node, I can't see any easy way to avoid changing the initial defaults object by restarting mathjax (so I can't make a PR without a fork and commit unless I'm mistaken).

I am able to fix my problem by just having two mathjax instances on my server to handle the different math input possibilities, but I still think this functionality would be useful to implement; so I'd like to figure out how to do it.

Any pointers or suggestions would be most welcome :)

saivan avatar Oct 20 '17 11:10 saivan

Was this closed because it is no longer relevant?

saivan avatar Dec 18 '17 10:12 saivan

Was this closed because it is no longer relevant?

Sorry. Re-opening.

I had closed this because it was a question about an upstream technology asciimath.

But I now see that we had discussed a PR to do something here.

FWIW, I do think it would be better to raise the issue upstream and find an official way for asciimath to support display equations.

pkra avatar Dec 18 '17 11:12 pkra

I'll just go ahead and post this issue to asciimath then

saivan avatar Dec 19 '17 02:12 saivan