Peut-on construire un appel de macro dans une macro ?

Par exemple une macro (macroUn) avec deux arguments, le premier pour le nom d'une autre macro (macroDeux) et le second pour l'argument de cette seconde macro.

\newcommand\macroUn[2]{\#1{#2}} % (Ca ne fonctionne pas)

Est-il possible de faire en sorte que l'appel à macro 1

Ouvrir dans l'éditeur Overleaf
\macroUn{macroDeux}{argument macroDeux}

se traduise par un appel à macro 2 avec son argument : \macroDeux{argument macroDeux}

Ouvrir dans l'éditeur Overleaf
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\newcommand\macroDeux[1]{#1}
\newcommand\macroUn[2]{\textbackslash#1\{#2\}}
\begin{document}
Testing \verb|\macroUN{macroDeux}{789}|: \macroUn{macroDeux}{789} % Ne fonctionne pas, c'est du texte non interprété

Ca ne fonctionne pas, \verb|\macroDeux{789}| est du texte non interprété.

\end{document}

alt text

Posée 05 Nov, 15:01

idefix's gravatar image

idefix
10917
Taux d'acceptation : 7%

Modifiée 05 Nov, 16:10

1

Il y a-t-il une raison à ne pas appeler macroDeux avec la contre oblique? (\macroUn{\macroDeux}{argument macroDeux})

(05 Nov, 15:25) Nikopol Nikopol's gravatar image

Non aucune raison. Du coup cela va fonctionner merci

(05 Nov, 16:20) idefix idefix's gravatar image

Il y a deux façons pour réaliser ça :

  • \newcommand{\macroUn}[2]{#1{#2}} et (c'est #1 et non pas \#1). Dans ce cas il faut utiliser la commande avec la syntaxe \macroUn{\macroDeux}{foo}.

ECM

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\newcommand{\macroDeux}[1]{**#1**}
\newcommand{\macroUn}[2]{#1{#2}}

\begin{document}
\macroUn{\macroDeux}{foo}

\macroUn{\emph}{foo}
\end{document}
  • \newcommand{\macroUn}[2]{\csname #1\endcsname{#2}}. Dans ce cas la commande à utiliser avec la syntaxe \macroUn{macroDeux}{foo}.

ECM

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\newcommand{\macroDeux}[1]{**#1**}
\newcommand{\macroUn}[2]{\csname #1\endcsname{#2}}

\begin{document}
\macroUn{macroDeux}{foo}

\macroUn{emph}{foo}
\end{document}
Lien permanent

Publiée 05 Nov, 16:22

touhami's gravatar image

touhami
3.6k26
Taux d'acceptation : 52%

Modifiée 05 Nov, 21:52

A quoi sert \CMD et \cmd ? Tel quel (avec CMD et cmd) la compilation ne fonctionne pas. Merci pour les deux solutions possibles. Exactement ce que je voulais. Et ça fonctionne très bien.

(05 Nov, 16:48) idefix idefix's gravatar image

Désolé c'est ma faute, j'ai oublié de substituer, chez moi \cmd=\macroDeux et \CMD=\macroUn.

(05 Nov, 21:50) touhami touhami's gravatar image

Résumé des possibilités (j'ai tenté une dernière, mais qui ne fonctionne pas)

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
%% macro appelée
\newcommand{\macroDeux}[1]{**#1**}

%% Pour appel AVEC DEUX arguements et AVEC backslach
\newcommand{\macroUn}[2]{#1{#2}}
%% Pour appel AVEC DEUX arguements et SANS backslach
\newcommand{\macroUnBis}[2]{\csname #1\endcsname{#2}}
%% Pour appel avec UN SEUL argument et AVEC backslash
\newcommand{\macroUnTer}[1]{#1}
%% Pour appel avec UN SEUL argument et SANS backslash (ne fonctionne pas)
\newcommand{\macroUnFour}[1]{\csname #1\endcsname}

\begin{document}

% Appel DEUX arguments et AVEC backslach
Testing appel de \verb|\macroUn{\macroDeux}{foo}| : \macroUn{\macroDeux}{foo}

% Appel DEUX arguments et SANS backslash
Testing appel de \verb|\macroUnBis{macroDeux}{foo}| : \macroUnBis{macroDeux}{foo}

% Autre solution avec UN SEUL argument et appel AVEC backslash
Testing appel de \verb|\macroUnTer{\macroDeux{foo}}| : \macroUnTer{\macroDeux{foo}}

% Autre solution avec UN SEUL argument et appel SANS backslash (ne fonctionne pas)
Testing appel de \verb|\macroUnFour{macroDeux{foo}}| : \macroUnFour{macroDeux{foo}}

Cette derni\`ere que j'ai essay\'e d'adapter ne fonctionne pas
%\CMD{\cmd}{foo}
%\CMD{\emph}{foo}
\end{document}

On obtient :

alt text

Lien permanent

Publiée 05 Nov, 17:52

idefix's gravatar image

idefix
10917
Taux d'acceptation : 7%

Modifiée 05 Nov, 18:15

Vous pouvez aussi définir la commande avec \newcommand{\macroUn}[1]{\csname #1\endcsname} et l'utiliser avec deux arguments \macroUn{emph}{foo}

(05 Nov, 21:57) touhami touhami's gravatar image
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.

Mots-clés de la question :

×4

Question posée : 05 Nov, 15:01

Question vue : 143 fois

Dernière mise à jour : 05 Nov, 21:57