![Проблема с командой и tikzcd](https://rvso.com/image/475743/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0%20%D1%81%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BE%D0%B9%20%D0%B8%20tikzcd.png)
Когда я это скомпилирую
$$ \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} $$
работает отлично. Но когда я определяю команду, как эта (обратите внимание, что я сделал поиск и замену в коде выше с помощью #-->+, чтобы сохранить весь текст в точности таким же)
\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}}
и использовать
$$\tfour{a}{b}{c}{d} $$
Я получаю 101 ошибку, начиная с
Неопределенная последовательность управления
В чем проблема?Я просто хочу определить команду, которая будет представлять собой одну и ту же коммутативную диаграмму, все время изменяя текст в узлах.
Кроме того, если я хочу использовать \left \right в команде, я получаю разные ошибки.Как правильно использовать их в команде?
Моя преамбула такова:
\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}
А в Style-and-more у меня есть своя команда.
решение1
tikz-cd
хочет видеть explicit &
в своем теле (где он становится активным символом). Всякий раз, когда tikz-cd
появляется в аргументе другой команды (включая \newcommand
), вы должны использовать ampersand replacement
.
Я сделал еще несколько исправлений: \lvert
или \rvert
вместо |
, поэтому скобки не нужны (и интервал будет правильным).
Также $$
следуетникогдаиспользоваться в document
среде 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}