マクロ引数を部分的に拡張

Aug 18 2020

私はtikz写真のライブラリを持っています。

\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。別のコマンド名を選択するだけです。次に、\Verbfromfvextraパッケージは\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}