15

If I create a text cell and type some greek text, most of the symbols are italics as if the cell had an Input style. It doesn't happen with latin characters. I recollect that it is impossible to fix it, but I can't find the source where I read it.

Perhaps someone knows a workaround ? The following screenshot is from Mathematica 8/Linux.

enter image description here

EDIT1: I just noticed that writing capital greek letters works fine (the letters are normal, not italics). The following screenshot is from Mathematica 9.0.1/OSX Mavericks.

enter image description here

Does that piece of information ring any bells to anyone on what might be the underlying problem ?

EDIT2: I also found this link describing a workaround by using custom modified unicode mapping files. I can't check it right now as I'm not near my Linux installation.

EDIT3: I did try it though in Mathematica 9.0.1/OSX (although the article talks about Mathematica 7&8/Linux), and it works great! Here is the relevant screenshot:

enter image description here

EDIT4: As pointed out by @ybeltukov in comments, the workaround is to set the third column of UnicodeFontMapping.tr to 0 (zero) for Greek letters so that the default font is picked for them.

EDIT5: This workaround doesn't anymore apply to Mathematica 10. I cannot find the UnicodeFontMapping.tr file. There's another effective workaround though, described here in Alexey's answer.

EDIT6: The workaround from EDIT5 doesn't work for me in Windows 10 and Mathematica 11.0.1 Student Edition. The uncompressed data in FontMap.tr contain a list of replacement rules, including:

  ...
 "GreekFont" -> {913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923,
 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 
 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 
 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969},
 ...

I edited it to be "GreekFont" -> {} and now the workaround works again!

stathisk
  • 3,054
  • 20
  • 37
  • 1
  • 1
    Similar question posted on Wolfram Community – cormullion Sep 22 '13 at 08:40
  • Explanation of your last link: just set the third column of UnicodeFontMapping.tr to 0 for greek letters to choose the default font for them. – ybeltukov Nov 01 '13 at 21:13
  • It's always good to have an answer. I don't think you're allowed to award yourself a bounty, though... :) – cormullion Nov 01 '13 at 22:13
  • @Zet If you answer your own question, it only shows that you really did some research and found an answer by yourself. Especially it shows your effort even after you set a bounty on it. If you want to donate your bounty, you could of course ask ybeltukov whether he likes to write up an answer. If you write up your own, I'm sure the reputation is lost. – halirutan Nov 02 '13 at 13:07
  • Thanks @halirutan! @ybeltukov would you mind posting a short answer? Basically the workaround link and your explanatory comment. If you do so, I will upvote & accept your answer. It would be pity for the reputation points to be lost. If not let me know, and I'll post it my own. – stathisk Nov 02 '13 at 13:17
  • @ybeltukov See the comment above. Zet, I think you cannot ping more than one person in the comment. – halirutan Nov 02 '13 at 13:25
  • 1
    Related for version 10: (54721) – Mr.Wizard Aug 20 '14 at 03:11

2 Answers2

7

Font for the Greek letters is defined in UnicodeFontMapping.tr:

...
0x03B1      N       -2      0x61        # \[Alpha]
0x03B2      N       -2      0x62        # \[Beta]
0x03B3      N       -2      0x67        # \[Gamma]
0x03B4      N       -2      0x64        # \[Delta]
0x03F5      N       2       0x65        # \[Epsilon]
0x03B5      N       -4      0xb6        # \[CurlyEpsilon]
0x03B6      N       -2      0x7a        # \[Zeta]
...

The third column defines the font. You can set it in corresponding lines to 0 (default font).

This approach was used in your link. Difference between the original file and the file in this link:

--- UnicodeFontMapping.tr       2012-10-26 12:11:10.000000000 +0200
+++ UnicodeFontMapping.tr.v8    2013-11-01 22:09:05.000000000 +0100
...
-0x03B1         N               -2              0x61            # \[Alpha]
-0x03B2         N               -2              0x62            # \[Beta]
-0x03B3         N               -2              0x67            # \[Gamma]
...
+0x03B1         N               0               0x61            # \[Alpha]
+0x03B2         N               0               0x62            # \[Beta]
+0x03B3         N               0               0x67            # \[Gamma]
...
ybeltukov
  • 43,673
  • 5
  • 108
  • 212
  • 2
    This is generally true, but not for Mathematica 10. In latter case one should follow DBM's answer below or, more generally, http://mathematica.stackexchange.com/questions/55711/wrong-font-selection-for-some-characters-in-mathematica-10-for-linux. – Alexey Bobrick Sep 30 '14 at 19:24
  • @AlexeyBobrick This answer was written before Mathematica 10 release :) – ybeltukov Sep 30 '14 at 19:42
  • 1
    Yes, which makes it funny in a way. Quite a few times I found good solutions to problems, which don't work in V10 anymore. – Alexey Bobrick Sep 30 '14 at 19:45
7

For OS X Mathematica v10, one can edit /Applications/Mathematica.app/FontMap.tr to enable writing Greek letters in any font supporting them. In my case, I wanted µ (\[Micro]) to display with my preferred font (CMU Bright Roman) rather than the Mathematica font. The solution was to open FontMap.tr, copy the string within CompressedData[str], paste it into fontMap=Uncompress[str] in a new workbook, delete 181 (character code for \[Micro]) at position 32 of fontMap[[1,2]] by running fontMap[[1,2]]=Drop[fontMap[[1,2]],{32,32}], recompress by running Compress[fontMap], copy the resulting compressed string, past it over the original string within CompressedData[str] of FontMap.tr and then save FontMap.tr. I kept a backup of the original FontMap.tr file. Now Style["µ", FontFamily -> "CMU Bright"] displays µ with my chosen font.

I suppose this could be done for other Greek letters as well.

DBM
  • 395
  • 2
  • 6
  • Thanks @DBM! So, I should delete all character codes for Greek letters in the font map and then use Style[] to choose a Greek font ? – stathisk Aug 25 '14 at 21:19
  • I think that should work, but have not tried this on more than one greek letter. Keep a backup of the original FontMap.tr file... – DBM Aug 26 '14 at 05:13
  • 2
    You might like to check http://mathematica.stackexchange.com/questions/55711/wrong-font-selection-for-some-characters-in-mathematica-10-for-linux, where I elaborate a bit on your answer. – Alexey Bobrick Sep 30 '14 at 19:22
  • @Zet: Yes, you can make Mathematica to keep all the greek characters by just one command, see the link above this comment. – Alexey Bobrick Sep 30 '14 at 19:23
  • For the record: @AlexeyBobrick's solutions worked perfectly! – stathisk Nov 02 '14 at 03:07
  • @Zet, thanks! Good to hear! In fact the new solution is rather similar in spirit to the old ones, but however works in V10. – Alexey Bobrick Nov 02 '14 at 10:36