TikZ 与 Beamer 上的 Babel 发生冲突

TikZ 与 Beamer 上的 Babel 发生冲突

我试图在 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}

在此处输入图片描述

相关内容