- From: Massimiliano Gubinelli <address@hidden>
- To: Giovanni Piredda <address@hidden>
- Cc: address@hidden
- Subject: Re: Conditional definition of Scheme functions and typesetting of trees
- Date: Wed, 18 Nov 2020 00:57:50 +0100
Dear Giovanni,
independently of the way you achieve this, I do not understand what it is
useful for in your application. Why you want to change the appearence of the
* according to whether you are in an equation or not? Cannot you simply say
that all the unit of measure are in math mode? For example, usually when I
type numbers which have a matematical meaning I always initiate an equation.
Max
>
On 18. Nov 2020, at 00:37, Giovanni Piredda <address@hidden> wrote:
>
>
Hi Max,
>
>
I think I understand it now (I will try it tomorrow). Thanks for the
>
explanation.
>
>
I have a memory of seeing a procedure that finds out if a tree is inside a
>
math environment, and that I have even tested it, but I need to find it
>
again.
>
>
Perhaps that is the way to achieve what I would like to achieve
>
(typesetting something in a way that depends on where it is, and not in a
>
way that depends on where *the cursor* is), but I first need to find it
>
again in the documentation).
>
>
G.
>
>
>
On 18.11.20 00:32, Massimiliano Gubinelli wrote:
>
> As an example, try to use my macro and then create an equation and enter
>
> it with the cursor, then make "Update all" (Shift+Cmr+R) and you will see
>
> that the value of all the instances of the macro will change to "+++". If
>
> now you go with the cursor on the text and then you do again "Update all",
>
> then all the instances change to "xxxx". This depends where the cursor is,
>
> not where the macro are called. And "Update all" just force TeXmacs to
>
> rexpand all the document from the start.
>
>
>
> Best
>
> Max
>
>
>
>
>
>> On 18. Nov 2020, at 00:29, Massimiliano Gubinelli <address@hidden> wrote:
>
>>
>
>> Dear Giovanni,
>
>> my understanding of the matter can be wrong (or not totally correct)
>
>> however is as follows:
>
>>
>
>> 1) In order to display your document, TeXmacs need to transform the
>
>> document tree into a series of boxes which indicate where and what put on
>
>> the screen or on the paper. This transformation go thru several phases,
>
>> one of which is the macro expansion phase, i.e. markup in the document is
>
>> evaluated until primitive markup is reached, which then allows to compute
>
>> boxes and the material which will eventually end up on your screen.
>
>>
>
>> 2) Every time the document is modified, for example by the user editing
>
>> it inserting some text in some position of the document tree, TeXmacs
>
>> perform the computations in 1) to transform the modified document tree
>
>> into a new sequence of rendering instructions.
>
>>
>
>> 3) If you put some \extern markup in the document, then when TeXmacs
>
>> tries to expand that markup it (by definition) goes on by calling the
>
>> scheme procedure and replacing the \extern markup with the result of the
>
>> scheme procedure. Now, the scheme procedure does not have *any*
>
>> informations on where the \extern markup was in the document tree. So
>
>> scheme cannot know if we were in an equation or in a piece of text.
>
>>
>
>> Your confusion is to believe that in-math? returns true in a situation
>
>> where you use \extern inside an equation. This is not true, in my
>
>> understanding.
>
>>
>
>> in-math? is true only if the *editor* is in math mode, that is your
>
>> cursor is inside an equation. This is a global mode of the editor and if
>
>> it happens that your macro is evaluated again at that moment, then the
>
>> predicate returns true, but this does not depend on the position of your
>
>> \extern in the document tree, but on the current position of the cursor
>
>> at the moment TeXmacs tries to recompute that part of the tree.
>
>>
>
>> Maybe this description is not totally correct (I'm not sure how and when
>
>> exaclty TeXmacs goes to a reexpansion of the macros) but seems coherent
>
>> with the bizzare behaviour of your macros.
>
>>
>
>> Also try \extern with a procedure of the form
>
>>
>
>> (define (myfunc) (if (in-math?) "+++" "xxxx")))
>
>> to see how, even when you put it in regular text, you can have "+++" if,
>
>> right away you then enter into math mode.
>
>>
>
>> HTH,
>
>> Max
>
>>
>
>>
>
>>
>
>>> On 17. Nov 2020, at 23:29, Giovanni Piredda <address@hidden> wrote:
>
>>>
>
>>> I am going to answer your previous message (thanks for that by the way)
>
>>> but before that: I do not follow the explanation in this message on the
>
>>> in-math? predicate, I have an idea of what you might mean, but maybe the
>
>>> idea is wrong :-)
>
>>>
>
>>> Let me write it down here.
>
>>>
>
>>> Starting from:
>
>>>
>
>>> "As I open the file, where I have the macro (which calls Scheme code via
>
>>> extern) both inside math and outside math, they are all executed as if
>
>>> in text mode.
>
>>>
>
>>> If I edit one of them, now the predicate in-math? has effect."
>
>>>
>
>>> you say that when I open the file TeXmacs is only typesetting (and
>
>>> therefore uses the default function, as (in math?) returns always #f),
>
>>> but when I am editing TeXmacs knows what I am editing and lets Scheme
>
>>> know. Is it that?
>
>>>
>
>>> The follow-up question in this case is how can I obtain what I want,
>
>>> that is a different function being called ever time the macro is
>
>>> executed, that is also at the opening of the file. The aim seems
>
>>> sensible to me - typesetting something in one way when in math and in
>
>>> one way when in text (as I said above, now it is working when I
>
>>> write/edit, it is not working if I close and open again a document).
>
>>>
>
>>> Besides, doing Document->Update all hangs the document for a one/two
>
>>> minutes (Ubuntu 20.10, I observed it in another document too), makes the
>
>>> macros work well (upright in math, no asterisks, so it is recognizing
>
>>> the math), which is pretty surprising, but destroys the page setup
>
>>> (margins are lost).
>
>>>
>
>>> G.
>
>>>
>
>>>
>
>>> On 17.11.20 22:50, Massimiliano Gubinelli wrote:
>
>>>> Going back to your attempt: I think that the predicate in-math? cannot
>
>>>> be used to check whether the typesetter is working on an equation or
>
>>>> not. No information is passed to Scheme about the internal status of
>
>>>> the typesetter when you call a \extern markup. You can pass
>
>>>> informations only via parameters. So your unitSpacer has no way to know
>
>>>> if the evaluation is inside some math markup or not.
>
>>>>
>
>>>> The predicates in-math?, etc.. are just to check if the editor is in
>
>>>> text, prog, or math mode, for example. Thats is completely separate on
>
>>>> the status of the typesetter.
>
>>>>
>
>>>> HTH,
>
>>>>
>
>>>> Max
>
>>>>
>
>>>>
>
>>>>
>
>>>>> On 17. Nov 2020, at 19:25, Giovanni Piredda <address@hidden> wrote:
>
>>>>>
>
>>>>> I post this here because I think that while being about Scheme in
>
>>>>> TeXmacs is still of general interest. I have found a way of
>
>>>>> circumventing both issues (which may be ok, in case I will ask about
>
>>>>> this in another post) but I am curious to know the reason of the
>
>>>>> behaviours I observe.
>
>>>>>
>
>>>>> First issue.
>
>>>>>
>
>>>>> I have defined a Scheme function with the following:
>
>>>>>
>
>>>>> (tm-define (unitSpacer) ; default, will be used in regular text
>
>>>>> `(hspace "0.5spc"))
>
>>>>> (tm-define (unitSpacer)
>
>>>>> (:require (in-math?))
>
>>>>> "*")
>
>>>>>
>
>>>>> As far as I understand, the first definition is the default and it is
>
>>>>> overridden by the second when I am in math.
>
>>>>>
>
>>>>> In my tests, this happens only in open documents. At the first opening
>
>>>>> of a document, only the first definition is used. Does anyone have a
>
>>>>> hint on what is happening? Developers ;-) ?
>
>>>>>
>
>>>>> ===
>
>>>>>
>
>>>>> Second issue.
>
>>>>>
>
>>>>> In math mode, the program I wrote outputs groups of letters, each
>
>>>>> wrapped in a <with|math-font-shape|right primitive, and interleaved
>
>>>>> with the character "*".
>
>>>>>
>
>>>>> Example of output, copied from the terminal using (display ...)
>
>>>>>
>
>>>>> <tree 2 <with|math-font-shape|right|kg>*<with|math-font-shape|right|m>>
>
>>>>>
>
>>>>> I call this from a TeXmacs macro in math mode and I get a typeset
>
>>>>> output where the asterisk appears as such (while I would like it to be
>
>>>>> interpreted as an implicit multiplication)
>
>>>>>
>
>>>>> If I copy the output from the terminal, strip the outermost <tree
>
>>>>> primitive and place it inside a math primitive (opening the .tm file
>
>>>>> with a text editor) the asterisks do not appear (as I thought they
>
>>>>> shouldn't).
>
>>>>>
>
>>>>> Again, suggestions?
>
>>>>>
>
>>>>>
Archive powered by MHonArc 2.6.19.