I realize I’m a few years late here, but as of 2018, we can stop doing workarounds like the earlier answers, clever and impressive as they are.
The simplest approach is just to load unicode-math
and use \symup{\alpha}
and so on, or to get that by default, load unicode-math
with the [math-style=upright]
option. Latin Modern Math, the default math font for unicode-math
, contains an upright Greek math alphabet, and so so most other OpenType math fonts.
The Computer Modern Unicode project has a font very similar to the unslanted italics: CMU Serif Upright Italic. (It does not come in bold, but you might fall back on the FakeBold=
feature from fontspec
or use the defaults.) You can load this only for upright math letters, as follows:
\documentclass[varwidth, preview]{standalone}
\usepackage[math-style=upright]{unicode-math}
\setmathfont{Latin Modern Math}
\setmathfont[range=up/{Latin,latin,Greek,greek}]{CMU Serif Upright Italic}
\begin{document}
\( \alpha + \beta = \pi \)
\end{document}
You can also load this font with the fontspec
package, and there’s an option to load it to replace the italic font in the CMU family, or load it as the normal font and the slanted italic as its companion.
This answer comes following discussion in the comments to the question, to which I refer the reader. I pointed out that my solution at Upright Greek font fitting to Computer Modern works directly at unslanting a font (it is based on Bruno's answer at Shear transform a "box"). I show there how to apply it to greek letter forms, but noted that it only applies to pdflates, whereas the OP had lualatex invocations in the preamble.
The OP then tells me that the \unslant
method works in lua as well (halle-lua-jah), but that the underlying \slantbox
has a problem accepting the color of tikz
nodes. That was news to me, since \slantbox
accepts color just fine as part of a \textcolor
argument, or following a \color
declaration.
I then came across a pgf bug report, https://sourceforge.net/p/pgf/bugs/362/, that would seem to be related to the problem. Since I can't solve that problem myself, I looked for a workaround.
Heiko's answer at How to save the current colour shows a cool technique of \colorlet{slantcolor}{.}
to save the current color (before going into the \mbox
, and then I just re-issued a \color{slantcolor}
inside the \foobox
. That seemed to fix the problem.
To recap, the \unslant
method allows existing italic letters to be made upright in the same font design, and the \colorlet
fix allows this solution to work with colored tikz
nodes. The overall approach works with pdflatex and lualatex.
\documentclass{article}
%\usepackage[utf8]{luainputenc}
\usepackage[T1]{fontenc}
\usepackage{siunitx}
\usepackage{sansmathfonts}
\usepackage[scaled=0.95]{helvet}
\renewcommand{\familydefault}{\sfdefault}
\usepackage{tikz}
\usepackage{scalerel}
\newsavebox{\foobox}
\newcommand{\slantbox}[2][0]{\colorlet{slantcolor}{.}\mbox{%
\sbox{\foobox}{\color{slantcolor}#2}%
\hskip\wd\foobox
\pdfsave
\pdfsetmatrix{1 0 #1 1}%
\llap{\usebox{\foobox}}%
\pdfrestore
}}
\newcommand\unslant[2][-.2]{%
\mkern1mu%
\ThisStyle{\slantbox[#1]{$\SavedStyle#2$}}%
\mkern-1mu%
}
\newcommand\upmu{\unslant\mu}
\begin{document}
Upright greek in math mode: $\mathrm{\mu}$, $\upmu$,
\begin{tikzpicture}
\node[color=red,] {$\upmu$$\mu$};
\end{tikzpicture}
\end{document}
Best Answer
Here's a way with a new math symbol font:
Maybe you don't need the uppercase letters, but it was easy to add them.