Частично расширяющийся аргумент макроса

Aug 18 2020

У меня есть библиотека картинок тикз, например.

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

которые я хотел бы напечатать вместе с их именами (включая аргументы). Тем не мение,

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

производит

Пакет tikz Ошибка: Извините, в некоторых пакетах переопределено значение знака доллара в математическом режиме. Это несовместимо с tikz и его библиотекой calc и может вызвать неисправимые ошибки.

Думаю, \ show пытается расширить свой аргумент внутри \ verb. Я экспериментировал с \ expandafter, но это не помогло. Когда я заменил \ verb | | с \ texttt {} \ show вообще не печатал имя макроса.

Ответы

3 muzimuzhiZ Aug 18 2020 at 12:15

Во-первых, например, примитив лучше не переопределять \show. Просто выберите другое имя команды. Тогда \Verbfrom fvextrapackage более надежен, чем \verbкогда используется внутри другого макроса.

\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}