- From: Robert Miner <robertm@dessci.com>
- Date: Tue, 6 Nov 2007 12:47:57 -0800
- To: "Bert Bos" <bert@w3.org>
- Cc: <www-style@w3.org>
Hi.
Thanks for taking time to meet with us yesterday. The prioritized list of requests we agreed to send follows.
--Robert (for the Math WG)
===================================================================
Executive Summary of Prioritized Requests for CSS3 from the Math WG
===================================================================
1. Keep the table-baseline property. This is used extensively in our
current drafts in under and over scripts, and elements with both
sub and superscript.
2. Some solution for stretching delimiters. Stretching of delimiters,
e.g. parenthesis around a tall fraction, is fundamental to math
layout, and apart from a few cases that can be faked with border
properties, we have no good solution via CSS now.
3. Keep some version of the ::outside pseudo-element. Without this,
we must require a large number of extra 'wrapper' rows in our
markup.
4. Keep the white-space-collapse property. MathML markup typically is
generated with whitespace between elements that is not intended for
literal rendering, since it tends to be verbose. It would be
painful to require that authors be responsible for removing that
whitespace.
5. Introduce content sensitive selectors. Spacing around operators
(and a number of other properties) is intended to be set by looking
up the operator in a table in the MathML rendering model. Without
content sensitive selectors, this means many attributes typically
left unspecified in normal MathML markup must be explicitly set for
use with CSS.
===================
Detailed Discussion
===================
-------------------------
'table-baseline' property
-------------------------
1. 'table-baseline' property. Property was discussed on Mountain View F2F last
year:
http://lists.w3.org/Archives/Member/w3c-css-wg/2006OctDec/0023.html
CSS WG decided to include property in tables module. We just want to remind
that
MathML for CSS profile essentially relies on this property and we use it to
specify baseline of munderover, mover, msup, msubsup and mmultiscripts layout
schemata, all these schemata can be formatted as multirow inline-table and
having property that defines which row is baseline of inline-table is crucial.
Formally property can be defined as follows:
Name: table-baseline
Value: <integer> | inherit
Initial: 1
Applies to: inline-tables
Inherited: no
Percentages: N/A
Media: visual
Computed value: specified value (except for initial and inherit)
The 'table-baseline' property determines which row of a inline-table should be
used as baseline of inline-table.
<integer>
Baseline of nth row (as determined by the integer value) is baseline
of inline-table. Value 1 corresponds to first row and is initial value.
Negative values are allowed, -1 corresponds to last row of inline-table,
-n stands for nth line from the bottom. If absolute value of property is
larger then number of rows in inline-table then initial value should be
used instead. If value is 0 then bottom margin edge of inline-table should
be treated as baseline.
There is experimental implementation of property in Opera 9.5
(-o-table-baseline).
Usecase for table-baseline property: Formatting of munderover, mover,
msup, msubsup and mmultiscripts elements.
Consider formula that involves under and overscripts
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>baseline</mi>
<munderover>
<mi>Base</mi>
<mi>underscript</mi>
<mi>overscript</mi>
</munderover>
<mi>baseline</mi>
</math>
under and over scripts can be handled using CSS
munderover
{display:inline-table;
text-align:center;
table-baseline:2;}
munderover > *
{display:table-row}
munderover > * + *
{font-size:0.7em}
munderover > * + * + *
{display:table-header-group}
Without table-baseline property, it would be very difficult (in some cases
impossible) to achieve proper vertical alignment of complex math formulae.
For example workaround for the case of munderover schemata would look like
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>baseline</mi>
<munderover>
<maction>
<mi>Base</mi>
<mi>overscript</mi>
</maction>
<maction>
<mi>underscript</mi>
<mi>Base</mi>
</maction>
<maction>
<mi>overscript</mi>
<mi>underscript</mi>
</maction>
</munderover>
<mi>baseline</mi>
</math>
with CSS
munderover > maction:first-child + maction
{display:inline-table;
text-align:center;}
munderover > maction:first-child + maction > * + *
{display:table-row;}
munderover > maction:first-child + maction > *:first-child
{display:table-footer-group;
font-size:0.7em;}
munderover
{display:inline-block;
text-align:center;}
munderover > maction:first-child
{display:block;
font-size:0.7em;}
munderover > maction:first-child > *:first-child, munderover >
maction:first-child + maction + maction
{display:none;}
Such workaround is clearly unacceptable as markup is horrible. The same
argument applies to mover, msup, msubsup and mmultiscripts. So we badly
need the way to control baseline alignment of inline-tables and hope that
table-baseline property will be adopted soon.
-------------------------
Stretching of delimiters
-------------------------
2. Stretching of delimiters. MathML formatters need some way to define
stretching of delimiters such as brackets, this could be either some glyph
stretching or some equivalent functionality that would alow to draw delimiters
around containing block, either as predefined list of outline styles or some
SVG like way to draw simple paths around container.
Usecase for delimiter stretching.
Consider stretchy braces:
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced left="<" right=">">
<mfrac>
<mi>a</mi>
<mi>b</mi>
</mfrac>
</fence>
</math>
They can be formatted using hypothetical CSS:
mfenced
{display:inline-block;}
mfenced:before, mfenced:after
{content:attr(open);
glyph-stretch:100%}/*refers to height of line box */
mfenced:after
{content:attr(close);}
In case one does not want to mess with font-formats, alternative could be
to define some kind of delimiter drawing mechanism. For example:
mfenced
{display:inline-block;
position:relative;
padding:0 1ex;}
mfenced:before, mfenced:after
{content:"\A0";
width:1ex;
height:100%;
path-width:thin;
top:0;}
mfenced:before
{left:0;
draw:path('M100%,0 L0, 50% L100%, 100%');}
mfenced:after
{right:0;
draw:path('M0,0 L100%, 50% L0, 100%');}/* one can use simple subset of
SVG paths or define alternative syntax */
I know there is opportunity to use image-borders but one of the problems
with images is that they don't inherit colors from document.
------------------------
::outside pseudo-element
------------------------
3. ::outside pseudo-element
CSS3 generated and replaced content module contains ::outside pseudo-element. It
is important for us, as MathML allows implied mrow containers to be omitted in
many cases. Omitting those containers is reasonable from structural point of
view, but creates problems when formatting markup with CSS, partly because
missing containers make parts of formulae effectively unstylable (often
affected schemata involve some table elements and omissions can not be
compensated by anonymous table objects). Currently MathML for CSS profile
requires mrow containers to be used explicitly in all such cases, but this
requirement is confusing for average user, breaks compatibility with MathML 2.0
markup and might negatively affect adoption of the profile. Therefore we would
like CSS WG to keep ::outside in CSS.
Usecase for ::outside pseudo-element. Nesting of mmultiscripts
Consider formula with prescripts:
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mmultiscripts>
<mi>A</mi>
<mprescripts/>
<mi>B</mi>
<mi>C</mi>
</mmultiscripts>
</math>
Prescripts case can be handled with the following CSS:
mmultiscripts
{display:inline-table;
line-height:0.7em;
table-baseline:2;}
mmultiscripts > *
{display:none;}
mprescripts + *,
mmultiscripts > *:first-child
{display:table-row;}
mprescripts + * + *
{display:table-header-group;}
mmultiscripts > *:first-child:before
{display:table-cell;
content:"\A0";}
mmultiscripts > * + *
{font-size:0.7em;}
none
{content:"\A0";}
It's tricky because prescripts appear after base in markup, while their
inflow position preceeds base. So stylesheet involves interaction between
anonymous table objects and generated content. Since anonymous table
objects are effectively unstylable this construction works only in simple
cases, nested prescripts like the ones below are broken:
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mmultiscripts>
<mi>A</mi>
<mprescripts/>
<mmultiscripts>
<mi>B</mi>
<mprescripts/>
<mi>D</mi>
<mi>E</mi>
</mmultiscripts>
<mmultiscripts>
<mi>C</mi>
<mprescripts/>
<mi>F</mi>
<mi>G</mi>
</mmultiscripts>
</mmultiscripts>
</math>
One can solve issue by requesting users to wrap nested schemata into extra
mrow containers:
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mmultiscripts>
<mi>A</mi>
<mprescripts/>
<mrow>
<mmultiscripts>
<mi>B</mi>
<mprescripts/>
<mi>D</mi>
<mi>E</mi>
</mmultiscripts>
</mrow>
<mrow>
<mmultiscripts>
<mi>C</mi>
<mprescripts/>
<mi>F</mi>
<mi>G</mi>
</mmultiscripts>
</mrow>
</mmultiscripts>
</math>
But this make markup more verbose and confusing for average user. Having
::outside pseudo-element would allow us to replace unstylable anonymous
table object with stylable containers and avoid nesting problems.
-----------------------
White-space-collapse
-----------------------
4. MathML white-space collapse mechanism requires white space characters
that appear between token elements to be removed (in addition leading and
trailing spaces in token elements are removed). This behaviour is not covered
by CSS 2.1 white-space-collapse model, it is partly addressed in CSS3 by
introducing white-space-collapse property, it is important to keep this
property in CSS (we need white-space-collapse:discard; for space between
tokens) and if preferably add possibility to remove leading and trailing spaces
inside *inline* elements (something like
white-space-collapse:discard-trailing).
Use case for white-space-collapse:
MathML requires any space characters that appear between token elements to
be removed. This implies that
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mn>2</mn>
<mo> + </mo>
<mn>2</mn>
<mo> = </mo>
<mn>4</mn>
</math>
is treated like
<math
xmlns="http://www.w3.org/1998/Math/MathML"><mn>2</mn><mo>+</mo><mn>2</mn><mo>=</mo><mn>4</mn></math>
CSS2.1 white space processing model does not cover this case. However CSS3
white-space-collapse property is useful for us as it can at least collapse
spaces between token elements:
math
{white-space-collapse:discard}
mn, mo, mi, mtext, ms
{white-space-collapse:collapse}
Further extension of property to allow discarding leading/trailing spaces
in token elements would be useful.
-------------------------------------
Content sensitive selectors
-------------------------------------
5. Content sensitive selectors
Spacing between MathML operators as well as some stretching and sizing
properties often depend on content of mo token elements (in accordance with
operator dictionary). CSS3 had :contains() selector that could help us to
define content sensitive formatting of token elements. Unfortunately this
selector was removed, even so some CSS rendering engine support it (Prince XML
formatter). It would be nice to restore property in some form.
Usecase for content sensitive selectors
Consider example:
<math
xmlns="http://www.w3.org/1998/Math/MathML"><mo>(</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo>)</mo></math>
In MathML some operators require extra spacing to be added before/after
them, some don't.
One way to distinguish these cases is to use content sensitive selectors:
mo:contains("+")
{padding:0 0.5ex;}
another case is to use explicit attributes
<math xmlns="http://www.w3.org/1998/Math/MathML"><mo
fence="true">(</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo
fence="true">)</mo></math>
mo
{padding:0 0.5ex;}
mo[fence="true"]
{padding:0;}
Using explicit attributes puts extra burden on user and bloats markup so
we would prefer :contains() selector to be retained in some form.
Robert Miner
Vice President, Research and Development
Design Science, Inc.
140 Pine Avenue, 4th Floor
Long Beach, California 90802
USA
Tel: (651) 223-2883
Fax: (651) 292-0014
robertm@dessci.com
www.dessci.com
~ Makers of MathType, MathFlow, MathPlayer, WebEQ, Equation Editor, TexAide ~
Received on Tuesday, 6 November 2007 20:50:00 UTC