使用条件定义新命令

使用条件定义新命令

我想定义一个新命令(用于仅在数学模式下),其执行取决于给它的输入。具体来说,我想定义\F

\newcommand{\F}[1]{F#1}

如果输入中的第一个字符(

\newcommand{\F}[1]{F(#1)}

如果输入中的第一个字符不是(

举个例子,我想\F{x}输出F(x)\F{(x)}输出F(x)

我不知道该怎么办。

答案1

无需任何包裹。

\documentclass{article}
\newcommand\F[1]{\Faux#1\endFaux}
\makeatletter
\newcommand\Faux{\@ifnextchar(\Fnoadd\Fadd}
\makeatother
\def\Fadd#1\endFaux{F(#1)}
\def\Fnoadd#1\endFaux{F#1}
\begin{document}
$\F{(x)}$ $\F{(G(x))}$

$\F{x}$ $\F{G(x)}$ 
\end{document}

在此处输入图片描述

答案2

您可以使用以下代码实现此目的:

\usepackage{xstring}
\usepackage{ifthen}
\newcommand{\F}[1]{
    \StrLeft{#1}{1}[\firstletter]%
    \StrRight{#1}{1}[\lastletter]%
    \ifthenelse{\equal{(}{\firstletter} \AND \equal{)}{\lastletter}}{F#1}{F(#1)}%
}

它基本上检查参数的第一个和最后一个字符是什么,如果它们是“(”和“)”,它将输出没有额外括号的参数。

相关内容