Babel、tikz 和 Beamer 不能协同工作

Babel、tikz 和 Beamer 不能协同工作

以下代码无法构建,并显示以下消息

! Argument of \language@active@arg" has an extra }.

\documentclass[dvipsnames,unknownkeysallowed,12pt]{beamer}
\usepackage[brazil]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8x]{inputenc}
\usepackage{tikz}
\usetikzlibrary{arrows,babel,calc,angles,quotes}
\usepackage{tikzsymbols}
\begin{document}
\section{Figura}
\begin{frame}
         TiKz   \pgfversion
\begin{tikzpicture}
\draw [thick]
(3,-1) coordinate (a) node[right] {a} -- (0,0) coordinate (b) node[left] {b} 
-- (2,2) coordinate (c) node[above right] {c} pic["$\alpha$", thick,draw=orange, <->, angle eccentricity=1.2, angle radius=1cm] {angle=a--b--c};
\end{tikzpicture}
\end{frame}
\end{document}

然而,如果对 brazil babel 行进行了注释或者 tikzpicture 是在框架之外构建的,那么它就可以工作。\pgfversion显示 3.0.0。

答案1

TikZ 库提供的机制babel"在启动 时更改 的类别代码tikzpicture。本质上,它相当于\shorthandoff{"}在 之后添加\begin{tikzpicture}

不幸的是,这在 Beamer 中无法实现frame,因为框架的内容在处理之前就被吸收了,因此字符标记会获得其类别代码,任何\shorthandoff{"}命令都无法再更改该代码。

解决方法(我知道,有点丑陋):使用\begin{frame}[fragile],这会让 Beamer 写出框架的内容以供稍后重新读取。

请注意\end{frame},在这种情况下,必须从最左边的列开始,前面不带任何空格。

相关内容