Expandindo parcialmente o argumento macro

Aug 18 2020

Tenho uma biblioteca de fotos tikz, por exemplo.

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

que eu gostaria de imprimir junto com seus nomes (incluindo argumentos). Contudo,

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

produz

Erro do pacote tikz: Desculpe, alguns pacotes redefiniram o significado do cifrão do modo matemático. Isso é incompatível com o tikz e sua biblioteca calc e pode causar erros irrecuperáveis.

Eu acho que \ show está tentando expandir seu argumento dentro de \ verb. Experimentei o \ expandafter mas não adiantou. Quando substituí \ verb | | com \ texttt {}, \ show não imprimiu o nome da macro.

Respostas

3 muzimuzhiZ Aug 18 2020 at 12:15

Em primeiro lugar, é melhor não redefinir primitivo, por exemplo \show. Basta escolher outro nome de comando. Então, \Verbfrom fvextrapackage é mais robusto do que \verbquando usado dentro de outra 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}