如何更改预定义命令后的下划线行为?

如何更改预定义命令后的下划线行为?

我喜欢为经常使用的符号创建快捷方式,并且我想更改自定义命令后下划线的行为。例如,如果我想添加下标,我想更改下标的位置,但命令前的下标只会将其放在末尾。这是我想要实现的行为的一个最小示例。

\documentclass{article}

\newcommand{\fx}{{f(x)}}
\newcommand{\fxi}{{f_i(x)}}

\begin{document}
This is a function: $\fx$. This is the $i$th function: $\fxi$. 
I want to do this $\fx_i$ but make it look like this $\fxi$.
\end{document}

例子

答案1

您可以使用 xparse 命令:

\documentclass{article}

\newcommand{\fxi}{{f_i(x)}}
\NewDocumentCommand\fx{e{_}}
 {
   \IfNoValueTF{#1}
    {f(x)}
    {f_{#1}(x)}
 }
\begin{document}
This is a function: $\fx$. This is the $i$th function: $\fxi$. I want to do 
this $\fx_i$ but make it look like this $\fxi$. 
\end{document}

在此处输入图片描述

答案2

以下解决方案仅使用 TeX 基元。使用\futurelet您可以测试下一个字符是否为_

\def\fx{\futurelet\next\fxA}
\def\fxA{\ifx\next_\expandafter\fxB\else f(x)\fi}
\def\fxB_#1{f_{#1}(x)}

\def\fxi{f_i(x)}

This is a function: $\fx$. This is the $i$th function: $\fxi$. 
I want to do this $\fx_i$ but make it look like this $\fxi$.

答案3

另一种可能性:定义一个名为的宏\fx,它采用一个默认情况下为空的可选参数。

在此处输入图片描述

\documentclass{article}
\newcommand{\fx}[1][]{f_{#1}(x)} % 1 optional argument; default: no arg.

\begin{document}
A basic function:   $\fx$

The $i$th function: $\fx[i]$

The $n$th function: $\fx[n]$
\end{document}

相关内容