Technology
jsMath 3.6a released
JsMath is a JavaScript program that allows you to incorporate mathematical notation into your HTML web pages without the need for complicated preprocessing, unreadable markup languages, or downloading plugins. It runs in most modern browsers, and it is well suited for use within blogs and other content-management systems. The input language is LaTeX, so many mathematicians already know how to enter equations using jsMath.
This update works around a serious problem with the image fallback modes in Firefox3 where the sizes of the image files are not properly determined the first time a page is loaded (i.e., if the images aren't already in the browser cache). It also fixes the sprintImageFonts plugin which has stopped functioning around version 3.4, plus several other smaller bug fixes and enhancements. See the change log for details.
Visit the jsMath web site at:
http://sourceforge.net/projects/jsmath/
See examples of jsMath in action at:
http://www.math.union.edu/locate/jsMath/examples/
View the documentation for jsMath at:
http://www.math.union.edu/locate/jsMath/
Get the latest copy of jsMath at:
http://sourceforge.net/project/showfiles.php?group_id=172663 (0 comments)
did anyone say notation needs context?
It’s not really new that mathematical notation is made there to be abused so as to be most efficient for the current context. But I just met an extreme case:
In the OpenMath3 and MathML3-content efforts, we are polishing the description of symbols’ so that they can be common. Discussion about using linear syntax appears, of course, and an extreme case about the need for context was just posted by James Davenport:
Installer for MathDox
MathDox is a collection of software tools for interactive mathematical
documents on the web.
MathDox supports Mathematics in LaTeX, MathML and OpenMath and uses various
CAS as computational backengines.
MathDox is under development at the Discrete Algebra and Geometry group at the Eindhoven University of Technology.
A Windows installer for the MathDox software can be downloaded from http://www.mathdox.org
Linux users can find the necessary software at the download page of
http://www.mathdox.org
Intergeo Platform (beta) started
We are happy to announce the start of I2Geo, the intergeo platform: http://i2geo.net/
This platform is based on Curriki with some tunings for interactive geometry (and more to come).
It will be the way to share interactive geometry across the globe.
RichEdit’s Nested Table Facility
One subject that seems to come up every other month or so is how RichEdit tables work. So I might as well post the answer. Hopefully RichEdit tables will eventually be described in the Windows SDK. They are not directly related to Math in Office, but I had mathematical expressions in mind when designing RichEdit’s table facility. Both mathematics and tables are recursive. For example you can have a fraction in the numerator of another fraction, and you can have a table in the cell of another table. So implementing tables seemed like a useful project that might also reveal how to implement a WYSIWYG implementation of mathematics. In fact, MathML <mtable>’s have a lot in common with general tables. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Most people at the time (1999) were recommending that a table cell should be represented by a whole RichEdit instance, which would give great generality. But I wanted a model that was much smaller, faster and worked with the built-in Find/Replace functionality and the RTF file converters. To this end, we needed a model, like Word’s, that was part of a single document instance, and could be overlaid on the existing paragraph structure. Accordingly RichEdit's table implementation is very efficient and fast, in fact, much faster than Word’s (although less general). Improvements have been made over the years, but the discussion that follows applies to RichEdit 4.0, which shipped with Office 2002, and RichEdit 4.1, which ships with Windows XP and Vista to this day. It also applies to later versions that ship with Office 2003 & 2007, which have additional features..
Specifically a cell containing a single line of text is represented only by that text, not by some larger structure. An empty cell consists of the single character, the cell mark U+0007. A cell containing multiple lines of text is expressed in terms of a structure that is substantially smaller than a complete edit instance, followed by the CELL mark. Tables can be nested up to 15 levels deep; higher nestings are represented by tab-delimited text. Cells can contain multiple paragraphs of any kind, e.g., bidirectional text, arbitrary tabs and alignments.
The Spring of 1999 was shortly after the Unicode Technical Committee added the U+FFF9..U+FFFB delimiter characters for describing ruby text in Japanese. These characters were available for more general use and seemed ideal for RichEdit’s internal table structure. This choice preceded the addition of the internal-use-only U+FDDO..U+FDEF characters that we use for mathematical structure characters, among other things.
In the (in-memory) backing store, a table row has the form
{CR...}CR
where { stands for the Unicode STARTGROUP character U+FFF9, and CR is the ASCII Carriage Return character U+000D. The delimiter } stands for the Unicode ENDGROUP character U+FFFB and ... stands for a sequence of cells, each consisting of cell text terminated by the CELL mark U+0007. For example, a row with three empty cells has the plain text understructure U+FFF9 U+000D U+0007 U+0007 U+0007 U+FFFB U+000D. The start and end group character pairs are assigned identical PARAFORMAT2 information that describe the row and cell parameters. If rows with different parameters are needed, they may follow one another with appropriate PARAFORMAT2 parameters. A horizontally or vertically merged cell has two characters: NOTACHAR (0xFFFF) followed by CELL (0x7). Any text that appears in a merged cell is stored in the first cell of the set of merged cells.
One way to insert tables is to copy/paste tables from Word. RichEdit reads and writes table RTF. For more programmatic purposes, RichEdit 4.0 introduced the message EM_INSERTTABLEROW, which acts similarly to EM_REPLACESEL but inserts one or more table rows with empty cells instead of plain text. Specifically it deletes the text (if any) currently selected by the selection and then inserts empty table row(s) with the row and cell parameters given by wparam and lparam, respectively, as defined below. It leaves the selection pointing to the start of the first cell in the first row. The client can then populate the table cells by pointing the selection at the various cell end marks and inserting and formatting the desired text. Such text can include nested table rows, etc. Since wparam and lparam point at row and cell parameter structures, this API isn't compatible with Visual Basic and can't be easily added to RichEdit’s object model TOM, although TOM2 does have a general set of table interfaces.
The TABLEROWPARMS and TABLECELLPARMS structures are defined as
typedef struct _tableRowParms
{ // EM_INSERTTABLE wparam is a (TABLEROWPARMS *)
BYTE cbRow; // Count of bytes in this structure
BYTE cbCell; // Count of bytes in TABLECELLPARMS
BYTE cCell; // Count of cells
BYTE cRow; // Count of rows
LONG dxCellMargin; // Cell left/right margin (\trgaph)
LONG dxIndent; // Row left (right if fRTL indent (similar to \trleft)
LONG dyHeight; // Row height (\trrh)
DWORD nAlignment:3; // Row alignment (like PARAFORMAT::bAlignment,
// \trql, trqr, \trqc)
DWORD fRTL:1; // Display cells in RTL order (\rtlrow)
DWORD fKeep:1; // Keep row together (\trkeep}
DWORD fKeepFollow:1; // Keep row on same page as following row (\trkeepfollow)
DWORD fWrap:1; // Wrap text to right/left (depending on bAlignment)
// (see \tdfrmtxtLeftN, \tdfrmtxtRightN)
DWORD fIdentCells:1; // lparam points at single struct valid for all cells
} TABLEROWPARMS;
typedef struct _tableCellParms
{ // EM_INSERTTABLE lparam is a (TABLECELLPARMS *)
LONG dxWidth; // Cell width (\cellx)
WORD nVertAlign:2; // Vertical alignment (0/1/2 = top/center/bottom
// \clvertalt (def), \clvertalc, \clvertalb)
WORD fMergeTop:1; // Top cell for vertical merge (\clvmgf)
WORD fMergePrev:1; // Merge with cell above (\clvmrg)
WORD fVertical:1; // Display text top to bottom, right to left (\cltxtbrlv)
WORD wShading; // Shading in .01% (\clshdng) e.g., 10000 flips fore/back
SHORT dxBrdrLeft; // Left border width (\clbrdrl\brdrwN) (in twips)
SHORT dyBrdrTop; // Top border width (\clbrdrt\brdrwN)
SHORT dxBrdrRight; // Right border width (\clbrdrr\brdrwN)
SHORT dyBrdrBottom; // Bottom border width (\clbrdrb\brdrwN)
COLORREF crBrdrLeft; // Left border color (\clbrdrl\brdrcf)
COLORREF crBrdrTop; // Top border color (\clbrdrt\brdrcf)
COLORREF crBrdrRight; // Right border color (\clbrdrr\brdrcf)
COLORREF crBrdrBottom; // Bottom border color (\clbrdrb\brdrcf)
COLORREF crBackPat; // Background color (\clcbpat)
COLORREF crForePat; // Foreground color (\clcfpat)
} TABLECELLPARMS;
Note that paragraph-format information containing the TABLEROWPARMS and TABLECELLPARMS information is attached to the table-row delimiters as set up by the EM_ INSERTTABLEROW message, so merely duplicating the plain-text table structure in the backing store isn't enough to insert a working table. In fact, methods like ITextRange::SetText() convert the special delimiters U+FFF9.U+FFFB to spaces (U+0020). Note also that this table structure is nestable.
The definition of EM_INSERTTABLEROW is extensible, since in the future we'll probably have to support more parameters for table rows and cells. The API also inserts a consistent table row all at once, so that no illegal table parts are present on return. Hence if the document is saved after such an insertion, valid Word-compatible RTF will be written. lparam points at the TABLECELLPARMS structure for the first cell in an array of TABLECELLPARMS structures. It's important that cbCell = sizeof(TABLECELLPARMS). That way RichEdit knows how much cell information the client is specifying. In particular, in the future if more cell parameters are defined, older clients can get away with specifying less and the new RichEdit can assign default values for the new parameters. Similarly cbRow says how many bytes are defined by the client for TABLEROWPARMS, in case RichEdit is revised to support more row parameters that the client doesn't know about.
To make simple tables easier to define, if fIdenticalCells = 1, lparam points at a single TABLECELLPARMS structure that is valid for all cells in the row. Note that a nonzero cell border width is guaranteed to give at least a one-pixel border.
The colors are limited to the standard 16 colors defined by
RGB( 0, 0, 0), // \red0\green0\blue0
RGB( 0, 0, 255), // \red0\green0\blue255
RGB( 0, 255, 255), // \red0\green255\blue255
RGB( 0, 255, 0), // \red0\green255\blue0
RGB(255, 0, 255), // \red255\green0\blue255
RGB(255, 0, 0), // \red255\green0\blue0
RGB(255, 255, 0), // \red255\green255\blue0
RGB(255, 255, 255), // \red255\green255\blue255
RGB( 0, 0, 128), // \red0\green0\blue128
RGB( 0, 128, 128), // \red0\green128\blue128
RGB( 0, 128, 0), // \red0\green128\blue0
RGB(128, 0, 128), // \red128\green0\blue128
RGB(128, 0, 0), // \red128\green0\blue0
RGB(128, 128, 0), // \red128\green128\blue0
RGB(128, 128, 128), // \red128\green128\blue128
RGB(192, 192, 192), // \red192\green192\blue192
plus two custom colors. The border widths are limited to the range 0 to 255 twips.
If the color index is not in the range 1..18, then autocolor is used, which usually ends up being the system Text or Background colors.
jsMath 3.6 Released
This update adds a new extension for handling equation numbers and references (\label and \ref), fixes several problems that occur with the release version of Firefox3, provides for safer handling of HTML within \hbox commands, improves the handling of jsMath button and control panel in MSIE, makes small improvements in a number of plugins, and moves the check-for-updates button from the control panel to the jsMath/text/index.html file.
Visit the jsMath web site at:
http://sourceforge.net/projects/jsmath/
See examples of jsMath in action at:
http://www.math.union.edu/locate/jsMath/examples/
View the documentation for jsMath at:
http://www.math.union.edu/locate/jsMath/
Get the latest copy of jsMath at:
http://sourceforge.net/project/showfiles.php?group_id=172663 (0 comments)
OpenMath Content Dictionary Wiki
OpenMath Content Dictionary Wiki
The Invisibles
No this isn’t about some kind of science fiction, this is about five Unicode characters that are useful for mathematics, but are generally invisible or should be. The characters are the zero-width space (U+200B), function apply (U+2061), invisible times (U+2062), invisible comma (U+2063), and the new invisible plus (U+2064). This post discusses each one in the context of mathematical text.
The zero-width space is a handy character that has no glyph “ink” and hence no ascent (height above the base line), no descent (depth below the baseline) and no width. In Word 2007 math zones you can insert it (type 200B <Alt+x>) into an empty argument if you don’t want a dotted box character to appear. RichEdit uses it for optional empty arguments to suppress the dotted box except when the insertion point resides inside an empty argument.
The function-apply character (U+2061) is used in the linear format as a binary operator that builds into a math function object. For example in a math zone, if you type sin2061<Alt+x> x and click on “Professional”, you get the math function object sin x. Naturally it’s easier just to type sin<space>x and have formula autobuildup do this for you, but underneath it’s the function apply character that’s controlling the build up process.
The invisible times (U+2062) is a bona fide binary operator and you can break on it and align to it. Unfortunately we didn’t have enough time to develop the uses for invisible times, so it’s not currently very useful. Unlike in Word 2007, it shouldn’t display a glyph, except for a thin space if at the end of a math zone. With it you could then effectively break an equation before any character, not just on binary, relational and some other operators. It would be nice to be able to have it display a multiplication times symbol × if it ends up being the best point for an automatic break. Word 2007 displays the invisible times as a dotted box surrounding a times sign, which is the glyph for it in the Cambria Math font.
The invisible comma (or separator) is supposed to convey the semantic of separating two variables or indices. For example the indices ij on a matrix element aij could be separated by the invisible comma to emphasize that ij isn’t the product of i and j. Word 2007 displays the invisible comma as a dotted box surrounding a comma, which is the glyph for it in the Cambria Math font.
The invisible plus (U+2064) is new with Unicode 5.1 and is supposed to carry the semantic of connecting a whole number like 3 with a fraction like ½ to give a quantity 3½ that has the value 3.5, not 1.5 (3/2). The invisible plus is well intended, but it’s also tricky to use. For one thing in ordinary arithmetic, addition is considered to have lower precedence than multiplication. So the value of the expression 4×3 + 1/2 is 12.5, not 14 (4×3.5). But 4×3<invisible plus>1/2 has the value 14. In this usage, the invisible plus has a higher precedence than multiplication.
Some more discussion of the invisible operators is given in Section 2.14 of Unicode Technical Report #25.
SCORM 2.0
Over 70 SCORM 2.0 White Papers have so far been submitted as part of the SCORM 2.0 process. The Program Committee will continue to accept submissions until the end of August.
This open dialogue about the ideas and concerns brought up in the White Papers, and about the future of SCORM, is underway at www.letsi.org/scorm2. You can read papers in your area of expertise or look over the informal comments and blog posts accumulated on the wiki. And, of course, if you've got something to say, post a comment. (Or you can just send an email to scorm2@letsi.org and they will post it for you.)
Synergies in the Development of Mathematical Editors
Dear Developers and Users of Mathematical Editors,
At the Doctoral Programm of the CICM Conference in Birmingham last week, one of the senior researchers challenged the developers of mathematical editors to sit together, compare their implementations, and find synergies.
That day, some of us sat together and thought that this might be a good point and should not only involve the developers but also users that might be able to point to valuable requirements and, in particular, take over the testing ;-)
Inter2Geo deliverables online
The Inter2Geo project has released final versions of deliverables on an educational ontology for geometric competencies and on the metadata format it will adopt in the future. Quotes from the abstracts:
Release: JOMDoc v0.1.1
Release: JOMDoc v0.0.1
Release: JOMDoc v0.0.1
Improved MathML support in Word 2007
Two very interesting developments are happening that will improve Word 2007’s MathML support. The first is key for helping in getting Word 2007 math text into the scientific and technical publisher workflows and the second may help in this regard too. Specifically new transforms are now available in beta versions enabling Word to read and write MathML. These XSLT files are responsible for converting between Word’s native math format OMML and MathML 2.0. If you’d like to try out the new files (omml2mml.xsl and mml2omml.xsl), you can download them from the Microsoft Connect site using the invitation code: 0707-84P4-DPWT. Once you’ve downloaded the files, copy them to C:\Program Files\Microsoft Office\Office12 subdirectory, or wherever winword.exe is. Before doing so, you might want to change the current omml2mml.xsl and mml2omml.xsl files to omml2mml.xsl.bak and mml2omml.xsl.bak, respectively, in case you want to back out the update at a later date. But I doubt you will. The new ones are significantly better.
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
The second development is that Word 2007 will have a service pack release that enables it to read and write the ISO standard odf files as well as the native ISO standard OOXML files. In the odf standard, math zones are represented by MathML 2.0. So when Word converts to and from odf, it will use MathML 2.0 for all math zones. And it will use the files above to do the translations.
Probability distribution
New draft of “XML Entity definitions for Characters”
Simple copy-and-paste of Math... not even working!
I recently had a very simple request… soooo simple: our user just wishes to copy the formula from Mathematica (which can copy it in MathML) and paste it on something that does web.
I just went around and tried… SeaMonkey should support that in editor and reader: copy a piece of HTML with MathML and paste it, didn’t even work… my 1/x became a place full of nbsps in three lines!

