根据宏后面的字符进行条件判断

根据宏后面的字符进行条件判断

基本上,我希望这样\xspace做,即宏的含义应该取决于其后的内容。例如,如果我说

\mymacro a

它可能会扩展为foo,如果后面有其他字符,它应该扩展为bar。在我的特定情况下,我将尝试匹配 unicode 字符(如果这有区别的话)。

编辑:具体来说,我想影响积分后的间距。当它独立时,默认间距就没问题。如果它是多个积分中的第一个,那么空间就会变得太宽。这是我从上一个答案中拼凑起来的:

\newcommand\timeintegral[1]{
    ∫_{t_0}^{t_1} \if ∫#1 \!\!\! \fi #1
}

使用时效果如下:

\timeintegral E \, dt = \timeintegral ∫_z ∫_φ f \, dφ dz dt

在此处输入图片描述

答案1

这是一个简单的应用\@ifnextchar

\documentclass{article}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setmathfont{Asana Math}

\makeatletter
\newcommand{\timeintegral}{%
   ∫_{t_0}^{t_1} \@ifnextchar∫{\!\!\!}{}%
}
\makeatother

\begin{document}
\[
\timeintegral E \, dt = \timeintegral ∫_z ∫_φ f \,dφ\,dz\,dt
\]
\end{document}

在此处输入图片描述

LaTeX3 版本:

\documentclass{article}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setmathfont{Asana Math}

\ExplSyntaxOn
\NewDocumentCommand{\timeintegral}{}
 {
  ∫\sb{t\sb{0}}^{t\sb{1}} \psirus_check_int:
 }
\cs_new_protected:Npn \psirus_check_int:
 {
  \peek_charcode_ignore_spaces:NT ∫ { \!\!\! }
 }
\ExplSyntaxOff

\begin{document}
\[
\timeintegral E \, dt = \timeintegral ∫_z ∫_φ f \,dφ\,dz\,dt
\]
\end{document}

相关内容