[Tex/LaTex] Charter and Helvetica with greek letters in LaTeX or XeLaTeX

fontsgreeksubstitutionxetex

So I want to write a document (german) with Charter and Helvetica. The problem is that I need to have lowercase upright greek letters in the body as well as in the section headers in their respective fonts.

My attempt with LaTeX:

\documentclass{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[charter,greeklowercase=upright]{mathdesign}
\usepackage{helvet}

\begin{document}

\section{Text: ä ß $\alpha$ $\beta$ $\mu$ in Helvetica}

Text: ä ß $\alpha$ $\beta$ $\mu$ in Charter

\end{document}

results in:

enter image description here

I guess I would need two things here:
1. a version of Helvetica with matching math support and
2. a way to input more than one math font in LaTeX.

Is this possible?

My attempt with XeLaTeX:

\documentclass{scrartcl}

\usepackage{fontspec}
\setmainfont{XCharter}
\setsansfont{Helvetica}

\begin{document}

\section{Text: ä ß α β μ in Helvetica}

Text: ä ß α β μ in Charter

\end{document}

results in:

enter image description here

This is almost as I want it, but XCharter does not have greek letters. So I guess I would need one of two things here:
1. a version of Charter with greek letters or
2. a way to substitute those missing glyphs in Charter from a very similar font.

I am aware of Charis SIL, but I really don't like its thickness and especially its greek letters.

Any help is much appreciated!

Best Answer

You can use textgreek with its quite powerful substitution mechanism.

\documentclass{scrartcl}

\usepackage[utf8]{inputenc}

\usepackage[charter]{mathdesign}
\usepackage{helvet}
\usepackage{textgreek}
\renewcommand*{\textgreekfontmap}{%
  {phv/*/*}{LGR/neohellenic/*/*}%
  {*/b/n}{LGR/artemisia/b/n}%
  {*/bx/n}{LGR/artemisia/bx/n}%
  {*/*/n}{LGR/artemisia/m/n}%
  {*/b/it}{LGR/artemisia/b/it}%
  {*/bx/it}{LGR/artemisia/bx/it}%
  {*/*/it}{LGR/artemisia/m/it}%
  {*/b/sl}{LGR/artemisia/b/sl}%
  {*/bx/sl}{LGR/artemisia/bx/sl}%
  {*/*/sl}{LGR/artemisia/m/sl}%
  {*/*/sc}{LGR/artemisia/m/sc}%
  {*/*/sco}{LGR/artemisia/m/sco}%
}

\begin{document}

\section{Text: ä ß α β μ in Helvetica}

Text: ä ß α β μ in Charter

\end{document}

Here I use NeoHellenic for sans serif and Artemisia for serif.

enter image description here

With XeLaTeX you can use ucharclasses:

\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage[Latin,Greek]{ucharclasses}
\usepackage{pdftexcmds}

\setmainfont{XCharter}
\setsansfont{Helvetica}[Scale=MatchUppercase,NFSSFamily=phv]

\newfontfamily{\artemisia}{GFS Artemisia}

\setTransitionsForGreek{\begingroup\checkhelvetica}{\endgroup}
\makeatletter
\newcommand{\checkhelvetica}{%
  \ifnum\pdf@strcmp{\f@family}{phv}=\z@\else\artemisia\fi
}
\makeatother

\begin{document}

\section{Text: ä ß α β μ in Helvetica}

Text: ä ß α β μ in Charter

\end{document}

The test can be made more complicated if you also need to cope with other font families. As you see, if Helvetica is the current font, the transition just opens and closes a group; otherwise it chooses the Artemisia font.