\everymath、AMS 方程、beamer 和 tikz 无法协同工作

\everymath、AMS 方程、beamer 和 tikz 无法协同工作

beamer文档中,我将$表达式嵌入到显示的方程式中(tikz例如,使用 来制作一些表达式周围的彩色框)。我将其放在\everymath{\displaystyle}序言中,以便这些表达式不会以文本样式显示。但是,当表达式$位于 AMS 方程式环境中而不是 时,则不会遵循equation此规则:\everymath

\documentclass{beamer}

\usepackage{tikz}
\usepackage{amsmath}

\everymath{\displaystyle}

\begin{document}
  $\sum_i$ \$ expr\\                 % works
  \tikz \node {$\sum_i$ \$ in tikz}; % works
  \begin{equation}
    \tikz \node {$\sum_i$ tikz in equation}; % works
    \text{$\sum_i$ text in equation}         % works
  \end{equation}
  \begin{gather}
    \tikz \node {$\sum_i$ tikz in gather};   % problem
    \text{$\sum_i$ text in gather}           % works
  \end{gather}
\end{document}

请注意,这种情况只发生在 内部\tikz,而不是\text;并且只发生在beamerdocument 类中。我很好奇:为什么会发生这种情况?有简单的解决方法吗?

(当然有一个简单的解决方法:放入\displaymath每个$表达式...但也许有更优雅的东西?)

答案1

我尚不确定的某些东西会重置数学渲染(可能是由于框字体设置或与包相关的某些东西,gather但我不太擅长数学设置amsmath包的差异)。因此,如果您在每次启动节点时推送要执行的命令,看起来问题就消失了。此外,我建议不要mathtools使用amsmath

\documentclass{beamer}

\usepackage{tikz}
\usepackage{mathtools,lmodern}

\everymath{\displaystyle}
\tikzset{execute at begin node={\everymath{\displaystyle}}} 
\begin{document}
\begin{frame}
  $\sum_i$ \$ expr\\                 % works
  \tikz \node {$\sum_i$ \$ in tikz}; % works
  \begin{equation}
    \tikz[baseline] \node {$\sum_i$ tikz in equation}; % works
    \text{$\sum_i$ text in equation}         % works
  \end{equation}
  \begin{gather}
    \tikz[baseline] \node {$\sum_i$ tikz in gather};   % problem
    \text{$\sum_i$ text in gather}           % works
  \end{gather}
\end{frame}
\end{document}

在此处输入图片描述

答案2

beamerbasecolor.sty(由 加载beamer.cls)重新定义\start@gather为执行\donotcoloroutermaths,然后执行

\everymath{\everymath{\beamer@setmathcolor}}

您可以通过添加以下内容解决该问题\displaystyle

\documentclass{beamer}

\usepackage{tikz}
\usepackage{amsmath}

\everymath{\displaystyle}
\makeatletter
\renewcommand\donotcoloroutermaths{%
  \everymath{\everymath{\displaystyle\beamer@setmathcolor}}%
}
\makeatother

\begin{document}
\begin{gather}
  \tikz \node {$\sum_i$ tikz in gather};
\end{gather}
\end{document}

此修复也适用于align其他amsmath环境。

答案3

egreg 和 percusse 都提供了解决我提供的测试用例问题的答案。然而,在我的实际文档中,事情变得有点复杂,所以我想分享我学到的东西。

具体来说,我\tikz在 中有一个表达式\intertext,并且只适用于 percusse 的解决方案。另一方面,我$在 中有一个表达式tabular,并且只适用于 egreg 的解决方案:

\documentclass{beamer}

\usepackage{tikz}
\usepackage{amsmath}

\everymath{\displaystyle}

% percusse
\tikzset{execute at begin node={\everymath{\displaystyle}}} 

% egreg
\makeatletter
\renewcommand\donotcoloroutermaths{%
  \everymath{\everymath{\displaystyle\beamer@setmathcolor}}%
}
\makeatother

\begin{document}
\begin{gather}
  \tikz \node {$\sum_i$ tikz in gather};    % works with either solution
  \intertext{                               % works with percusse's solution
    \tikz \node {
      $\sum_i$ tikz in intertext
    };
  }
\end{gather}

\begin{tabular}{l}
  $\sum_i$                                  % works with egreg's solution
\end{tabular}
\end{document}

所以最后我决定结合使用这两种解决方案。

相关内容