我经常使用通过 定义的快捷方式\newcommand
。但是,如果快捷方式包含下标,而我在使用时尝试添加一个下标,则有时会引发“双下标”问题。
我知道有各种各样的解决方法,如下例所示。但定义此类快捷方式的最可靠方法是什么?
代码示例:
\documentclass{article}
% define some shortcuts
\newcommand\xa{x_a}
\newcommand\xb{{x_b}}
\def\cmpto{\quad\textrm{compare to}\quad}
\begin{document}
% this produces a "double subscript" error
%\[ \xa_i \]
This is a workaround, which produces a good result
\[ \xa{}_i \cmpto x_{ai} \]
But still not ideal: watch the position of the superscript
\[ \xa{}_i^2 \cmpto x_{ai}^2 \]
The \verb+{x_b}+ below produces no error, but does not look good
(watch the baseline of the subscripts)
%
\[ \xb_i \cmpto x_{bi} \]
Also superscript does not look good
%
\[ \xb^2 \cmpto x_b^2 \]
\end{document}
答案1
只要您在新定义的命令旁边始终放置下标,此方法即可起作用:
\documentclass[a4paper]{article}
\makeatletter
\newcommand\newsubcommand[3]{\newcommand#1{#2\sc@sub{#3}}}
\def\sc@sub#1{\def\sc@thesub{#1}\@ifnextchar_{\sc@mergesubs}{_{\sc@thesub}}}
\def\sc@mergesubs_#1{_{\sc@thesub#1}}
\makeatother
\newsubcommand{\xa}{x}{a}
\begin{document}
$\xa$
$\xa_i x_{ai}\xa^2 x_a^2$
\end{document}
它可能会扩展到支持\xa^2_i
,但增加复杂性似乎不是一个好主意。
解释
该命令\newsubcommand
定义一个缩写,其中第一个参数是需要定义的命令,第二个参数是主字母,第三个参数是固定下标。
\xa
示例中定义的宏将查找以下字符是否为_
,如果是,则合并下标。