我从 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 保存文件,你会更开心。