在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
;并且只发生在beamer
document 类中。我很好奇:为什么会发生这种情况?有简单的解决方法吗?
(当然有一个简单的解决方法:放入\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}
所以最后我决定结合使用这两种解决方案。