RE: linebreaking mathml

Funny you should mention line breaking MathML -- I just added support
for it to MathPlayer last week. I can't say when a new release of
MathPlayer will happen, but when it does, it will do automatic and
forced line breaks.

The algorithm for linebreaking, even "optimal" line breaking (aka TeX's
*text* line breaking) is only slightly greater than linear (it's a
function of line width and number of "words").  The time it takes to
line break a math expression is not a problem.  If you have Mathematica,
which does optimal line breaking of its output, you can change the
window width and watch it re-line break multi-screen long expressions in
real time.  The same is true for the line breaking I've added to
MathPlayer.

I think your best bet is to pester companies/implementers to fully
implement MathML.  Letting the browser do the line breaking is really
the right way to go.  Hopefully you'll be pleased with the line breaking
that I've added to MathPlayer once it sees the light of day.

Onto some of your comments...

> The first strategy I found is to insert
>  <m:mspace linebreak="newline"/>
> Or even better, linebreak="indentingnewline", although the spec
doesn't (yet ! :> ) indicate what it should indent _to_  (a fixed
amount, to the begin of the containing row, something else ? ).

The spec is very silent on indenting.  I thought it was because when
linebreaking got moved to mspace (it used to be specified by &LineBreak;
character or some such name), the text got omitted.  However, it was not
really specified in the earlier versions of MathML either.

There are various kinds of indenting that are used in practice:
1.  indenting that matches the same "operator" on the previous line.
Eg, aligning "="s.  If a "=" line is too long, then the next line indent
further than the "="s.
2.  indenting that keeps the insides of parens to the right of the
opening paren
3.  indenting that tries to make clear the relationship of the current
line's nesting depth to other lines (ie, tries to make it obvious that a
line is more or less deeply nested than another line

The first form of indenting is pretty common in textbooks, with the
caveat that the second line is only "arbitrarily" indented (since it
would be the first occurrence of a "=" sign.  The third form will
typically mimic the first one because the operators (eg, "=") will be at
the same nesting depth.

The second form is nice *if* the open paren is near the left side of the
screen.  If not, it wastes a lot of space.

Both the first and third option don't say how much to indent.  For the
first option, this matters for the second line -- the remainder of the
lines, they will follow that indentation.  Perhaps mspace should specify
this (IndentPerLevel), and allow it on mstyle so it can be inherited.

> ...[comments on aligning mtable]

mtable does allow you to align the first row of the table with the
surrounding baseline.  In fact, your suggestion is nearly what is legal.
Try

<mtable align='baseline 1'> ... </mtable>

I'm unclear about what you mean about "align with the last row" when you
also want alignment with the first line.  I'm clearly missing some
'bigger picture' context.

Neil Soiffer
Senior Scientist
Design Science, Inc.
neils@dessci.com
www.dessci.com
~ Makers of Equation Editor, MathType, MathPlayer and MathFlow ~
 

-----Original Message-----
From: www-math-request@w3.org [mailto:www-math-request@w3.org] On Behalf
Of Bruce Miller
Sent: Monday, June 04, 2007 10:50 PM
To: www-math@w3.org
Subject: linebreaking mathml


Hi all;
  I suppose that when MathML was originally developed, the authors
imagined that the browser would be responsible for line breaking.  After
all, it _does_ seem like the right place; who else knows the font sizes,
window width and such?
  Alas, apparently linebreaking is a bit too demanding for real time;
rendering MathML is slow enough as it is.
Mozillae will linebreak only at the topmost level, under very limiting
circumstances.  I haven't (re)checked exactly what MathPlayer does.

So, I set out to pre-linebreak my mathml to at least a not-unreasonable
width, and started looking for the right markup bits (we're talking
presentation MathML here).

The first strategy I found is to insert
  <m:mspace linebreak="newline"/>
Or even better, linebreak="indentingnewline", although the spec doesn't
(yet ! :> ) indicate what it should indent _to_  (a fixed amount, to the
begin of the containing row, something else ? ).
Unfortunately, Mozilla doesn't implement that.

OK, second strategy: split a row into rows of an mtable. Which almost
works, but the align attribute of mtable seems to miss a useful value
for this case.  Namely, I would like to align the table so that the 1st
row's baseline aligns with the baseline of material on the left (like
align="baseline1" ).
However, I would like the following material to align with the last row
(like align="baseline<n>" ).
Like this:
   a + (b + c + d
         + e + f + g) + h

Lacking that, I've got to assure that the broken mrow is the last on
it's line (move the "+ h" to the next line), and/or be very careful (&
somewhat contrived) when nesting mrows.

Would such an alignment value be useful?
(and would it ever be implemented? )

Or have I overlooked a better linebreaking strategy?

--
bruce.miller@nist.gov
http://math.nist.gov/~BMiller/

Received on Tuesday, 5 June 2007 17:36:40 UTC