目前,我正在尝试使用 TeXWorks 编辑器创建演示文稿tikzcd
。显然,我的计算机无法\arrow
以我需要的方式识别该命令tikzcd
(仅是理论上)。坦率地说,看起来我的计算机在使用该tikzcd
软件包时存在问题。
这是可行的(好吧,如果你想称其为可行的话......)
\documentclass{beamer}
\usetheme[width=2.18cm]{PaloAlto}
\usefonttheme{serif}
\usepackage{tikz, tikz-cd}
\usetikzlibrary{arrows,shapes,cd}
\begin{document}
\begin{frame}{Not important}
\framesubtitle{Neither important}
$\begin{tikzcd}
\end{tikzcd}$
\end{frame}
\end{document}
但一旦我插入一些有用的东西(例如A&B
,虽然一个单一的A
正在工作时......),我就会得到一个未定义的控制序列指的是\end{frame}
。我想包括这样的内容
我觉得我错过了一个重要的点,即使我直接从上面复制了代码这里。可能出了什么问题,更重要的是:我该如何解决这个问题?
提前致谢!
答案1
以前有人在这里问过这种问题,但我找不到任何有解释的答案(这很可能是我的错)。不管怎样,我们开始吧。在部分8 创建框架手册版本 3.56中beamer
指出(我标出了重要部分)
环境内容可以是普通的 LATEX 文本,但不能包含 \verb 命令或 verbatim 环境或任何改变字符代码的环境,除非给出脆弱选项。
第 61 页还说
如果框架包含易碎文本,则使用不同的内部机制来排版框架,以确保框架内的字符代码可以重置。切换到另一种内部机制的代价是,您无法使用覆盖,或者需要写入和读回外部文件(这并不总是可取的)。
无论如何,由于确实tikz-cd
会更改一些字符代码,因此我们需要添加fragile
。(根据经验,每当在beamer
其他地方正常工作的某些东西不起作用时,都值得添加密钥fragile
并检查这是否解决了问题。使用的一些缺点fragile
在此主题。
我也借此机会排版了图表,其中execute at end picture
键用于连接两个边缘标签,并通过alias
键获得名称。
\documentclass{beamer}
\usetheme[width=2.18cm]{PaloAlto}
\usefonttheme{serif}
\usepackage{tikz-cd}
\begin{document}
\begin{frame}[fragile]
\frametitle{Not important}
\framesubtitle{Neither important}
$\begin{tikzcd}[execute at end picture={
\path (F) edge[double equal sign distance, -Implies,"$\omega$",
shorten >=2pt,shorten <=2pt] (G);}]
\mathcal{C} \arrow[r,bend left,"F" {alias=F}]
\arrow[r,bend right,"G" {swap,alias=G}]& \mathcal{D}
\\
\end{tikzcd}$
\end{frame}
\end{document}
附录:有人认为“&”符号是问题所在。我不同意这种说法。例如
\begin{frame}
\frametitle{The ampersand per se is not the problem}
\begin{tabular}{ccc}
a & b & c\\
\end{tabular}
\end{frame}
确实有效。正是这行\catcode\
\&=13 that can be found in
tikz.code.tex . It is true, though, that ampersand replacement is another way to solve the problem. I also want to add that I was using
execute at end picture for a reason. Even though there are seemingly simpler ways, they do not allow you to control the order in which the arrows are placed because
tikz-cd` 在内部收集它们并按照我们无法控制的顺序绘制它们。在这里这并不重要,但你可以找到这里一个确实如此的例子。
答案2
这是一个已知问题:当 atikzcd
位于另一个命令的参数中时,&
无法使用;不过,有一个方便的解决方法。
\documentclass{beamer}
\usetheme[width=2.18cm]{PaloAlto}
\usefonttheme{serif}
\usepackage{tikz, tikz-cd}
\usetikzlibrary{arrows,shapes,cd}
\begin{document}
\begin{frame}{Not important}
\framesubtitle{Neither important}
\begin{tikzcd}[ampersand replacement=\&,column sep=4em]
\mathcal{C} \arrow[r, bend left=30, "F"{name=U}]
\arrow[r, bend right=30, "G"'{name=D}]
\& \mathcal{D}
\arrow[Rightarrow, from=U, to=D,shorten=4pt,"\omega"]
\end{tikzcd}
\end{frame}
\end{document}