[NTG-context] Changing font for math function

Maggyero maggyero at gmail.com
Tue May 12 16:19:38 CEST 2015


>Hans Hagen wrote:
>for functions one can now use:
>\setupmathematics
>   [functionstyle=\rm]

Fantastic! Thank you Hans, it is way better than the old mechanism
\setmathfunctionstyle. Now I have a few suggestions to improve the
consistency of this new mechanism. First, I think this functionstyle key
a) should be better called 'mathlabelstyle';
b) be default to \tf to make the FONT ALTERNATIVE always upright;
c) be linked to this following new definition in math-ini.mkiv:

+ \unexpanded\def\mathlabel#1{\text{\mathlabelstyle #1}}

so that \mathlabel can be used for labeling math objects like functions but
ALSO for labeling variables with subscripts (e.g., \rho_{\mathlabel{air}}).
The hardcoded \text in the definition of \mathlabel is used here for these
5 reasons:
1. It CAN make the FONT STYLE adaptative to the surrounding style (if the
\mathlabelstyle inside—defined by the user in
\setupmathematics[mathlabelstyle=]—does not specify another FONT STYLE like
\rm, \ss or \tt).
2. It uses proper mathcodes (hyphens are not converted to minus binary
operators—useful if one wants to call its function or subscript
'low-frequency' for instance—, apostrophes are not converted to
primes—useful if one wants to call its function 'Riemann's function' for
instance).
3. It uses proper kerning (if one wants to call its function or subscript
'WALL' for instance).
4. It uses proper ligatures (if one wants to call its function or subscript
'efficiency' for instance).
5. It avoids the user having to add \kern\zeropoint to prevent vertical
alignment to the middle of the fraction bar when used inside \mathop for
one-character function names (if one wants to call its function 'd' for
instance).

That \mathlabel should replace \mfunction which should be removed, and
\mfunctionlabeltext should be removed as well and one should directly use
the already defined \mathlabeltext instead, for these 3 reasons:
1. Every command containing the word 'labeltext' should not have a style
attached to it.
2. The word 'function' is misleading because \mfunction and
\mfunctionlabeltext do not create a \mathop atom and it makes the user
believe its usage is restricted for labeling functions while the command
should also be used for labeling variable with subscripts (e.g.,
\rho_{\mathlabel{air}} is far better than \rho_\mfunction{air}).
3. Using only \mathlabeltext with \setuplabeltext is also more consistent
with the current \labeltext that works with \setuplabeltext.

Thus the function definitions in math-def.mkiv should be changed:

- \definemathcommand [arccos]  [nolop] {\mfunctionlabeltext{arccos}}
+ \definemathcommand [arccos]  [nolop] {\mathlabel{\mathlabeltext{arccos}}}
etc.

And I think you should add in this file the definition of the differential
operator which is so widely used in mathematics, so that users have at
their disposal once for all a proper implementation of this operator and
don't have to make their own hack:

+ \definemathcommand[diff]{\mathop{\mathlabel{d}}\mathopen{}}

With this new \mathlabel command, the user now have a convenient and
consistent way to label its math objets (functions and variables with
subscripts):

\definemathcommand[arsinh][nolop]{\mathlabel{arsinh}}

\starttext
$\arsinh z = \ln\bigl(z + \sqrt{z^2 + 1}\bigr)$\par
$\rho_{\mathlabel{air}} = \frac{p}{R_{\mathlabel{specific}}T}$\par
\stoptext

>Hans Hagen wrote:
>\unprotect
>\def\v!sansnormal {sansnormal}
>%def\v!sansbold   {sansbold}
>\def\v!serifnormal{serifnormal}
>\def\v!serifbold  {serifbold}
>\definealternativestyle [\v!sansnormal]  [\ss\tf]
>%definealternativestyle [\v!sansbold]    [\ss\bf]
>\definealternativestyle [\v!serifnormal] [\rm\tf]
>\definealternativestyle [\v!serifbold]   [\rm\bf]
>\protect

In this case, for completeness, I would also add the definitions for the
remaining style \tt:

\def\v!mononormal {mononormal}
\def\v!monobold {monobold}
\definealternativestyle [\v!mononormal]  [\tt\tf]
\definealternativestyle [\v!monobold]    [\tt\bf]

>Aditya Mahajan wrote:
>\sin etc should not behave like \text{...}. \text should adapt to the
surrounding style while \mathoptext should not. In particular, in the
following
>   {\ss $\sin x$}
>   {\bf $\sin x$}
>\sin should be in normal text upright font and not adapted to the
surrounded text.
>Is it possible to set a value of functionstyle so that the surrounding
text font styles are ignored (but the font size is not).

You should try \mathop{\text{\rm\tf sin}} or \mathoptext{\rm\tf sin} (Hans
defined this \mathoptext in math-ini.mkiv as equal to
\mathop#1{\text{1#}}), or equivalently but better: \mathop{\mathlabel{sin}}
with \setupmathematics[mathlabelstyle=\rm\tf] with the new command
\mathlabel that I have defined above.

And in my opinion, names for operators and subscripts should all be
upright, that is adaptative to the surrounding TEXT STYLE (\rm, \ss and
\tt) BUT not adaptative to the surrounding TEXT ALTERNATIVE or MATH
ALTERNATIVE (\it, \bi, \sl, \bs) and stay in the normal alternative \tf
(upright). So for your case it becomes simply \mathop{\text{\tf sin}} or
equivalently  but better: \mathop{\mathlabel{sin}} with
\setupmathematics[mathlabelstyle=\tf].

About \mathupright: it is just a wrapper for \rm\tf. Better use
\text{\rm\tf} or equivalently \mathop{\mathlabel{}} with
\setupmathematics[mathlabelstyle=\rm\tf].

Here is a little example showing the behaviour of the new command
\mathlabel defined above:


\define\mathlabelstyle{\tf} % I don't have access to the last beta yet so
let's assume that the key 'mathlabelstyle' (called by Hans 'functionstyle'
so far) of \setupmathematics is implemented this way, with the default
value \tf (Aditya prefers \rm\tf as the default value so it is just a
matter of taste).
\define[1]\mathlabel{\text{\mathlabelstyle #1}}

\define\function{\dosingleempty\dofunction}
\def\dofunction[#1]#2{%
    \iffirstargument

\doifelse{#1}{limop}{\mathlimop{\mathlabel{#2}}}{\mathop{\mathlabel{#2}}}
    \else
        \mathop{\mathlabel{#2}}
    \fi}

\definemathcommand[arsinh][op]{\mathlabel{arsinh}}

\startbuffer
    $\arsinh x\ \text{and}\ n_{\mathlabel{red}}$
\stopbuffer

\starttext
\defineparagraphs[myparagraphs][n=5, rule=on]
\setupparagraphs[myparagraphs][1][width=\dimexpr 0.3\textwidth\relax]
\setupparagraphs[myparagraphs][2][width=\dimexpr 0.3\textwidth\relax]
\setupparagraphs[myparagraphs][3][width=\dimexpr 0.3\textwidth\relax]

\section{{\tt \backslash setupmathematics[mathlabelstyle=\backslash tf]}
(default)}

\startmyparagraphs
\switchtobodyfont[rm]
{\tt \backslash switchtobodyfont[rm]}\crlf
{\tt \backslash tf}: {\tf \getbuffer}\par
{\tt \backslash bf}: {\bf \getbuffer}\par
{\tt \backslash it}: {\it \getbuffer}\par
{\tt \backslash bi}: {\bi \getbuffer}\par
{\tt \backslash sl}: {\sl \getbuffer}\par
{\tt \backslash bs}: {\bs \getbuffer}\par
\nextmyparagraphs

\switchtobodyfont[ss]
{\tt \backslash switchtobodyfont[ss]}\crlf
{\tt \backslash tf}: {\tf \getbuffer}\par
{\tt \backslash bf}: {\bf \getbuffer}\par
{\tt \backslash it}: {\it \getbuffer}\par
{\tt \backslash bi}: {\bi \getbuffer}\par
{\tt \backslash sl}: {\sl \getbuffer}\par
{\tt \backslash bs}: {\bs \getbuffer}\par
\nextmyparagraphs

\switchtobodyfont[tt]
{\tt \backslash switchtobodyfont[tt]}\crlf
{\tt \backslash tf}: {\tf \getbuffer}\par
{\tt \backslash bf}: {\bf \getbuffer}\par
{\tt \backslash it}: {\it \getbuffer}\par
{\tt \backslash bi}: {\bi \getbuffer}\par
{\tt \backslash sl}: {\sl \getbuffer}\par
{\tt \backslash bs}: {\bs \getbuffer}\par
\stopmyparagraphs

\section{{\tt \backslash setupmathematics[mathlabelstyle=\backslash
rm\backslash tf]} (Aditya's setup)}
\define\mathlabelstyle{\rm\tf}

\startmyparagraphs
\switchtobodyfont[rm]
{\tt \backslash switchtobodyfont[rm]}\crlf
{\tt \backslash tf}: {\tf \getbuffer}\par
{\tt \backslash bf}: {\bf \getbuffer}\par
{\tt \backslash it}: {\it \getbuffer}\par
{\tt \backslash bi}: {\bi \getbuffer}\par
{\tt \backslash sl}: {\sl \getbuffer}\par
{\tt \backslash bs}: {\bs \getbuffer}\par
\nextmyparagraphs

\switchtobodyfont[ss]
{\tt \backslash switchtobodyfont[ss]}\crlf
{\tt \backslash tf}: {\tf \getbuffer}\par
{\tt \backslash bf}: {\bf \getbuffer}\par
{\tt \backslash it}: {\it \getbuffer}\par
{\tt \backslash bi}: {\bi \getbuffer}\par
{\tt \backslash sl}: {\sl \getbuffer}\par
{\tt \backslash bs}: {\bs \getbuffer}\par
\nextmyparagraphs

\switchtobodyfont[tt]
{\tt \backslash switchtobodyfont[tt]}\crlf
{\tt \backslash tf}: {\tf \getbuffer}\par
{\tt \backslash bf}: {\bf \getbuffer}\par
{\tt \backslash it}: {\it \getbuffer}\par
{\tt \backslash bi}: {\bi \getbuffer}\par
{\tt \backslash sl}: {\sl \getbuffer}\par
{\tt \backslash bs}: {\bs \getbuffer}\par
\stopmyparagraphs

\section{{\tt \backslash setupmathematics[mathlabelstyle=\backslash bf]}}
\define\mathlabelstyle{\bf}

\startmyparagraphs
\switchtobodyfont[rm]
{\tt \backslash switchtobodyfont[rm]}\crlf
{\tt \backslash tf}: {\tf \getbuffer}\par
{\tt \backslash bf}: {\bf \getbuffer}\par
{\tt \backslash it}: {\it \getbuffer}\par
{\tt \backslash bi}: {\bi \getbuffer}\par
{\tt \backslash sl}: {\sl \getbuffer}\par
{\tt \backslash bs}: {\bs \getbuffer}\par
\nextmyparagraphs

\switchtobodyfont[ss]
{\tt \backslash switchtobodyfont[ss]}\crlf
{\tt \backslash tf}: {\tf \getbuffer}\par
{\tt \backslash bf}: {\bf \getbuffer}\par
{\tt \backslash it}: {\it \getbuffer}\par
{\tt \backslash bi}: {\bi \getbuffer}\par
{\tt \backslash sl}: {\sl \getbuffer}\par
{\tt \backslash bs}: {\bs \getbuffer}\par
\nextmyparagraphs

\switchtobodyfont[tt]
{\tt \backslash switchtobodyfont[tt]}\crlf
{\tt \backslash tf}: {\tf \getbuffer}\par
{\tt \backslash bf}: {\bf \getbuffer}\par
{\tt \backslash it}: {\it \getbuffer}\par
{\tt \backslash bi}: {\bi \getbuffer}\par
{\tt \backslash sl}: {\sl \getbuffer}\par
{\tt \backslash bs}: {\bs \getbuffer}\par
\stopmyparagraphs
\stoptext


Maggyero
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ntg.nl/pipermail/ntg-context/attachments/20150512/e1a1f2ac/attachment-0001.html>


More information about the ntg-context mailing list