我在用着tikz-cd
对于某些交换图,但如果我尝试用矩阵标记箭头,&
则会出现“未定义的控制序列”。因此,一行中的所有条目都会连接起来,看起来像列向量。以下是一个(最小)工作示例。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd}
\begin{document}
$\begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}$
\begin{tikzcd}
A \arrow{r}{ \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} } & B
\end{tikzcd}
\end{document}
答案1
这是因为tikz-cd
环境是 TikZ 矩阵的包装器,而在 TikZ 矩阵中,then&
并不表示它通常的意思。在 TikZ 矩阵中,then&
是一个命令,它比通常的“跳转到下一个单元格”要多得多。然而,在 AMS 矩阵中,你希望它只是通常的“跳转到下一个单元格”。因此,&
代码中出现的两次 有不同的含义,但你对它们使用了相同的符号。有多种方法可以解决这个问题:
保持 的正常含义
&
,以便它在 AMS 矩阵中工作,在这种情况下,您需要对 TikZ 矩阵使用其他内容。幸运的是,TikZ 提供了一种方法来做到这一点:[ampersand replacement=\&]
在 之后写入 (或其他内容)\begin{tikzcd}
,然后使用\&
(或其他内容)作为 TikZ 单元格分隔符。保留 TikZ 的含义
&
,以便它适用于 TikZ 矩阵,在这种情况下,您需要对 AMS 矩阵使用其他内容。这也相当简单。您将\let\amsamp=&
其放入前言中,然后\amsamp
在代码中使用(不幸的是,似乎\&
不能在这里使用)。重新调整 AMS 的矩阵环境,使其在其环境中重置
&
为通常含义。这并不像看起来那么容易,因为当读取环境时,的 catcode&
已经冻结(因为它在宏的参数中,在本例中\arrow
)。因此,在定义新类型的矩阵环境时,我们必须做一些小\begingroup ... \endgroup
技巧。(显然,要做到这一点,只需重新定义所有其他矩阵环境都建立在其之上的基本 AMS 矩阵环境)。请注意,这也适用于tikzcd
环境之外,因为它实际上做的是说“如果&
是命令,就让它成为&
通常的样子。”(好吧,它是轻微地更复杂,但现在就这样了),并且在正常情况下&
不是一个命令,所以这(几乎)是一个无操作。
\documentclass{article}
%\url{http://tex.stackexchange.com/q/81618/86}
\let\amsamp=&
\usepackage{amsmath}
\usepackage{tikz-cd}
\begingroup
\catcode`\&=13
\gdef\pampmatrix{%
\begingroup
\let&=\amsamp
\begin{pmatrix}%
}
\gdef\endpampmatrix{\end{pmatrix}\endgroup}
\endgroup
\begin{document}
\[
\begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}
\]
\begin{tikzcd}[ampersand replacement=\&]
A \arrow{r}{ \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} } \& B
\end{tikzcd}
\begin{tikzcd}
A \arrow{r}{ \begin{pmatrix} 1 \amsamp 0 \\ 0 \amsamp 1 \end{pmatrix}
} & B
\end{tikzcd}
\begin{tikzcd}
A \arrow{r}{ \begin{pampmatrix}
1 & 0 \\ 0 & 1 \end{pampmatrix} } & B
\end{tikzcd}
\[
\begin{pampmatrix}
1 & 0 \\ 0 & 1
\end{pampmatrix}
\]
\end{document}
作为附言(或 PDF),我想指出,这是区分以下两者的一个很好的例子:做傻事,菲纳格尔, 和欺骗因素一篇文章在IRE 学生季刊1958 年 9 月(也收录在这本精彩的书中科学中的随机漫步,或者可能是科学中的更多随机游动)相关部分如下:
然而,约翰·W·坎贝尔认为,菲纳格尔因子、伪造因子和欺骗因子的背后有着不同的基本结构。他声称,菲纳格尔因子的特点是改变宇宙以适应方程。另一方面,伪造因子改变方程以适应宇宙。最后,欺骗因子改变事物,使宇宙和方程看起来相符,但实际上两者并没有发生任何变化。
例如,当牛顿定律无法与已知的行星运动相匹配时,天王星就被引入宇宙。这是 Finagle 因子应用的一个绝佳例子。
爱因斯坦的相对论研究成果受到水星轨道观测事实的强烈影响。显然,其中引入了虚假因素。
摄影师在拍摄 35 岁以上女性肖像时使用“柔焦”镜头就是伪造因素的一个例子。通过模糊结果,照片看起来更符合事实,更令人满意。
因此,第一个解决方案,即修改 TikZ 以适应 AMS,显然是 Finagle 因子的应用。第二个解决方案,即修改 AMS 以适应 TikZ,显然是敷衍了事。最后一个解决方案,即所有东西突然看起来都正常工作,没有任何外部变化,显然是敷衍了事。