help-texinfo
[Top][All Lists]

 From: Gavin Smith Subject: Re: Macro introduces \par in Table of Contents Date: Sat, 3 Oct 2020 12:18:41 +0100

On Sat, Oct 3, 2020 at 9:20 AM Christopher Dimech <dimech@gmx.com> wrote:
>
>
> I have written the macro uSubSec
>
> when the title continues on the next line. How can this problem be solved?
>
> Example:
>
> @uSubSec{@value{SecLb}, Probabilistic Characterisation of
> Microseismicity}
>
> @macro uSubSec{label, titl}
>
>   @set lb \label\
>   @ifclear USubSec--No--Label
>     @unnumberedsubsec @value{lb} @ \titl\
>   @end ifclear
>
>   @ifset USubSec--No--Label
>     @unnumberedsubsec \titl\
>   @end ifset
>
> @end macro

Your input does not work with texi2any either, although in that case
the part of the argument on the next line is not even included in the
argument to @unnumberedsubsec. Hence, I do not think that this should
be made to work with TeX.

The best solution I've come up with is to use DEL as a comment
character. (I've never seen a use for this before!)

\input texinfo

@macro uSubSec{label, titl}

@set lb \label\
@unnumberedsubsec @value{lb} @ \titl\

@end macro

@uSubSec{@value{SecLb}, Probabilistic ^?
Characterisation of Microseismicity}

where ^? is the DEL character (byte value 0x7f). This appears to work
perfectly with both texinfo.tex and texi2any.

I found that starting a new line, like

@uSubSec{@value{SecLb},
Probabilistic Characterisation of Microseismicity}

worked with texi2any, but not with TeX.

As usual with macro handling in Texinfo, this is not easy to fix, and
any fix risks breaking something else. There is an @xeatspaces macro
being used around macro arguments that is not being expanded until
quite late on, which might be better expanded earlier with a given
value of active newline, but it would be very complicated if not
impossible to expand this earlier without fully expanding the macro
arguments at the same time (probably some complex arrangement of
\expandafter's which would differ depending on the number of macro
arguments, or repeatedly reading the argument text as a macro argument
and moving expanded arguments one by one to the end). Even if it's
possible it's probably better not to try as it would be error-prone
and hard to understand after the fact.

Another option was changing the definition of active newline away from
@par to a space or an empty string, but this broke using a macro
inside an environment like @example.