有没有办法定义一个命令,使可能的后续下标被隐藏?比如
\newcommand{\mycommand}[1]{#1\nosubscript}
类似于数学运算符,\limit
如果我想要下面的下标。
背景是,我希望能够为带有覆盖层的投影仪定义命令,这些命令在特定幻灯片上根本不显示下标。我尽量避免将下标作为命令的参数。
我想要实现的是一个\underbrace
带有覆盖规范的重新定义命令,例如
$\underbrace<3>{x < 0}_{x \text{ negative}}$
将仅在指定的覆盖层上显示包含其下标的下括号,否则则不显示x < 0
。
答案1
只是定义
\def\mycommand#1_#2{#1}
应该可以解决问题。
如果你使用
\usepackage[intlimits]{amsmath}
您不需要\limits
计算总和,上述操作也同样有效。
结合我上述的尝试和 Claudio 的想法你应该能够做到:
\def\uncoversubscript<#1>#2_#3%
{#2_{\uncover<#1>{#3}}}
答案2
第一次试验是:
\newcommand<>{\uncoversubscript}[2]{#1_{\uncover#3{#2}}}
例子:
\documentclass{beamer}
\usepackage{amsmath,amssymb}
\newcommand<>{\uncoversubscript}[2]{%
#1_{\uncover#3{#2}}}
\begin{document}
\begin{frame}{Test}
\[\uncoversubscript<2>{x}{y} \uncoversubscript<2>{z}{1}\]
\end{frame}
\end{document}
结果框架:
第二次尝试(不完美):
\documentclass{beamer}
\usepackage{amsmath,amssymb}
% code by canaaerus
\def\uncoversubscript<#1>#2_#3%
{#2_{\uncover<#1>{#3}}}
% code by Hendrik Vogt - http://tex.stackexchange.com/a/5465/13304
\makeatletter
\let\saved@underbrace\underbrace
\renewcommand<>*\underbrace[1]{\@ifnextchar_{\ub@with<2>{#1}}{\ub@without{#1}}}
\def\ub@with<#1>#2_#3{\mathpalette\underbrace@i{{#2}_{\only<#1>{#3}}}}
\newcommand*\ub@without[1]{\mathpalette\underbrace@i{{#1}{}}}
\newcommand*\underbrace@i[2]{\underbrace@ii#1#2}
\newcommand*\underbrace@ii[3]{\saved@underbrace{#1#2}#3}
\makeatother
\begin{document}
\begin{frame}{Test}
\[ \uncoversubscript<2->x_y \hspace*{2cm} \underbrace{x}_{y} \]
\end{frame}
\end{document}
我不知道如何在这里传递\renewcommand<>*\underbrace[1]{\@ifnextchar_{\ub@with<2>{#1}}{\ub@without{#1}}}
当前的覆盖规范来改变<2>
。