\documentclass{article}
\usepackage{amsmath,amscd,amssymb,amsthm,graphicx,amsxtra}
\usepackage{verbatim}
\usepackage{tikz-cd,xparse}
\usetikzlibrary{matrix,arrows,decorations.pathmorphing}
\newcommand {\dc}[3]{$#1_{#2,#3}$}
\begin{document}
\begin{tikzcd}
{} \dc B {-2} 2 \arrow[dotted]{l} &\dc B {-1} 2 \arrow{l} &dc B 0 2 \arrow{l} &\dc B 1 2 \arrow{l} & \dc B 2 2 \arrow{l} &{} \arrow[dotted]{l}\\
\end{tikzcd}
\end{document}
我编写了这个和它的几个变体(使用括号,没有空格,使用“&符号替换”等)来制作但遗憾的是,这些都不起作用。我知道我可以通过 (_) 来解决这个问题,但我想知道为什么我的代码不起作用。我需要生成几个这样的图像和对象,这(对我来说)是定义新命令的第一步,但它失败了。不断出现的错误是
包 pgfbasematrix 错误:单个 & 符号与错误的 catcode 一起使用。
答案1
环境中的单元格tikzcd
预计处于数学模式,因此您的定义\dc
应该省略$
符号。
\documentclass{article}
\usepackage{amsmath,amssymb,amsthm,graphicx}
\usepackage{tikz-cd}
\usetikzlibrary{matrix,arrows,decorations.pathmorphing}
\newcommand {\dc}[3]{#1_{#2,#3}}
\begin{document}
\begin{tikzcd}
{} &
\dc{B}{-2}{2} \arrow[dotted]{l} &
\dc{B}{-1}{2} \arrow{l} &
\dc{B}{0}{2} \arrow{l} &
\dc{B}{1}{2} \arrow{l} &
\dc{B}{2}{2} \arrow{l} &
{} \arrow[dotted]{l}
\end{tikzcd}
\end{document}
我更喜欢总是使用括号括住参数,尽管语法并不严格要求这样做。但是在这种情况下,我认为与键入
B_{-2,2}
答案2
如果我正确理解了您在 egreg 的答案下面的评论,您也希望能够在数学环境之外编写命令。egreg 已经解释了您的 MWE 发生了什么。如果您只是\ensuremath
在他的解决方案中添加一个,您将能够在任何您想要的地方使用此命令。
% arara: pdflatex
\documentclass{article}
\usepackage{tikz-cd}
\newcommand{\dc}[3]{\ensuremath{#1_{#2,#3}}}
\begin{document}
In text it would look like \dc{B}{1}{2}. In inline math it looks the same with $\dc{B}{1}{2}$. Display math looks like this:
\[\dc{B}{2}{3}\]
Finally, you can use it in your commutative diagrams:
\begin{tikzcd}
\null
& \dc{B}{-2}{2} \arrow[dotted]{l}
& \dc{B}{-1}{2} \lar
& \dc{B}{0}{2} \lar
& \dc{B}{1}{2} \lar
& \dc{B}{2}{2} \lar
& \null \arrow[dotted]{l}
\end{tikzcd}
\end{document}