在 Tikzcd 中使用用户定义的命令

在 Tikzcd 中使用用户定义的命令
\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}

在此处输入图片描述

相关内容