![定义带索引符号的命令,与重音符号结合](https://linux22.com/image/255230/%E5%AE%9A%E4%B9%89%E5%B8%A6%E7%B4%A2%E5%BC%95%E7%AC%A6%E5%8F%B7%E7%9A%84%E5%91%BD%E4%BB%A4%EF%BC%8C%E4%B8%8E%E9%87%8D%E9%9F%B3%E7%AC%A6%E5%8F%B7%E7%BB%93%E5%90%88.png)
为了方便编写包含带下标符号的公式,我经常定义自定义命令。但是,将这些命令与重音符号组合会产生不愉快的结果。有没有办法定义这样的缩写,同时仍然获得“正确”的重音符号位置?例如,
\documentclass{article}
\newcommand{\ang}{\varphi_\mathrm{example}}
\begin{document}
$\ang$ is ok, but $\dot{\ang}$ is not. I'd rather obtain $\dot{\varphi}_\mathrm{example}$ without spelling it out. How?
\end{document}
答案1
数学重音在下一个数学原子上起作用。\dot
不带参数,花括号会生成一个子公式,点会放在子公式上方。没有花括号\ang
会展开,点会放在上面\varphi
。
\documentclass{article}
\newcommand{\ang}{\varphi_\mathrm{example}}
\begin{document}
\begin{tabular}{ll}
\verb|$\dot{\ang}$| & $\dot{\ang}$ \\
\verb|$\dot\ang$| & $\dot\ang$ \\
\end{tabular}
\end{document}
更新:
如果包amsmath
\dot
和一些其他重音符被重新定义并捕获其基字符作为参数。那么上面的例子将不起作用。这个问题可以通过使用来解决\expandafter
。\ang
展开一次。然后\dot
看到定义文本的第一个标记(或标记组)\ang
,即\varphi
:
\documentclass{article}
\usepackage{amsmath}
\newcommand{\ang}{\varphi_\mathrm{example}}
\begin{document}
\begin{tabular}{ll}
\verb|$\dot{\ang}$| & $\dot{\ang}$ \\
\verb|$\expandafter\dot\ang$| & $\expandafter\dot\ang$ \\
\end{tabular}
\end{document}