定义带有下标或上标的新命令并避免“双下标”错误

定义带有下标或上标的新命令并避免“双下标”错误

我经常使用通过 定义的快捷方式\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示例中定义的宏将查找以下字符是否为_,如果是,则合并下标。

相关内容