Argumen makro yang berkembang sebagian

Aug 18 2020

Saya memiliki perpustakaan gambar tikz, misalnya.

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

yang ingin saya cetak bersama dengan nama mereka (termasuk argumen). Namun,

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

menghasilkan

Package tikz Error: Maaf, beberapa paket telah mendefinisikan ulang arti dari tanda dolar mode matematika. Ini tidak kompatibel dengan tikz dan pustaka calc-nya dan dapat menyebabkan kesalahan yang tidak dapat dipulihkan.

Saya kira \ show mencoba untuk memperluas argumennya di dalam \ verb. Saya bereksperimen dengan \ expandafter tetapi tidak membantu. Saat saya mengganti \ verb | | dengan \ texttt {}, \ show tidak mencetak nama makro sama sekali.

Jawaban

3 muzimuzhiZ Aug 18 2020 at 12:15

Pertama, lebih baik tidak mendefinisikan ulang primitif, misalnya \show. Pilih saja nama perintah lain. Kemudian, \Verbfrom fvextrapackage lebih kuat daripada \verb, saat digunakan di dalam makro lain.

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