I am trying to figure out how to have fine grain control over typesetting my documents. I have been looking at this pdf but I can't seem to figure out how to set symbols such as '(), +, -, =,...' to become slightly heavier than the rest of the math. Is this possible? I also know that unicode math breaks a lot of options with other packages but I use it to achieve a different typeface for the latin and greek characters. I am open to the possibility of removing the dependency on unicode if I can achieve the same thing without it but I would prefer a solution that keeps this package in mind.

  • Then wouldn't it be a Really Good Idea if you included a minimal working example (MWE)? You should look at the documentation for fontspec. Much of the information in the manual you pointed to will be irrelevant if you are using unicode-math. [Not all of it, but much of it.] – cfr Feb 18 '15 at 1:51
  • @cfr: I don't have a minimal working example because I really don't know where to start. From my understanding, if I am using unicode-math then I shouldn't use mathspec or fontspec with it no? – arynhard Feb 18 '15 at 2:00
  • unicode-math loads fontspec. You should not use mathspec, indeed. But you cannot help but use fontspec. – cfr Feb 18 '15 at 2:08

There are two issues here: the first is finding a font that actually contains the glyphs you want, and the second is getting them to appear where you want them.

Here are the currently available OpenType math fonts that offer multiple weights:

  • Lucida Bright Math offers Regular and Demibold
  • Minion Math offers Regular, Medium, Semibold, and Bold (each in five optical sizes)
  • XITS Math offers Regular and Bold

So let's say you're using Minion Math Regular as your main math font, and have decided that Minion Math Semibold is "slightly" bolder in just the way you like (lighter than the bold math version, I presume?). Then, if you want a given symbol to appear semibold throughout your document, you can use the range key of \setmathfont in your preamble, for example as follows:

% Ignoring optical sizes
  range = { "002B,"2212,"003C,"003E,"003D,"007B,"007D,"007C,"0028,"0029 } % +-<>={}|() 

You can find codes for additional Unicode slots or ranges in unimath-symbols.pdf.

If you want to apply the effect only to some parts of the document, you will have to remap the characters every time. You could do something like this:



    range = { "002B,"2212,"003C,"003E,"003D,"007B,"007D,"007C,"0028,"0029 } 
    range = { "002B,"2212,"003C,"003E,"003D,"007B,"007D,"007C,"0028,"0029 } 


$ a + ( b - c ) = x $
$ a + ( b - c ) = x $
$ a + ( b - c ) = x $


If you are using XeLaTeX, you could also use the FakeBold key to distort the appearance of a font that lacks a given designed weight, as described in the fontspec documentation, section 9.3. E.g. for Cambria Math you could do

  range = { "002B,"2212,"003C,"003E,"003D,"007B,"007D,"007C,"0028,"0029 } ,
  FakeBold = 2
]{Cambria Math}

However, this is not really recommendable: the result cannot match a properly designed font aesthetically.


The ultimate answer to your question is: When you are not satisfied with the look of the available fonts, design your own! But font design is hard and tedious work, you probably don't have the time needed left given your other duties in life.

There is a shortcut: When you want to mix characters from different fonts, you can create a virtual font and use that. For hints on how to do this, see this question: How to create a virtual font?

  • Very interesting. Did not know you can do that. Than you for the advice. – arynhard Feb 19 '15 at 15:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.