emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: breakage: Using self-defined Macro in macro definition


From: Berry, Charles
Subject: Re: breakage: Using self-defined Macro in macro definition
Date: Mon, 20 Jan 2020 19:04:14 +0000


> On Jan 20, 2020, at 2:27 AM, Robert Klein <address@hidden> wrote:
> 
> 
> Hi,
> 
> when I use a self-defined macro in a macro definition, subsequent
> macros in the same macro definition don't get expanded (tested with
> org version 9.2.1 and tip of maint):


The expansions in your example follow the rules. 

The problem as explained below is that you have created a macro whose expansion 
cannot be further expanded.

> 
> --- snip example ---
> #+Macro: newline (eval "\n")

That will add a newline character.

> #+Macro: new $1 {{{newline}}}#+Index: $1 {{{newline}}}

This is a bit tricky. It adds a newline character before the hash `#'.

Then you have this line in the current buffer (see the 
`org-export-with-buffer-copy' docstring):

#+Index: $1 {{{newline}}} 

and org needs to do something with it, but as the manual says

Org recognizes macro references in following Org markup areas:
paragraphs, headlines, verse blocks, tables cells and lists.  Org also
recognizes macro references in keywords, such as ‘CAPTION’, ‘TITLE’,
‘AUTHOR’, ‘DATE’, and for some back-end specific export options.

and INDEX was not one of the keywords, so the reference is not recognized. 

So it is not expanded. This has nought to do with it being `self-defined'.

Of course, you see it on export if the exporter deals with INDEX (it looks like 
you are using 'latex).

> 
> Use the {{{new(format)}}}
> command to format a string according to the
> /format-string/ argument.
> --- snip example ---
> 
> 
> the output of which is:
> 
> --- snip resulting output ---
> Use the format a 
> \index{format {{{newline}}}}
> command to format a string according to the
> \emph{format-string} argument.
> --- snip resulting output ---
> 
> 

As expected.

> The expected output would be:
> 
> --- snip expected output ---
> Use the format a 
> \index{format} 
> command to format a string according to the
> \emph{format-string} argument.
> --- snip expected output ---
> 
> 
> PS: leaving the second {{{newline}}} out is not a solution, as
> paragraph reformatting will put the macro in the middle of the line.
> 
> 
> 
> The issue doesn't crop up, when using a predefined macro, e.g. ` date'
> or `author'.
> 
> 
> It also doesn't show up, when the first macro in the macro is e.g. the
> predefined macro `date'.  That is the following example 2 works ok:
> 
> --- snip example 2 ---
> #+Date: <2020-01-20 Mon>
> #+Macro: old $1 {{{date}}} {{{newline}}} alpha {{{newline}}} beta
> 
> {{{old}}}
> --- snip example 2 ---
> 
> 
> Thanks for any hints/help.
> 

None of those examples involve a macro that creates output in which further 
macros cannot be recognized.

Build an `eval' macro that does all the expansions within its own code without 
referring to other macros. The property API may help with this.

Or maybe try an idiom that does not use a macro, such as a custom link.

HTH,

Chuck

reply via email to

[Prev in Thread] Current Thread [Next in Thread]