Mais pourquoi le \fi reste là !

7 views
Skip to first unread message

Vincent Belaïche

unread,
Nov 30, 2021, 6:01:43 AM11/30/21
to
Bonjour,

Voici un ECM :

```LaTeX
\documentclass{minimal}
\newcommand*\Toto[1]{Que le Grand #1 me croque !}
\begin{document}
\tracingmacros=1
\expandafter\Toto\expandafter{\iftrue Cri\fi c}
\tracingmacros=0
\end{document}
```

Dans le journal de transcription j'ai ceci :

```
\Toto #1->Que le Grand #1 me croque !
#1<-Cri\fi c
```

L'argument passé à \Toto est « Cri\fi c » et non « Cric », et ceci
est problématique, à moins que le but fût d'insérer un \fi sans avoir à
équilibrer les \ifxxx et les \fi, ce qui n'est pas le cas.

Dans cet exemple simplissime cela passerait inaperçu, mais pas avec du
code où \Toto serait plus complexe.

Bon, c'est contournable, mais j'aimerais comprendre où j'ai faux, je
pensais que les conditions étaient développables.
--

Vincent Belaïche

unread,
Nov 30, 2021, 6:10:26 AM11/30/21
to
Juste pour dire qu'une solution c'est de faire comme ça :

```
\documentclass{minimal}
\newcommand*\Toto[1]{Que le Grand #1 me croque !}
\begin{document}
\makeatletter
\tracingmacros=1
\expandafter\expandafter\expandafter\Toto
\expandafter\expandafter\expandafter
{\iftrue\expandafter\@firstofone\else\expandafter\@gobble\fi{Cri}c}
\tracingmacros=0
\makeatother
\end{document}
```

Dans ce cas l'argument passé à \Toto devient « \@firstofone{Cri}c » et
on n'est plus embêté par le \fi qui reste.
--
Reply all
Reply to author
Forward
0 new messages