这是在方程模式中突出显示项,
问题是,
\newcommand{\highlight}[1]{%
\colorbox{red!50}{$\displaystyle#1$}}
在中$x^{\highlight{\alpha}}$
,,\alpha
被异常放大,不像正常的上标。
有没有办法在数学模式中突出显示特定变量,同时保持下标和上标?
答案1
您的\highlight
命令在上标中不起作用,因为(1)中的等式\colorbox
不知道它应该以何种方式排版\scriptstyle
,以及(2)因为\displaystyle
其定义中明确告诉 TeX#1
以显示样式排版(使用全尺寸字体和诸如大求和/积分符号之类的东西)。
这几乎就是该\mathpalette
命令旨在解决的问题。有关\mathpalette
工作原理的详细描述,请参见这里。
这是一个使用 `\mathpalette 的简单重新实现。(下面可以找到改进的版本)
\documentclass{article}
\usepackage{xcolor}
\newcommand{\highlight}[1]{\mathpalette\highlightwithstyle{#1}}
\newcommand{\highlightwithstyle}[2]{\colorbox{red!50}{$#1#2$}}
\begin{document}
\[
a^{\highlight{\alpha}} + \highlight{\sum}
\]
\end{document}
现在要做的\highlight{\alpha}
是扩展为\highlightwithstyle{<current math style>}{\alpha}
,其中<current math style>
是\displaystyle
、\textstyle
或(以合适的为准\scriptstyle
)\scriptscriptstyle
。这又变成了
\colorbox{red!50}{$\scriptstyle\alpha$}
当用于上标/下标时,
\colorbox{red!50}{$\displaystyle\alpha$}
在主显示方程式等中使用时(另外两种情况是\textstyle
用于内联方程式和\scriptscriptstyle
嵌套的上/下标。)
附录(改进版)
这是同一命令的另一个版本,它创建一个稍微紧凑的框,并且在大多数情况下(但不是所有情况下)不会影响方程的间距。它还允许您指定颜色。
\documentclass{article}
\usepackage{xcolor}
\newcommand{\highlight}[2][red!50]{\mathpalette{\highlightwithstyle[#1]}{#2}}
\newcommand{\highlightwithstyle}[3][red!50]{
\begingroup %% <- limit scope of \box0 and \fboxsep assignment
\sbox0{$\mathsurround 0pt #2#3$}% %% <- typeset content in box 0
\setlength{\fboxsep}{.5pt} %% <- set (smaller) framebox margins
\sbox2{\hspace{-.5pt}% %% <- create box 2, undo margin
\colorbox{#1}{\usebox0}% %% <- print the contents of box 0 in a \colorbox
}%
\dp2=\dp0 \ht2=\ht0 \wd2=\wd0 %% <- set dimensions of box 2 to match box 0
\box2 %% <- print box 2
\endgroup %% <- revert old definitions of the boxes and \fboxsep
}
\begin{document}
\[
a^{\highlight{\alpha}} + \highlight{\sum_{k=1}^\infty \frac{\fbox{1}}{\color{blue}k!}} + \frac{\highlight[green]{x}}{2}
\]
\[
a^{\alpha} + \sum_{k=1}^\infty \frac{\fbox{1}}{\color{blue}k!} + \frac{x}{2}
\]
\end{document}
我试图在注释中解释每行的作用,除了\mathsurround
。在这里设置\mathsurround
为0pt
不执行任何操作,但如果您的文档在内联方程式周围使用非标准间距(这种情况不太可能发生),则这很重要。