Running EXP under Wine

EXP (or possibly here) is an scientific word processor written by Simon L. Smith. I use EXP for most of my mathematical writing. Even though EXP is WYSIWYG, without a little care using styles, a document can easily be converted into LaTeX. The major disadvantage of EXP is that it is written for Microsoft Windows. Fortunately for me, recent versions of the Windows emulator Wine are capable of making EXP very usable under Linux, with only a few missing features. This page is intended to document some of the tweaks I've done to get EXP to run. Of course, even though I prefer EXP, there are some nice open source WYSIWYG math editors for Linux, such LyX and TeXmacs.

The specific software I am using is EXP 5.0.2 and Wine 20020327 (packaged with Red Hat 7.3). Wine is configured to run completely stand-alone and needs no native Windows DLLs beyond what EXP installs. I do not know if the installer itself will run under Wine. I installed EXP by copying the files over from an installation I had done on a Windows installation. However, I have no reason to think that the installer would not work.

Here is a screenshot of EXP running.

Shot of EXP running.

The screenshot illustrates the ease of typing both verbal and symbolic mathematics simultaneously and being able to see immediately the graphic representation. Unfortunately, the screenshot also shows the difficulty that EXP and Wine have with fonts and layout. The layout sometimes looks a little funny, usually involving too much space on accents such as overbars and hats, but is perfectly understandable and usable for typing mathematics. The fonts, on the other hand, do not work immediately. This is due mainly to a bug in the way Wine handles symbol TrueType fonts. This screenshot shows the Character Map program that comes with Microsoft Windows displaying the Wingdings font. In the row that the cursor is in, many characters are not displayed, instead being replaced by the square "no character" symbol. While I don't particularly miss these wingdings, I am interested in having "=" and "+" being displayed from the BCSYMA font in EXP.

character map

The workaround that I use for displaying fonts in EXP is to re-encode the EXP fonts BCSYMA, BCSYMB, BCSYMX, and BCCYR (and their bold versions) so that Wine does not treat them as symbol fonts. Then they seem to work just fine. The program I used to do the re-encoding is PfaEdit, an open source font editor. I loaded each font into PfaEdit, then went to Element...Font Info...Encoding and changed the encoding to "ISO 10646-1 (Unicode)". Then I renamed characters U+007F and U+009E from ".notdef"--this is accomplished by Element...Char Info...Unicode Name. For some reason, when PfaEdit converts the encodings, characters labelled ".notdef" are not included. I then performed the conversion by File...Generate Fonts, selecting format TrueType, not "TrueType (symbol)."

I installed the fonts into /usr/share/fonts/default/TrueType, which is the standard TrueType font directory for Red Hat 7.3. Other Linux distributions probably have this directory elsewhere. It doesn't matter where it is, as long the new fonts are in the font server's search path of font directories. One the fonts were copied, I ran the commands ttmkfdir > fonts.scale and mkfontdir, which generate the index files fonts.scale and fonts.dir. These files are used by the font server to know what the fonts are. I modified these files so that the following lines were in them:

bccyr.ttf -misc-BCCYR-medium-r-normal--0-0-0-0-p-0-ascii-0
bccyrbd.ttf -misc-BCCYR-bold-r-normal--0-0-0-0-p-0-ascii-0
bcsyma.ttf -misc-BCSYMA-medium-r-normal--0-0-0-0-p-0-ascii-0
bcsymabd.ttf -misc-BCSYMA-bold-r-normal--0-0-0-0-p-0-ascii-0
bcsymb.ttf -misc-BCSYMB-medium-r-normal--0-0-0-0-p-0-ascii-0
bcsymbbd.ttf -misc-BCSYMB-bold-r-normal--0-0-0-0-p-0-ascii-0
bcsymx.ttf -misc-BCSYMX-medium-r-normal--0-0-0-0-p-0-iso10646-1
bcsymxbd.ttf -misc-BCSYMX-bold-r-normal--0-0-0-0-p-0-iso10646-1

This is necessary for the re-encoding to work properly. ttmkfdir might have put in additional encodings, which is alright. It's just necessary for these lines to be there. I also discovered to my annoyance that if the time stamp of fonts.dir was before fonts.scale, then on startup the font server would rescan the directories and delete the above lines. It took me a while to figure out why things weren't working. The BCSYMX font contains the lagre operators and delimiters, like scalable brackets and integral signs. The font will work as ascii-0 encoded, but the spacing is right as iso10646-1 encoded.

I also just noticed that the bold fonts do not work. I'm not sure why, but I think that it may be related to problems Wine has in distinguishing between "medium" and "normal" fonts. But the bold fonts do seem to work sometimes. Weird.

Another problem I've encountered is that the save common dialog box does not revert to where the file was loaded from, but the directory where the open dialog box was last pointing to. This is annoying if you load files from the recent files under the File menu. There is also a problem with some of the key bindings. All of my macros seem to work, but some of the built-in key bindings do not seem to. For instance, Ctrl+Y does not bring up the style menu, Ctrl+E does not edit a text code, and Ctrl+Shift+D does not switch to default paragraph mode. However, most of the key bindings do work.
Update: It seems that the key bindings problem is a result of using the dvorak xkbmap.

So far I have not tried printing using Wine's built-in Postscript printer driver.

Update: The fonts work just fine without modification under Fedora Core 1, using XFree86 4.3.0-42 and wine-20031118-1fc1winehq. Even though I purchased EXP 5.1 to support Simon Smith, I have not installed it. I am switching to LyX because it is open source.