On 16/01/2017 9:36 p.m., Joseph Wright wrote:
> On 16/01/2017 08:19, David Carlisle wrote:
>> On 16/01/2017 00:58, Andrew Parsloe wrote:
>>> Only recently have I learnt to distinguish inline from displaystyle
>>> maths mode by using \mode_if_inner:TF. It would be helpful for those of
>>> us who come to expl3 programming without a good prior grounding in TeX
>>> if a comment to this effect could be added to the documentation
>>> (interface3.pdf).
>>>
>>> Andrew
>>
>> \mode_if_inner:TF is a wrapper around \ifinner so can't be used to
>> distinguish inline from display. In fact in math \ifinner can't be used
>> to detect much useful at all, the points at which tex is or is not in
>> inner math mode are not usually interesting. (Unlike testing for inner
>> when in vertical mode that tells you if you are in a box or on the main
>> vertical list)
>
> Indeed, one cannot be sure that display math mode will actually be used
> for any 'display' anyway. See for example the strategy used by breqn:
> all typesetting is done in inline math mode, using \displaystyle where
> appropriate. (Display math mode is used only for obtaining the length of
> the line of text immediately preceding the 'display'.)
>
> Almost certainly you want to use \mathchoice (currently there is no
> interface for this in expl3 beyond the primitive), though you might also
> look at LuaTeX's additional primitives in this area if you are
> considering a 'LuaTeXonly' solution.
>
> Joseph
>
I had forgotten \mathchoice.
I'm not qualified to argue about the use of \mode_if_inner:TF beyond
saying that it has correctly worked to date. *All* the cases of interest
to me are of the following kind. #1 is a token list digestible by
\fp_eval:n (usually with more * and parentheses than are strictly
needed); #2 is a token list consisting of digits and a decimal point (in
fact the rounded decimal number resulting from the fp evaluation of #1).
Andrew
\documentclass{article}
\usepackage{expl3,xparse,amsmath}
\begin{document}
\ExplSyntaxOn
\DeclareDocumentCommand \testinner { m m }
{
\mode_if_inner:TF
{ \mbox{#1} \to\quad { #2 } }
{
\begin{aligned}
\mbox{#1} & \to \\
& { #2 } \\
\end{aligned}
}
}
\ExplSyntaxOff
This is an inline $ \testinner { 2*sin(pi/12)*cos(pi/12) }
{2\sin(\pi/12)\cos(\pi/12)=0.5 } $ expression.
This is a \[ \testinner { 2*sin(pi/12)*cos(pi/12) } {
2\sin(\pi/12)\cos(\pi/12)=0.5 } \]displaystyle expression.
\end{document}

This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
