Bedingt basierend auf dem Zeichen, das dem Makro folgt

Bedingt basierend auf dem Zeichen, das dem Makro folgt

Im Grunde genommen würde ich gerne etwas wie „ \xspacedoes“ verwenden, d. h. die Bedeutung des Makros sollte davon abhängen, was darauf folgt. Wenn ich also beispielsweise sage:

\mymacro a

es könnte zu erweitert werden foo, und wenn ein anderes Zeichen folgt, sollte es zu erweitert werden bar. In meinem speziellen Fall werde ich versuchen, ein Unicode-Zeichen zuzuordnen, falls das einen Unterschied macht.

Bearbeiten:Insbesondere möchte ich den Abstand nach einem Integral beeinflussen. Wenn es allein steht, ist der Standardabstand in Ordnung. Wenn es das erste von mehreren Integralen ist, wird der Abstand zu groß. Hier ist, was ich aus der vorherigen Antwort zusammengeschustert habe:

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

So sieht es im Einsatz aus:

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

Bildbeschreibung hier eingeben

Antwort1

Dies ist eine einfache Anwendung von \@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}

Bildbeschreibung hier eingeben

Die LaTeX3-Version:

\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}

verwandte Informationen