Comando problemático y tikzcd

Comando problemático y tikzcd

Cuando compilo esto

 $$ \begin{tikzcd}[column sep={small},nodes={inner sep=2pt}]
 {| +1 \rangle} & {\langle +2|} \\
{\langle +3 |} & {| +4 \rangle}
\arrow[no head, from=1-1, to=2-2]
\arrow[no head, from=1-2, to=2-1]
\end{tikzcd} $$

Funciona perfectamente. Pero cuando defino un comando como este (tenga en cuenta que hice una búsqueda y lo reemplacé en el código anterior con #-->+ para mantener todo el texto exactamente igual)

\newcommand{\tfour}[4]{\begin{tikzcd}[column sep={small},nodes={inner sep=2pt}]
 {| #1 \rangle} & {\langle #2|} \\
{\langle #3 |} & {| #4 \rangle}
\arrow[no head, from=1-1, to=2-2]
\arrow[no head, from=1-2, to=2-1]
\end{tikzcd}}

y use

$$\tfour{a}{b}{c}{d} $$

Recibo errores 101, comenzando con

Secuencia de control Indefinido

¿Cuál es el problema?Solo quiero definir un comando que sea el mismo diagrama conmutativo todo el tiempo cambiando el texto en los nodos.

Además, si quiero usar \left \right en el comando, obtengo errores diferentes.¿Cuál es la forma correcta de usarlos en un comando?

Mi preámbulo es este

\documentclass[a4paper,12pt]{amsart}
\usepackage{amsmath,amsthm,amsfonts,amssymb,mathtools,mathrsfs,bm}
\usepackage{nicefrac}
\usepackage{tikz-cd}
\usetikzlibrary{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{float}
\usepackage{subfigure}
\usepackage{xcolor}% xcolor>color
\definecolor{colordelink}{rgb}{0,0,0.50}
\definecolor{colordecite}{rgb}{0,0.5,0}
\definecolor{colordeurl}{rgb}{0,0.41,0.5}

\usepackage[pagebackref=true]{hyperref}
\hypersetup{
colorlinks=true,
linkcolor=colordelink,
citecolor=colordecite,
    urlcolor=colordeurl,
    }

\usepackage[capitalize,nameinlink,noabbrev]{cleveref}
\usepackage[all]{hypcap}

\usepackage{todonotes}



\input{Style-and-more}

Y en Style-and-more tengo mi mando.

Respuesta1

tikz-cdquiere ver explícito &en su cuerpo (donde se convierte en un personaje activo). Siempre que tikz-cdaparezca en el argumento de otro comando (incluido \newcommand), debe usar ampersand replacement.

Hice algunas correcciones más: \lverto \rverten lugar de |, por lo que las llaves no son necesarias (y el espaciado será el correcto).

También $$deberíanuncaser utilizado en un documententorno LaTeX.

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd}

\newcommand{\tfour}[4]{%
  \begin{tikzcd}[
    column sep=small,
    nodes={inner sep=2pt},
    ampersand replacement=\&,
  ]
  \lvert #1 \rangle \& \langle #2\rvert \\
  \langle #3 \rvert \& \lvert #4 \rangle
  \arrow[no head, from=1-1, to=2-2]
  \arrow[no head, from=1-2, to=2-1]
  \end{tikzcd}%
}

\begin{document}

\[
\tfour{a}{b}{c}{d}
\]

\end{document}

ingrese la descripción de la imagen aquí

información relacionada