Argument de macro en expansion partielle

Aug 18 2020

J'ai une bibliothèque d'images tikz, par exemple.

\newcommand*{\mypic}[1]{
\begin{tikzpicture}
 %...
\end{tikzpicture}
 }

que je voudrais imprimer avec leurs noms (y compris les arguments). cependant,

\renewcommand{\show}[1]{\verb|#1|\quad #1}
\show{\mypic{a}}

produit

Erreur du package tikz: Désolé, certains packages ont redéfini la signification du signe dollar en mode mathématique. Ceci est incompatible avec tikz et sa bibliothèque calc et peut provoquer des erreurs irrécupérables.

Je suppose que \ show essaie d'étendre son argument dans \ verb. J'ai expérimenté avec \ expandafter mais cela n'a pas aidé. Quand j'ai remplacé \ verb | | avec \ texttt {}, \ show n'aimait pas du tout le nom de la macro.

Réponses

3 muzimuzhiZ Aug 18 2020 at 12:15

Premièrement, il vaut mieux ne pas redéfinir le primitif, par exemple \show. Choisissez simplement un autre nom de commande. Ensuite, \Verbfrom fvextrapackage est plus robuste que \verblorsqu'il est utilisé dans une autre macro.

\documentclass{article}
\usepackage{fvextra}
\usepackage{tikz}

\newcommand*{\mypic}[1]{
  \begin{tikzpicture}
    \node[draw, circle] {text}; 
  \end{tikzpicture}
}

\newcommand{\showTikzPic}[1]{\Verb|#1|\quad #1}

\begin{document}
\showTikzPic{\mypic{}}
\end{document}