tikz-cd“未定义的控制序列”

tikz-cd“未定义的控制序列”

我从 tikzcd 手册中剪切粘贴了一个基本示例,但一直收到错误消息。这是一个最小示例:

\documentclass{beamer}
\usepackage{tikz-cd}
\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
\begin{document}
\begin{frame}
  $$
  \begin{tikzcd}
%    \\
    & C
  \end{tikzcd}
  $$
\end{frame}
\end{document}

这个例子有效,但如果取消注释 \ 行,我会收到错误消息

\pgf@matrix@no@eom@found ->\cr 
                               \noalign {\vskip \pgf@y \ifpgf@matrix@fixed \...
l.14 \end{frame}

如果我在这些错误信息上继续按“返回”,我会收到更多不同的错误信息:

? 
! Missing } inserted.
<inserted text> 
                }
l.13 \end{frame}
                
? 
! Missing } inserted.
<inserted text> 
                }
l.13 \end{frame}
                
? 
! Missing \cr inserted.
<inserted text> 
                \cr 
l.13 \end{frame}
                
? 
! Misplaced \cr.
<inserted text> \cr 
                    
l.13 \end{frame}

代码取自手册,所以我很困惑。如果这很重要,我正在使用 TexLive 2017/Debian。

感谢您的帮助!

答案1

有两种可能性,我将用两个不同的框架来展示。

\documentclass{beamer}
\usepackage{tikz-cd}
\usepackage[english]{babel}

\begin{document}

\begin{frame}

\[
  \begin{tikzcd}[ampersand replacement=\&]
   A \arrow[r] \& B \arrow[d]\\
   \& C
  \end{tikzcd}
\]

\end{frame}

\begin{frame}[fragile]

\[
  \begin{tikzcd}
   A \arrow[r] & B \arrow[d]\\
   & C
  \end{tikzcd}
\]

\end{frame}

\end{document}

第一种方法效率更高,但是有点烦人;第二种方法速度较慢,因为它需要写入文件并输入。

在此处输入图片描述

为什么需要ampersand replacement=\&?因为当读入非fragile框架代码时,您实际上是将内容作为参数传递给命令,tikz-cd然后需要技巧。在这种fragile情况下,框架代码是从文件输入的,因此它不被视为命令的参数。

另外两条评论:永远不要$$在 LaTeX 中使用。而且latin1确实过时了:以 UTF-8 保存文件,你会更开心。

相关内容