如何编写宏来重写下标。例如,将`\smartind ABC_i` 重写为 `ABC_{(i)}`

如何编写宏来重写下标。例如,将`\smartind ABC_i` 重写为 `ABC_{(i)}`

我正在研究下标以及如何格式化围绕它的各种事物。

因此,我想在下标表达式前面添加一个宏,这样我就可以访问下划线之前和之后的项目。

例如:

让它做到:

  • \smartind A_b 和...相同A_(b)
  • \smartind ALPHABET_b 和...相同ALPHABET_(b)

我觉得这是一份工作xparse

附言

出于兴趣,我最终将其做成了以下形式:https://codereview.stackexchange.com/questions/183255/a-smart-subscript-indexing-macro

答案1

您可以使用参数文本规范来\def识别期望的确切模式;它的功能可能类似于xparseu{<token>}参数规范:

在此处输入图片描述

\documentclass{article}

\def\smartind#1_#2{#1_{(#2)}}

\begin{document}

$A_b \quad \smartind A_b$

$AB_c \quad \smartind AB_c$

$ABC_{def} \quad \smartind ABC_{def}$

\end{document}

答案2

简单的例子就是把_作为强制性参数吃掉

\usepackage{xparse}

\DeclareDocumentCommand{\smartind}{m m m}{
%   \ifstrequal{#2}{_}{}{\errmessage{Expected underscore (not #2) between #1 and #3}} 
% the above line requires etoolbox, uncomment it to assert that the _ is inplace
    \ind{#1}{#2}
}

这对 来说可以工作\smartind A_b,但你必须写\smartind {ALPHABET}_b

你真正追求的是直到说明符解析

u读取参数“直到”〈tokens〉 遇到,其中所需的〈tokens〉 作为说明符的参数给出: u{tokens}

\DeclareDocumentCommand{\smartind}{u{_} m}{
        #1_{(#2)}
}

效果很好

相关内容