# Making f active in math mode

I am trying to correct a spacing issue in mathspec. I wish to add an extra space after the letter f in math mode, but only if it is not followed by a subscript. I don't want to do this manually every time, so I have tried this code:

\makeatletter
\mathcodef="8000
\DeclareMathSymbol{\f}{\mathalpha}{letters}{f}
\newcommand{\mathf}{\@ifnextchar_{\f}{\f \,}}
\begingroup
\lccode\~=\f
\lowercase{\gdef~{\ifnum\the\mathgroup=\m@ne \mathf \else \f \fi}}
\endgroup
\makeatother


But it doesn't work. It adds the space regardless! How could I fix this?

• the token after \mathf is always \else so never _ (you are missing some \expandafter – David Carlisle Nov 2 '14 at 18:51

When \ifnum is evaluated, \else is not removed, so \mathf sees it and it never scans further for a next _. You should have \expandafter\mathf instead, so the \else is removed up to the matching \fi before \mathf is expanded.

However, I suggest you some better code:

\documentclass{article}
\usepackage{mathspec}
\setmainfont{Hoefler Text}
\setmathfont(Digits,Latin)[Numbers=Lining]{Hoefler Text}
\setmathrm[Numbers=Lining]{Hoefler Text}

\makeatletter
\AtBeginDocument{%
\edef\SAVEfCODE{\the\Umathcodenumf } % just for the test
\Umathcharnumdef\math@f\Umathcodenumf
\mathcodef=\string"8000 }
\begingroup\lccode~=f
\lowercase{\endgroup
\def~{%
\math@f
\ifnum\mathgroup=\m@ne
\expandafter\@firstofone
\else
\expandafter\@gobble
\fi
{\@ifnextchar_{\relax}{\,}}%
}
}
\makeatother

\begin{document}

$f(x)f_1(x)\mathbf{f}(x)\mathbf{f}_1(x)\mathbf{f_1}(x)$

%% Just to show the difference
\Umathcodenumf=\SAVEfCODE\relax
$f(x)f_1(x)\mathbf{f}(x)\mathbf{f}_1(x)\mathbf{f_1}(x)$

\end{document}


The parts with \SAVEfcode are just for showing the difference.

Note: in \ifnum\the\mathgroup, \the is redundant, because \mathgroup is a number. I used \Umath... because its safer in the context of mathspec.

• Then how to add space to the both side of f? – M. Logic Aug 27 at 4:09
• @Mogic Add \, or \mkern2mu (experiment with the value) before \math@f` – egreg Aug 27 at 9:10