我试图在 LaTeX 演示文稿中使用 tikz-cd 绘制交换图,但我反复收到错误“!\language@active@arg 的参数”有一个多余的 }。”。
\documentclass{beamer}
\usepackage{tikz-cd}
\usepackage[ngerman]{babel}
\usetikzlibrary{babel}
\tikzset{
every picture/.prefix style={
execute at begin picture=\shorthandoff{"}
}
}
\begin{document}
\begin{frame}
\begin{center}
\begin{tikzcd}[ampersand replacement=\&]
F(x) \arrow[r, "a"] \& G(x)
\end{tikzcd}
\end{center}
\end{frame}
\end{document}
通过搜索这个论坛,我发现了一些使用\shorthandoff{"}
或 的建议\usetikzlibrary{babel}
。但是,它们都无法解决错误(也无法像上面的示例代码那样同时使用它们)。
代码在没有“a”部分的情况下也能工作\arrow[r, "a"]
,而且我在英文文档中使用 tikzcd 从来没有遇到过问题。
我的错误在哪里?我该如何改正?
答案1
看看以下解决方法是否适合您:
\documentclass{beamer}
\usepackage[ngerman]{babel}
\usepackage{tikz-cd}
\usetikzlibrary{babel}
\usepackage{etoolbox} % <---
\AtBeginEnvironment{frame}{\shorthandoff{"}}% <---
\begin{document}
\begin{frame}
Some "text" \dots
\begin{center}
\begin{tikzcd}[ampersand replacement=\&]
F(x) \arrow[r, "a"] \& G(x)
\end{tikzcd}
\end{center}
\end{frame}
\end{document}
答案2
另一种可能性是使用不同的箭头语法,这样您就不必关闭速记:
\documentclass{beamer}
\usepackage{tikz-cd}
\usepackage[ngerman]{babel}
\usetikzlibrary{babel}
\begin{document}
\begin{frame}
\begin{center}
\begin{tikzcd}[ampersand replacement=\&]
F(x) \arrow[shift left]{r}{a} \arrow[shift right]{r}[swap]{b} \& G(x)
\end{tikzcd}
\end{center}
\end{frame}
\end{document}